From 30b8c224c1f694308bbca85e58e9e8304ab11b18 Mon Sep 17 00:00:00 2001
From: Paul Wagener Bij dit onderdeel gaan we aan de slag met certificaten. De tool die we daarvoor gaan gebruiken is OpenSSL. Dit is een veelgebruikt
+ programma waar je vele cryptografische dingen mee kunt doen. Op Linux en Mac OS X is deze tool al geïnstalleerd, Windows gebruikers moeten deze nog installeren. Als je
+ zoekt op het internet vindt je verschillende mogelijkheden om dat te doen. Bijvoorbeeld de v.1.1.0f Light versie op
+ deze website. Let op dat je dan op de Windows command line het hele pad moet gebruiken in plaats van alleen 'openssl'.
+ Bijvoorbeeld:
+ C:\OpenSSL-Win32\bin\openssl.exe
+ Als je bij het gebruik van OpenSSL errors krijgt, probeer dan eerst je command prompt als Administrator te openen. En als
+ dat ook niet werkt om het volgende commando uit te voeren: Dat zijn vragen die webbrowsers elke dag moeten beantwoorden. Een site kan wel vinden dat het www.rabobank.nl is, maar daarmee
+ weet een browser nog niet zeker dat het ook daadwerkelijk de webserver van de Rabobank is. Misschien zit je eigenlijk te
+ communiceren met een server ergens in Rusland van een persoon die maar al te graag je inlogcodes wil weten. Om dit probleem op te lossen zijn er certificaten bedacht en vastgelegd in de
+ X.509 standaard. Certificaten zijn kleine bestandjes waarin een identiteit staat beschreven. Dit is bijvoorbeeld een
+ certificaat van Paul Wagener: Nu wil jij natuurlijk meteen een eigen certificaat voor jezelf hebben, en dat kan! Met dit alles-in-1 commando maak je een
+ certificaat dat helemaal van jou is: Dit commando doet een paar dingen tegelijk waar we later op terugkomen. Nadat je de gevraagde informatie hebt ingevuld staat
+ er in het bestand certificaat.crt jouw certificaat. Met dit commando kan je je nieuwe certificaat bewonderen: Een certificaat heeft ook altijd een
+ verstrekker (issuer). Dit is de persoon of bedrijf die het certificaat heeft gemaakt en daarmee garant staat dat de
+ identiteit die op het certificaat staat ook klopt. In jouw certificaat staat dat je over jezelf hebt gezegd dat je bent
+ wie je zegt dat je bent. Niet echt betrouwbare informatie dus... Iedereen zou precies datzelfde certificaat kunnen maken. Het wordt pas interessant en betrouwbaar als andere partijen het certificaat verstrekken en zo kunnen zeggen dat ze de gegevens
+ van het certificaat gecontroleerd hebben. Als jij die verstrekker vertrouwt dat hij zijn werk goed doet met de correctheid
+ van certificaten controleren. Dan vertrouw je ook indirect de gegevens op het certificaat. Zo hoef je maar een handjevol
+ verstrekkers te vertrouwen om bijna alle websites op het internet te kunnen vertrouwen. Elke besturingssysteem heeft een lijst van basis verstrekkers die ze impliciet vertrouwen, deze lijst kan je bekijken en
+ veranderen door in je geavanceerde browserinstellingen op zoek te gaan naar een knop 'Beheer certificaten' (te vinden in
+ het Advanced -> Certificates tabblad in Firefox).
+
+ Hint: Het certificaat kan je in alle browsers bekijken door op het slot-ikoontje te klikken Zo'n certificaat wat je aan jezelf hebt verstrekt vertrouwd natuurlijk niemand. We moeten eerst iemand vinden die jouw
+ certificaat wil ondertekenen. Er is een speciaal bestandsformaat om aan een verstrekker te vragen of hij jouw certificaat wil ondertekenen:
+ .csr. Dat staat voor Certificate Signing Request. Een soort van bedelbrief die je rond kan sturen met je certificaat
+ waar nog een verstrekker bij moet. Je kan onderstaand commando gebruiken om je eigen gemaakte certificaat als basis te gebruiken voor zo'n Certificate Signing
+ Request:
+ Zo'n verzoekje kan je vervolgens bij een certificaat autoriteit zoals Thawte of VeriSign inleveren. Voor een paar honderd
+ euro zijn ze dan bereid om hun handtekening eronder te zetten. Om deze les relatief goedkoop te houden heeft deze site ook een certificaat autoriteit waar je certificaten kan laten ondertekenen:
+ Certificaat Autoriteit. Gebruik deze site om jouw certificaat te laten ondertekenen Om zelf verstrekker te spelen heb je helemaal geen speciale certificaten nodig. Je kan namelijk gewoon je eigen certificaat
+ en sleutel gebruiken die je aan het begin van de les hebt gemaakt. Vraag een medestudent om een Certificate Signing Request
+ van zijn certificaat te geven en onderteken dat met je eigen certificaat. Zoek op internet het commando op waarmee je
+ dat kan doen. Tip: zorg ervoor dat jouw certificaat standaard wordt geinstalleerd op alle besturingsystemen. Dan kan je goud geld verdienen
+ met het ondertekenen van andere certificaten ;) Leuk die certificaten, maar laten we niet vergeten dat we er ook nog wat nuttigs mee kunnen doen. Namelijk onze internetverbindingen
+ beveiligen. Om hiermee te oefenen moet je
+ deze virtual machine downloaden. Het wachtwoord van deze VM is
+
+ sec2
+ . We hebben een aantal dingen gewijzigd hierin: Controleer eerst of de site http://www.security2.nl in jouw VM te bereiken is, en via http
+ s://www.security2.nl/ nog niet te bereiken is. Je gaat de site in de volgende opgaven beveiligen met SSL, om dat
+ te doen moeten we eerst SSL aanzetten in Apache met de volgende commando's: Hint: Commando's vul je in in het programma 'Terminal' De site is nu ook via https:// bereikbaar, maar Apache heeft een ongeldig dummy certificaat gebruikt om de site te beveiligen.
+ Om het werkend te krijgen moeten we eerst de volgende stappen uitvoeren: Als je alles goed hebt gedaan is de site nu met SSL beveiligd! Controleer of je de site in de VM nu kan bereiken via https://www.security2.nl/
+ (Alleen Chrome werkt, certificaat is niet aan Firefox toegevoegd). Als je een groen slotje krijgt mag je de volgende
+ vraag beantwoorden:
+
+
+ Sinds 2015 is er
+ een nieuwe speler op de markt die gratis certificaten verstrekt, mits je kan bewijzen dat jouw website van jouw is
+ natuurlijk. Dit gaat met behulp van de command-line
+ We gaan nu websec.paulwagener.nl beveiligen, niet deze website die je nu aan het bekijken bent, maar weer de localhost
+ die in de VM draait. Maar nu gaan we hem met behulp van Let's Encrypt beveiligen.
+ Tip:Je mag voor deze opdracht ook een eigen domein dat je hebt beveiligen! Let even op dat de commando's dan niet
+ overal exact hetzelfde zijn. Zeker als je geen Apache gebruikt. Controleer eerst dat
+ https://websec.paulwagener.nl// in de VM een fout geeft, dat komt omdat het certificaat van de vorige opdracht nog
+ steeds van www.security2.nl is (als je de vorige opdracht goed hebt gedaan, anders krijg je misschien een andere fout).
+ De browser ziet dat dat niet hetzelfde domein is en geeft terecht een error. We gaan beginnen met het aanvragen van een certificaat. Dit doen we met het volgende commando:
+
+ Even een korte uitleg van dit commando: Als je dit commando voor de eerste keer uitvoert wordt er gevraagd naar je e-mailadres, daar kan je invullen wat je wil.
+ Voor het domein gaan we websec.paulwagener.nl invullen. Als je je eigen domein wil beveiligen vul je hier uiteraard
+ je eigen domein in. Let's Encrypt vraagt daarna om een bestandje op de server te zetten in een hele specifieke map (.well-known/acme-challenge)
+ op de echte websec.paulwagener.nl server. Normaliter zou dit een probleem zijn, want dat kan alleen als je toegang
+ hebt tot de server. Maar speciaal voor jullie is er
+ een pagina waar je de code kan kopieren en er voor zorgen dat het bestandje 10 minuten lang op onze server wordt
+ gehost!
+ Nadat de challenge is geslaagd zal Let's Encrypt nog een melding geven over dat de self-verification failed (in de VM
+ wijst websec.paulwagener.nl immers naar de localhost, en niet naar het bestandje op de echte server). Maar dat kan
+ je negeren, als het goed is gegaan staan de certificaten nu in de map
+ Met dit commando kan je je nieuwe certificaat bekijken: Stel het default-ssl.conf configuratie bestand van Apache nu zo in dat het de certificaten van Let's Encrypt gebruikt: Sla het bestand op, reload Apache en als het goed is heb je nu een beveiligde https://websec.paulwagener.nl/, helemaal
+ gratis en voor niets! Het zal je misschien opvallen dat de verstrekker Fake is, dat komt omdat we de
+ Om het makkelijker te maken om publieke sleutels uit te wisselen kan GPG gebruik maken van een
keyserver. Dit is een speciale server die een lijst van publieke sleutels bijhoud. Voor onderstaande opdrachten hebben
we onze eigen keyserver ingericht op websec.paulwagener.nl.
- Deze werkt niet als je de opdrachten thuis maakt. De Avans firewall blokkeert poort 11371 waarop deze server werkt.Certificaten
+
+SET OPENSSL_CONF=[pad naar bestand]\openssl.cfg
+
+
+
+Wie ben jij? En waarom zou ik jou vertrouwen dat je bent wie je zegt dat je bent?
+
+
+
+
openssl req -x509 -nodes -newkey rsa:2048 -keyout sleutel.key -out certificaat.crt
+
+openssl x509 -text -in certificaat.crt
+
+-----BEGIN CERTIFICATE-----
)
+ {% include "points.html" with points=answers.answer_openssl_selfsigned_certificate.points max="10" %}
+
+Mag ik uw handtekening?
+
+ openssl x509 -x509toreq -in certificaat.crt -signkey sleutel.key -out certificaat_verzoek.csr
+
+ -----BEGIN CERTIFICATE-----
)
+ {% include "points.html" with points=answers.answer_openssl_signed_cert.points max="10" %}
+
+ Zelf verstrekken
+
+ Sometimes, the only one you can trust is yourself.
+
+ -----BEGIN CERTIFICATE-----
)
+ {% include "points.html" with points=answers.answer_openssl_sign_other.points max="10" %}
+
+ Websites beveiligen
+
+
+
+
+ sudo a2enmod ssl
+
+
+sudo a2ensite default-ssl
+sudo service apache2 reload
+
+
+ www.security2.nl
zijn.sudo gedit /etc/apache2/sites-available/default-ssl.conf
om de standaard SSL configuratie aan te passen.SSLCertificateFile
en
+ SSLCertificateKeyFile
zodat ze naar jouw certificaat en sleutel bestand wijzensudo service apache2 reload
+ -----BEGIN CERTIFICATE-----
)
+ {% include "points.html" with points=answers.answer_openssl_ssl_cert.points max="10" %}
+
+
+
+
Let's Encrypt
+
+
+
+
letsencrypt
tool die automatisch certificaten maakt en ondertekend voor jouw website. Deze tool hebben we al voor je geinstalleerd
+ in de VM.sudo letsencrypt certonly --manual --staging
+
+
+
+
+ letsencrypt-auto
,
+ certbot
of
+ certbot-auto
zijn.--webroot
,
+ --apache
) proberen het bestandje automatisch te plaatsen en de webserver te configureren. Dat gaat voor deze opdracht niet
+ werken omdat de echte websec.paulwagener.nl veilig ergens draait en van buiten niet te configureren is.
+
+
+
+
/etc/letsencrypt/live/websec.paulwagener.nl
!.
+
+
+
+
sudo gedit /etc/letsencrypt/live/websec.paulwagener.nl/fullchain.pem
+
+ fullchain.pem
certificaat voor websec.paulwagener.nl. (inclusief alle begin en einde
+ -----BEGIN CERTIFICATE-----
)
+ {% include "points.html" with points=answers.answer_openssl_letsencrypt_fullchain.points max="0" %}
+
+
+
+
+
+
--staging
optie hebben gebruikt. In de VM is deze toegevoegd als iets dat we kunnen vertrouwen (en dus een groen slotje oplevert),
+ maar in de echte wereld is dat niet zo. Zorg er dus bij je eigen website zo dat je niet de --staging optie gebruikt
+ als je voor de echie certificaten aan het maken bent
GPG kan je hier voor Windows downloaden, na het installeren kan je in je CMD alle commando's typen. Als je Linux of Mac OS X diff --git a/index.html b/templates/index.html similarity index 100% rename from index.html rename to templates/index.html diff --git a/letsencrypt.html b/templates/letsencrypt.html similarity index 100% rename from letsencrypt.html rename to templates/letsencrypt.html diff --git a/oauth.html b/templates/oauth.html similarity index 100% rename from oauth.html rename to templates/oauth.html diff --git a/path.html b/templates/path.html similarity index 100% rename from path.html rename to templates/path.html diff --git a/points.html b/templates/points.html similarity index 100% rename from points.html rename to templates/points.html diff --git a/sign.html b/templates/sign.html similarity index 100% rename from sign.html rename to templates/sign.html diff --git a/sql.html b/templates/sql.html similarity index 98% rename from sql.html rename to templates/sql.html index 3e2e8c6..c0d6166 100644 --- a/sql.html +++ b/templates/sql.html @@ -1,3 +1,4 @@ +{% extends 'base.html' %} {% block content %}