OpenSSL op Windows 10: Een uitgebreide PowerShell-gids

Het genereren van SSL-certificaten kan een ontmoedigende taak zijn, gevuld met frustratie en verdriet. Maar dat hoeft niet zo te zijn! Als je Windows 10 hebt en OpenSSL samen met een beetje hulp van deze tutorial, ben je goed op weg.

In dit artikel ga je leren hoe je OpenSSL installeert op Windows 10. Eenmaal geïnstalleerd, ga je SSL-certificaten genereren, certificaten oplossen en debuggen, en converteren tussen formaten.

Laten we beginnen met het beheersen van OpenSSL op Windows 10 met PowerShell!

Gerelateerd: Certs beheren met Windows Certificate Manager en PowerShell

Vereisten

In dit artikel ga je aan de slag met een praktische aanpak. Hoewel OpenSSL historisch gezien een hulpprogramma is voor Linux-besturingssystemen, kun je het ook gebruiken met Windows-besturingssystemen.

Alle schermafbeeldingen in deze handleiding zijn gemaakt op Windows 10 build 1909 en PowerShell 7.

OpenSSL installeren op Windows 10 met PowerShell en Chocolatey

Als u Chocolatey hebt geïnstalleerd met behulp van de installatie-instructies, is uw eerste taak het installeren van OpenSSL op Windows 10. Open uw PowerShell-console en voer het volgende commando uit: choco install OpenSSL.Light, zoals hieronder weergegeven.

Installing OpenSSL.Light using Chocolatey package manager in PowerShell

En dat is het! U heeft nu OpenSSL geïnstalleerd met PowerShell.

Stel een werkmap in

Deze tutorial zal een paar certificaten aanmaken om van te leren. Om ervoor te zorgen dat al het werk dat u hier doet beperkt blijft tot één map die u later kunt opruimen, kunt u nu een map aanmaken.

In deze tutorial worden alle certificaten en gerelateerde bestanden opgeslagen in de map C:\certs. U kunt een map aanmaken met PowerShell door het onderstaande commando uit te voeren.

New-Item -ItemType Directory -Path C:\certs

Nu is het tijd om OpenSSL te configureren.

OpenSSL configureren

Standaard wordt OpenSSL op Windows 10 geleverd zonder een configuratiebestand. Dit is met opzet, omdat er veel configuratieopties zijn die u kunt aanpassen. Voor deze handleiding gaat u een voorbeeldconfiguratie gebruiken die u later kunt aanpassen aan uw beveiligingseisen.

Open PowerShell en voer het onderstaande commando uit. Dit commando downloadt een voorbeeldconfiguratiebestand van MIT en slaat het op als openssl.cnf in de huidige werkmap.

Invoke-WebRequest 'http://web.mit.edu/crypto/openssl.cnf' -OutFile .\openssl.cnf

U kunt nu het bestand openssl.cnf openen en u zou iets moeten zien dat eruitziet als hieronder.

Sample OpenSSL configuration file

De gedownloade configuratie zal voorlopig werken zoals het is. Gebruik de standaardinstellingen niet in een productieomgeving!

Werk de omgevingsvariabelen van het PowerShell-profiel bij

Om alles soepel te laten verlopen, moet je je PowerShell-profiel op Windows 10 aanpassen. Door enkele omgevingsvariabelen in te stellen, kun je eenvoudig wisselen tussen verschillende versies van OpenSSL die je mogelijk hebt geïnstalleerd.

I suggest adding two environment variables to your PowerShell profile called path and OPENSSL_CONF. You will update the PATH environment variable to ensure you can run the openssl binary in any location while on the command line.

Hieronder zie je hoe je een PowerShell-profiel kunt maken als je er nog geen hebt. Met deze opdracht voeg je het pad naar de OpenSSL-binaries toe aan je PATH en wijs je het pad naar het configuratiebestand toe aan OPENSSL_CONF.

# Voeg omgevingsvariabelen toe aan het PowerShell-profiel
# Controleer of er een profiel is, als dit niet het geval is, maak er dan een aan!
if (-not (Test-Path $profile) ) {
    New-Item -Path $profile -ItemType File -Force
}

# Bewerk het profiel om deze regels toe te voegen
'$env:path = "$env:path;C:\Program Files\OpenSSL\bin"' | Out-File $profile -Append
'$env:OPENSSL_CONF = "C:\certs\openssl.cnf"' | Out-File $profile -Append

Om de omgevingsvariabelen te gebruiken, laad je je profiel opnieuw door . $profile in te typen of gewoon PowerShell af te sluiten en opnieuw te openen.

Nu kun je eenvoudig het openssl binary aanroepen waar je ook bent in PowerShell, zoals hieronder wordt getoond.

Verifying OpenSSL version in PowerShell

OpenSSL gebruiken op Windows 10 om een CSR en een privésleutel te genereren

Voordat u een SSL-certificaat kunt maken, moet u een certificaataanvraag (CSR) genereren. Een CSR is een gecodeerd bestand dat u de mogelijkheid biedt om uw openbare sleutel te delen met een certificaatautoriteit (CA). Dit bestand bevat identificatiegegevens, een handtekeningsalgoritme en een digitale handtekening. Laten we uw eerste CSR en privésleutel maken.

Gerelateerd: Uw gids voor X509-certificaten voor stervelingen

Om een CSR te maken, voert u de onderstaande opdracht uit. OpenSSL zal u vervolgens vragen om enkele identificatiegegevens in te voeren, zoals u kunt zien in de volgende demonstratie.

openssl req -new -out MyFirst.csr
Generating a CSR and Private Key using OpenSSL in PowerShell

Zodra dit is voltooid, heeft u een geldige CSR en privésleutel die gebruikt kunnen worden om een SSL-certificaat aan u te verstrekken.

De standaardconfiguratiebestanden kunnen verder worden bewerkt om dit proces te stroomlijnen, mocht u niet telkens gegevens willen invoeren bij het genereren van een CSR.

U kunt meer lezen over de beschikbare CSR-opties en voorbeeldconfiguraties bekijken in de handleiding. OpenSSL heeft ook een actieve GitHub-opslagplaats met voorbeelden.

Het genereren van RSA-sleutelparen

U kunt ook RSA-sleutelparen (openbaar/privé) maken met OpenSSL. Om dit te doen, maakt u eerst een privésleutel met behulp van de subopdracht genrsa, zoals hieronder weergegeven.

Wanneer u de onderstaande opdracht uitvoert, zal OpenSSL op Windows 10 een RSA-privésleutel genereren met een sleutellengte van 2048 bits. Deze sleutel wordt bijna onmiddellijk gegenereerd op moderne hardware. De resulterende sleutel wordt uitvoer in de werkmap.

# genereer een privésleutel met een maximale sleutellengte van 2048
# sleutellengtes kunnen 512, 758, 1024, 1536 of 2048 zijn.
openssl genrsa -out rsa.private 2048

Vervolgens genereert u een openbare sleutel met behulp van de zojuist gemaakte privésleutel met de rsa subopdracht. De onderstaande syntaxis maakt een openbare sleutel genaamd rsa.public in de werkmap vanuit de privésleutel rsa.private.

# genereer een openbare sleutel met behulp van de privésleutel
openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM

Het genereren van een zelfondertekend certificaat

Soms moet u mogelijk een zelfondertekend certificaat genereren. Zelfondertekende certificaten zijn prima voor gebruik in een laboratorium, maar het is geen veilige praktijk om ze te gebruiken in een productieomgeving.

Laten we een zelfondertekend certificaat maken voordat we verder gaan met de volgende taak. Voer hiervoor de onderstaande opdracht in om een X509 SSL-certificaat te maken. Dit certificaat zal gebruikmaken van SHA256-cryptografie en zal geldig zijn voor 365 dagen met een RSA-sleutellengte van 2048 bits. Het certificaat wordt opgeslagen in de werkmap.

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

U bent nu klaar om het certificaat te importeren in een browser of server.

Valideren van CSRs, certificaten en sleutels met OpenSSL

Het controleren van informatie in een CSR, privésleutel, certificaat of PKCS#12 kan tijd besparen bij het oplossen van SSL-fouten. Soms kan er bijvoorbeeld een verkeerde sleutel zijn gebruikt om een certificaat te maken. Mogelijk hebt u ook onjuiste identificatiegegevens in het certificaat.

Laten we beginnen met het controleren van een CSR met behulp van het req-commando en enkele parameters:

openssl req -text -noout -verify -in .\MyFirst.csr
Checking a CSR with OpenSSL in PowerShell

Details zoals het land, de organisatienaam en het e-mailadres dat u hebt ingevoerd bij het maken van de CSR aan het begin van deze handleiding, moeten exact overeenkomen.

U kunt ook een certificaat controleren met behulp van de x509-subopdracht met een paar parameters:

openssl x509 -in .\certificate.crt -text -noout | more
Checking a certificate with OpenSSL with the x509 command in PowerShell

Certificaten converteren met OpenSSL

Er zijn situaties waarin een toepassing geen specifiek certificaatformaat gebruikt. U kunt dit probleem bijvoorbeeld tegenkomen bij een toepassing genaamd HAproxy, die een PEM-certificaat vereist terwijl u mogelijk een certificaat in DER-indeling hebt (.crt .cer .der).

Om het converteren van een certificaat te demonstreren, converteren we het eerder gemaakte zelfondertekende certificaat naar een DER-indeling (certificate.crt) naar PEM. Gebruik de code in de volgende codefragment om dit te doen.

De onderstaande opdracht gebruikt de x509-subopdracht met de parameter -inform die overeen moet komen met het formaat van het invoerbestand -in, gevolgd door het uitvoerformaat -out.

openssl x509 -inform der -in .\certificate.crt -out .\certificate.pem

U kunt ook de volgorde omkeren als u de DER-indeling vanuit PEM wilt hebben, zoals hieronder wordt getoond.

openssl x509 -outform der -in .\certificate.pem -out .\certificate.der

En tot slot kunt u PKCS#12 converteren naar PEM en PEM naar PKCS#12. Dit is een bestandstype dat privésleutels en certificaten bevat. Gebruik de subopdracht pkcs12 om te converteren naar PEM-indeling.

openssl pkcs12 -in .\SomeKeyStore.pfx -out .\SomeKeyStore.pem -nodes

U kunt ook een PEM-certificaat en privésleutel naar PKCS#12-indeling converteren met behulp van -export en een aantal extra opties. Hieronder exporteert u een certificaat in PKCS#12-indeling met behulp van uw privésleutel en met SomeCertificate.crt als invoerbron. Met de optiewaarde -certfile MyCACert.crt kunt u SomeCertificate.crt valideren.

openssl pkcs12 -export -out SomeCertificate.pfx -inkey SomePrivateKey.key -in SomeCertificate.crt -certfile MyCACert.crt

Foutopsporing en probleemoplossing

Nu u CSR’s, certificaten en sleutelparen kunt maken en converteren, is het tijd om te leren hoe u problemen kunt opsporen en oplossen. OpenSSL wordt geleverd met commando’s waarmee u eenvoudig problemen kunt oplossen.

OpenSSL stelt u ook in staat om certificaten te controleren op bestandsintegriteit en te testen op mogelijke gegevenscorruptie. Met behulp van een MD5-controlegetal kunt u de volgende codevoorbeelden gebruiken om certificaten, sleutels en CSR’s te testen:

# Certificaten
openssl x509 -noout -modulus -in .\certificate.crt | openssl md5

# Openbare / privésleutels
openssl rsa -noout -modulus -in .\privateKey.key | openssl md5

# Certificaatserververzoek
openssl req -noout -modulus -in .\MyFirst.csr | openssl md5

# Controleer een externe SSL-verbinding
openssl s_client -connect www.google.com:443

Zodra u de oorspronkelijke hash heeft, kunt u deze vergelijken met een huidige hash om te controleren of het certificaat niet is gewijzigd of beschadigd.

Hier is een voorbeeld van hoe die code eruit ziet wanneer het wordt uitgevoerd in PowerShell:

Sample troubleshooting command output with OpenSSL in PowerShell

Samenvatting

In dit artikel heb je geleerd hoe je OpenSSL kunt installeren en configureren op Windows 10, een CSR, sleutelpaar en SSL-certificaat kunt maken. Je hebt ook geleerd hoe je kunt converteren tussen verschillende certificaatformaten en enkele basisproblemen kunt oplossen met behulp van ingebouwde subcommando’s.

Extra bronnen

Source:
https://adamtheautomator.com/openssl-windows-10/