Een van de eerste uitdagingen die ik tegenkwam toen ik begon te ontwikkelen op een Windows machine, was het creëren van een valide SSL certificaat. Er zijn veel handleidingen te vinden die je van alles met IIS laten doen of via allerlei hoepels self signed certificaten laten genereren. Uiteindelijk ben ik toch teruggevallen op wat me zo beviel onder Linux: de command line.

Omdat het mijn doel was een om echt geldig certificaat te krijgen, moest ik eerst een CSR (certificate sign request) genereren om te kunnen opsturen naar een certificate authority zodat ik een geldig certificaat krijg. Natuurlijk is het mogelijk om een certificaat te bemachtigen zonder eerst een CSR te genereren, maar dat raad ik af.

Een certificaat downloaden zonder CSR

Een certificaat bestaat altijd uit twee delen, het publieke en het privé deel. Het publieke deel kan gebruikt worden om informatie voor de houder van het certificaat te versleutelen, het privé deel om die weer te ontsleutelen. Ten overvloede, dat privé deel moet je dus voor jezelf houden. Wanneer je een volledig certificaat (publiek en privé deel) van een certificate authority krijgt betekend dus dat een of meer mensen het privé deel van je certificaat hebbben (gehad). Als je zelf een CSR genereert, dan genereer je zelf het privé deel en een gedeelte van het publieke deel van je certificaat. Deze informatie gebruikt je certificate authority om het publieke deel van je certificaat te maken. Ze krijgen dus het privé deel nooit te zien als je een CSR gebruikt. Helemaal wanneer je je certificaten bij je leverancier kan downloaden, is het dus verstandig om zelf een CSR te genereren.

Het genereren van een CSR

Zoals gezegd had ik geen zin in gedoe met IIS, domein controllers of allerlei andere onbekende software voor het genereren van een CSR, dus ik heb de OpenSSbinaries voor Windows gebruikt. Je kunt deze vinden op http://indy.fulgan.com/SSL/ of een andere bron opzoeken via www.openssl.org.

Nadat OpenSSL geinstalleerd is, kan een keypair gegeneerd worden. Dit keypair is de basis van een certificaat:

Ik heb gekozen voor een 4096 bit sleutel. Op dit moment zijn er veel tutorials of voorbeelden die een 1024 bit sleutel gebruiken, maar dit is echt te kort. Veel certificate authorities accepteren alleen nog maar CSR’s met een sleutel van 2048 of langer. Deze lengte zal veilig zijn tot ongeveer 2030 verwacht men. De reden dat ik 4096 gebruik, is simpelweg omdat ik kan. Na het genereren van het keypair, kunnen we dit gebruiken om een CSR te generen:

Dit CSR kunnen we opsturen naar een certificate authority om het publieke deel van het certificaat te ontvangen. Er zijn veel certificate authorities, de enige nog duurder dan andere. Zelf gebuik ik regelmatig StartSSL, welke gratis is voor privé gebruik.

Nu nog automatiseren

Lui als ik ben, wil ik dit natuurlijk niet elke keer met de hand doen, dus ik heb een eenvoudig Powershell script geschreven dat het downloaden van OpenSSL, het genereren van een keypair en CSR automatiseert. Leuk om ook eens aan scripten onder Windows, in Powershell te ruiken. Het is niet bepaald mijn lievelings, maar het werk. Het script is natuurlijk te downloaden en kan als volgt gebruikt worden:

Wat uiteindelijk twee bestanden oplevert: Het keypair en de CSR