Gids voor OpenSSL-commando

Gepubliceerd 25 maart 2024

OpenSSL is een veelzijdige tool voor het genereren van privésleutels, het maken van certificaataanvragen (CSR's) en het beheren van SSL/TLS-certificaten. Dit artikel behandelt hoe u uw OpenSSL-versie kunt identificeren, veelgebruikte OpenSSL-commando's kunt gebruiken en best practices kunt volgen voor het beveiligen van uw sleutels en certificaten.

Uw OpenSSL-versie controleren

Uw OpenSSL-versie identificeren met OpenSSL-commando's

Identificeren welke versie van OpenSSL u gebruikt is een belangrijke eerste stap bij de voorbereiding om een privésleutel of CSR te genereren. Uw versie van OpenSSL bepaalt welke cryptografische algoritmen kunnen worden gebruikt bij het genereren van sleutels en welke protocollen worden ondersteund. OpenSSL versie 1.0.1 was bijvoorbeeld de eerste versie die TLS 1.1 en TLS 1.2 ondersteunde.

Gebruik het commando openssl version -a om te identificeren welke versie van OpenSSL u gebruikt. De -a schakelaar toont volledige versie-informatie, inclusief:

  • Het versienummer en de releasedatum (bijv. OpenSSL 1.0.2g 1 Mar 2016)
  • De opties waarmee de bibliotheek is gebouwd
  • De directory waar certificaten en privésleutels zijn opgeslagen (OPENSSLDIR)

Hier is een voorbeelduitvoer van het uitvoeren van openssl version -a:

OpenSSL 1.0.2g  1 Mar 2016
built on: reproducible build, date unspecified
platform: debian-amd64
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx) 
compiler: cc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -
D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -g -O2 -fstack-protector-
strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-
Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -
DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -
DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -
DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/usr/lib/ssl"

Uw OpenSSL-versie kennen is belangrijk om te bepalen welke cryptografische algoritmen en protocollen worden ondersteund bij het genereren van sleutels en CSR's. De uitvoer biedt belangrijke details zoals het versienummer, build-opties en de standaard opslagdirectory voor certificaten en sleutels.

Veelgebruikte OpenSSL-commando's

OpenSSL biedt veel commando's voor het genereren van privésleutels, het maken van CSR's, het installeren van SSL/TLS-certificaten en het identificeren van certificaatinformatie. Hier zijn enkele van de meest gebruikte OpenSSL-commando's:

  • openssl genrsa: Genereert een RSA-privésleutel. Voorbeeld: openssl genrsa -out privatekey.key 2048
  • openssl req: Maakt een CSR of zelfondertekend certificaat. Voorbeeld: openssl req -new -key privatekey.key -out csr.csr
  • openssl x509: Toont certificaatinformatie, converteert formaten en ondertekent CSR's. Voorbeeld: openssl x509 -in cert.crt -text -noout
  • openssl pkcs12: Converteert tussen PFX-, PEM- en DER-formaten. Voorbeeld: openssl pkcs12 -export -out cert.pfx -inkey privatekey.key -in cert.crt
  • openssl s_client: Brengt een beveiligde verbinding tot stand met een externe server. Voorbeeld: openssl s_client -connect example.com:443

Deze commando's stellen u in staat om belangrijke taken uit te voeren zoals het genereren van sterke privésleutels, het maken van CSR's met de benodigde informatie, het installeren en configureren van SSL/TLS-certificaten en het vinden van problemen.

OpenSSL-commandostructuur en -opties

De meeste OpenSSL-commando's volgen een consistente structuur:

openssl command [options] [arguments]
  • command specificeert de uit te voeren bewerking, zoals genrsa, req of x509.
  • [options] veranderen het gedrag van het commando. Opties beginnen meestal met een koppelteken (-) en kunnen een waarde hebben.
  • [arguments] geven aanvullende informatie die nodig is voor het commando, zoals invoer- en uitvoerbestandspaden.

Enkele veelgebruikte opties zijn:

  • -in: Specificeert het invoerbestandspad.
  • -out: Specificeert het uitvoerbestandspad.
  • -keyout: Specificeert het pad om de nieuwe privésleutel te schrijven.
  • -pubout: Voert de publieke sleutel van een privésleutel of CSR uit.
  • -text: Drukt de inhoud van een certificaat af in platte tekst formaat.
  • -noout: Voorkomt uitvoer van de gecodeerde certificaatgegevens.

Het commando openssl x509 -in cert.crt -text -noout gebruikt bijvoorbeeld het x509 commando om de certificaatinformatie in platte tekst te tonen zonder de gecodeerde gegevens te tonen.

Het leren van deze OpenSSL-commandostructuren en veelgebruikte opties zal u helpen OpenSSL effectief te gebruiken voor uw SSL/TLS-certificaatbehoeften.

Privésleutels en CSR's genereren met OpenSSL

Opties voor sleutelgeneratie kiezen

Bij het maken van een privésleutel voor uw SSL/TLS-certificaat moet u kiezen tussen de RSA- en ECDSA-sleutelalgoritmen. RSA wordt breed ondersteund en wordt aanbevolen voor compatibiliteit. U moet ook een sleutelgrootte kiezen van minimaal 2048 bits voor RSA of 256 bits voor ECDSA. Grotere sleutelgroottes bieden meer beveiliging maar kunnen de prestaties beïnvloeden.

Een andere keuze is of u een wachtwoordzin wilt gebruiken om de privésleutel te versleutelen. Het gebruik van een wachtwoordzin voegt een extra beveiligingslaag toe, maar vereist het invoeren ervan telkens wanneer de sleutel wordt gebruikt. Wachtwoordzinnen kunnen nuttig zijn als de sleutel mogelijk wordt gezien door ongeautoriseerde toegang.

Uw privésleutel maken met OpenSSL-commando's

Om een 2048-bits RSA-privésleutel te maken, gebruikt u het commando:

openssl genrsa -out yourdomain.key 2048

Dit maakt een privésleutelbestand met de naam yourdomain.key in het PEM-formaat. U kunt de ruwe, gecodeerde inhoud van de sleutel bekijken met:

cat yourdomain.key

Of decodeer het om de sleuteldetails te bekijken met:

openssl rsa -text -in yourdomain.key -noout

Uw publieke sleutel verkrijgen uit de privésleutel

Het gemaakte privésleutelbestand bevat zowel de privé- als publieke sleutels. Indien nodig kunt u alleen de publieke sleutel verkrijgen met behulp van:

openssl rsa -in yourdomain.key -pubout -out yourdomain_public.key

Dit maakt een bestand met de naam yourdomain_public.key met de publieke sleutel in PEM-formaat.

Uw CSR maken

Om een Certificate Signing Request (CSR) te maken met uw privésleutel, gebruikt u:

openssl req -new -key yourdomain.key -out yourdomain.csr

Dit vraagt u om vragen te beantwoorden over uw bedrijf en domein om in de CSR op te nemen. Of, verstrek alle CSR-details in het commando met behulp van de -subj optie:

openssl req -new -key yourdomain.key -out yourdomain.csr \
-subj "/C=US/ST=New York/L=New York/O=Your Company/OU=IT/CN=yourdomain.com"

U kunt ook de privésleutel en CSR samen maken in één commando:

openssl req -newkey rsa:2048 -keyout yourdomain.key -out yourdomain.csr

CSR-informatie controleren

Voordat u uw CSR naar een Certificate Authority (CA) stuurt, controleert u of de informatie correct is met:

openssl req -text -in yourdomain.csr -noout -verify

Dit toont de CSR-details in platte tekst. Als enige informatie onjuist is, moet u een nieuwe CSR maken. Onjuiste details kunnen niet worden gewijzigd zonder een nieuwe CSR te maken vanwege de digitale handtekening.

Door deze opties voor sleutelgeneratie en OpenSSL-commando's te kennen, kunt u sterke privésleutels en CSR's maken die zijn afgestemd op uw SSL/TLS-certificaatbehoeften.

Certificaten beheren

Certificaatinformatie bekijken

Nadat u uw SSL/TLS-certificaat van de certificaatautoriteit (CA) heeft ontvangen, moet u controleren of de details van het certificaat overeenkomen met uw privésleutel. Gebruik dit commando om de inhoud van uw certificaat te bekijken:

openssl x509 -text -in yourdomain.crt -noout

Dit toont de certificaatinformatie in platte tekst zonder de gecodeerde gegevens. Bekijk het gedeelte Subject Public Key Info om de details van de publieke sleutel te zien. Zorg ervoor dat ze overeenkomen met de publieke sleutel in uw CSR en privésleutelbestanden.

Verifiëren dat uw sleutels overeenkomen

Om te controleren of de privésleutel van uw certificaat, CSR en het uitgegeven certificaat allemaal dezelfde publieke sleutel hebben, kunt u de publieke sleutel uit elk bestand extraheren en er een hash van genereren. Als de hashes overeenkomen, zijn de sleutels hetzelfde.

Gebruik deze commando's om de hash van de publieke sleutel voor elk bestand te verkrijgen:

openssl pkey -pubout -in yourdomain.key | openssl sha256
openssl req -pubkey -in yourdomain.csr -noout | openssl sha256 
openssl x509 -pubkey -in yourdomain.crt -noout | openssl sha256

Voer elk commando afzonderlijk uit om drie hashes te krijgen. Als alle hashes gelijk zijn, komen de publieke sleutels overeen in uw privésleutel, CSR en certificaat.

Als de hashes niet overeenkomen, betekent dit vaak dat de CSR is gemaakt op een andere machine dan waar het certificaat wordt geïnstalleerd. Om sleutel-mismatches op te lossen, kunt u:

  • De privésleutel verplaatsen van de CSR-machine naar de certificaatmachine
  • Het certificaat installeren op de machine die de overeenkomende privésleutel heeft
  • Een nieuwe privésleutel en CSR maken op de machine die het certificaat zal gebruiken

Certificaatformaten converteren

Standaard maakt OpenSSL privésleutels en CSR's in het PEM-formaat. Maar u moet ze mogelijk converteren naar andere formaten zoals PKCS#12 of DER voor bepaalde systemen.

Om een PEM-certificaat en privésleutel te converteren naar een PKCS#12 (.pfx of .p12) bestand voor overdracht:

openssl pkcs12 -export -name "yourdomain-digicert-(expiration date)" \
-out yourdomain.pfx -inkey yourdomain.key -in yourdomain.crt

Dit combineert uw yourdomain.key privésleutel en yourdomain.crt certificaat in een yourdomain.pfx bestand. De -name optie stelt een vriendelijke naam in die het domein en de vervaldatum bevat. U wordt gevraagd om een versleutelingswachtwoord voor het .pfx bestand in te voeren.

Om een .pfx bestand terug te converteren naar PEM-formaat, gebruikt u afzonderlijke commando's voor de sleutel en het certificaat:

openssl pkcs12 -in yourdomain.pfx -nocerts -out yourdomain.key -nodes
openssl pkcs12 -in yourdomain.pfx -nokeys -clcerts -out yourdomain.crt

Het eerste commando haalt de privésleutel op en het tweede haalt het certificaat op. De -nodes optie verwijdert de versleuteling van de privésleutel.

Om te converteren tussen PEM- en DER-formaten, gebruikt u de x509 en rsa commando's met de -inform en -outform schakelaars:

openssl x509 -inform PEM -in yourdomain.crt -outform DER -out yourdomain.der
openssl rsa -inform PEM -in yourdomain.key -outform DER -out yourdomain_key.der

Deze commando's converteren een PEM-certificaat naar DER en een PEM-privésleutel naar DER. Om van DER terug naar PEM te gaan, verwisselt u gewoon de -inform en -outform waarden.

Door deze OpenSSL-commando's te gebruiken om uw SSL/TLS-certificaten en -sleutels te bekijken, te verifiëren en te converteren, kunt u ze correct beheren en installeren op uw servers zoals Apache Tomcat of IIS.

Hier is de herschreven inhoud met de gevraagde wijzigingen:

Cipher-suites weergeven

Cipher-suites zijn sets algoritmen die worden gebruikt om netwerkverbindingen met SSL/TLS te beveiligen. Ze omvatten sleuteluitwisseling, authenticatie, versleuteling en hash-algoritmen. Om te zien welke cipher-suites uw OpenSSL-versie ondersteunt, gebruikt u het volgende commando:

openssl ciphers -v

Dit toont de volledige namen van elke ondersteunde cipher-suite. De namen volgen een formaat zoals:

Protocol-KeyExchange-Authentication-Encryption-Hash

Bijvoorbeeld, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 gebruikt:

  • TLS-protocol
  • ECDHE-sleuteluitwisseling
  • RSA-authenticatie
  • AES-256-versleuteling in GCM-modus
  • SHA384-hash

Het kennen van deze naamonderdelen kan helpen bij het kiezen van cipher-suites die voldoen aan uw beveiligings-, compatibiliteits- en prestatiebehoeften.

Hashes maken en controleren

Hashes zijn unieke, vaste-lengte digests gemaakt van gegevens. Ze helpen de integriteit van bestanden en berichten te controleren. Gebruik OpenSSL-commando's om hashes van sleutels en certificaten te maken:

openssl dgst -sha256 yourdomain.key
openssl dgst -sha256 yourdomain.csr 
openssl dgst -sha256 yourdomain.crt

Deze maken SHA-256 hashes van uw privésleutel-, CSR- en certificaatbestanden. U kunt sha256 wijzigen naar andere hash-algoritmen zoals md5, sha1 of sha512.

Om de integriteit van een bestand te controleren, hasht u het en vergelijkt u het met een bekende correcte hash-waarde. Als ze overeenkomen, is het bestand niet veranderd. Dit wordt vaak gebruikt voor bestandsdownloads om er zeker van te zijn dat ze niet beschadigd of gewijzigd zijn.

Door ondersteunde cipher-suites weer te geven en bestands-hashes te maken, kunt u uw SSL/TLS-configuratie met OpenSSL beter beveiligen en controleren.

Debuggen en problemen oplossen

Veelvoorkomende OpenSSL-problemen en hun oplossingen

Bij het werken met OpenSSL om sleutels te genereren, CSR's te maken en SSL/TLS-certificaten te installeren, kunt u tegen enkele veelvoorkomende problemen aanlopen. Hier zijn een paar problemen en hoe u ze kunt oplossen:

  • Problemen met certificaatinstallatie en -configuratie: Controleer nogmaals of de certificaatbestandspaden correct zijn in uw webserverconfiguratie. Zorg ervoor dat het certificaat en de privésleutel in de juiste formaten (PEM of PKCS#12) staan die vereist zijn door uw server.

  • Privésleutel- en certificaat-mismatches: Verifieer dat de privésleutel die is gebruikt om de CSR te genereren overeenkomt met degene die wordt gebruikt tijdens certificaatinstallatie. Vergelijk de hashes van de publieke sleutels in de privésleutel-, CSR- en certificaatbestanden. Als ze niet overeenkomen, regenereer dan de CSR met de juiste privésleutel.

  • Problemen met bestandsrechten en eigendom: Controleer of de privésleutel- en certificaatbestanden de juiste rechten en eigendom hebben ingesteld zodat uw webserverproces ze kan lezen. Op Linux moet u bijvoorbeeld mogelijk rechten instellen met chmod 400 yourdomain.key en eigendom met chown www-data:www-data yourdomain.key.

  • OpenSSL-commandofouten: Als u fouten krijgt bij het uitvoeren van OpenSSL-commando's, controleer dan nogmaals de syntaxis, opties en bestandspaden. Zorg ervoor dat u de juiste commando's gebruikt voor uw OpenSSL-versie en dat de bestanden in de juiste formaten staan.

TLS-versies en -configuraties identificeren

Het is belangrijk om te controleren of uw OpenSSL en webserver zijn ingesteld om de nieuwste TLS-versies en sterke cipher-suites te gebruiken. Zo controleert u:

  1. Controleer uw OpenSSL TLS-versieondersteuning: Gebruik het s_client commando om de TLS-versie te zien die wordt gebruikt voor een verbinding:

    openssl s_client -connect yourdomain.com:443 -tls1_2
    

    Vervang yourdomain.com door uw domeinnaam. De -tls1_2 optie test een TLS 1.2-verbinding. U kunt het wijzigen naar -tls1, -tls1_1 of -tls1_3 om andere versies te testen. Een succesvolle verbinding betekent dat die TLS-versie wordt ondersteund.

  2. Verifieer uw webserver TLS-configuratie: Controleer de SSL/TLS-instellingen van uw webserver om er zeker van te zijn dat deze is ingesteld om TLS 1.2 of 1.3 te gebruiken en geen oude versies zoals SSL 3.0 of TLS 1.0. In Apache kunt u bijvoorbeeld instellingen zien zoals:

    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite HIGH:!aNULL:!MD5
    

    Dit schakelt SSL 3.0, TLS 1.0 en TLS 1.1 uit terwijl cipher-suites met hoge sterkte worden ingeschakeld. Raadpleeg de documentatie van uw webserver voor de juiste TLS-configuratie-instellingen.

  3. Gebruik SSL/TLS-testtools: Online tools zoals de SSL Labs Server Test kunnen de SSL/TLS-configuratie van uw server controleren en problemen vinden met het certificaat, protocolversies of cipher-suites.

Door deze veelvoorkomende OpenSSL-problemen te vinden en op te lossen en ervoor te zorgen dat u een veilige TLS-configuratie heeft, kunt u uw SSL/TLS-configuratie voor uw domeinen beter debuggen en problemen oplossen.

Best practices

Privésleutels en certificaten veilig beheren

Privésleutels zijn de basis van uw SSL/TLS-beveiliging. Het is belangrijk om ze op de juiste manier te genereren, op te slaan en te beschermen. Hier zijn enkele best practices:

  • Genereer privésleutels met minimaal 2048-bits RSA of 256-bits ECDSA voor sterke beveiliging
  • Gebruik een wachtwoordzin om het privésleutelbestand te versleutelen voor een extra beschermingslaag
  • Bewaar privésleutels op een veilige locatie met strikte toegangscontroles, zoals een afgesloten kluis of een versleutelde hardware security module (HSM)
  • Beperk toegang tot privésleutels tot alleen die beheerders die het absoluut nodig hebben
  • Deel privésleutels nooit via onveilige kanalen zoals e-mail of berichten
  • Roteer en update privésleutels regelmatig, vooral als er enige kans op compromittering is

SSL/TLS-certificaten moeten ook zorgvuldig worden beheerd en ingezet. Enkele richtlijnen zijn onder meer:

  • Gebruik een betrouwbare en vertrouwde certificaatautoriteit (CA) om uw certificaten uit te geven
  • Kies het juiste type certificaat voor uw behoeften, zoals single-domain, multi-domain of wildcard
  • Lever de certificaataanvraag (CSR) veilig aan bij de CA, bijvoorbeeld via een versleuteld webformulier of e-mail
  • Bewaar certificaten op een beschermde locatie, met beperkte toegang voor beheerders
  • Installeer en configureer certificaten correct op uw webservers, load balancers en andere SSL/TLS-eindpunten
  • Houd de vervaldatums van certificaten bij en vernieuw ze voordat ze verlopen om downtime te voorkomen
  • Vervang certificaten als de privésleutel gecompromitteerd is of als het certificaat om welke reden dan ook moet worden ingetrokken

OpenSSL up-to-date houden

Het gebruik van de nieuwste versie van OpenSSL is belangrijk om de nieuwste beveiligingspatches, protocol- en algoritme-ondersteuning en functies te krijgen. Oudere versies kunnen bekende kwetsbaarheden hebben die aanvallers kunnen uitbuiten.

Controleer uw OpenSSL-versie met openssl version en vergelijk deze met de nieuwste releases op de OpenSSL-website. Als u niet op de nieuwste versie bent, werk deze dan zo snel mogelijk bij.

Het update-proces hangt af van uw besturingssysteem en omgeving:

  • Op Linux gebruikt u uw pakketbeheerder om de nieuwste OpenSSL-versie te installeren. Bijvoorbeeld op Ubuntu of Debian:
    sudo apt update
    sudo apt install openssl
    
  • Op Windows downloadt u het nieuwste OpenSSL-installatieprogramma of binaire bestanden van de officiële site of een vertrouwde externe aanbieder. Vervang uw oude OpenSSL-directory door de nieuwe versie.
  • Voor programmeertalen en frameworks zoals Python, Ruby of Node.js, werkt u de OpenSSL-bibliotheek bij die ze gebruiken. Dit kan betekenen dat u de taal/het framework zelf of eventuele SSL/TLS-wrapper-bibliotheken moet bijwerken.
  • Op webservers zoals Apache of Nginx werkt u de serverversie of OpenSSL-modules bij om de nieuwste versie te krijgen. Raadpleeg de serverdocumentatie voor specifieke update-instructies.

Na het bijwerken van OpenSSL, moet u uw SSL/TLS-configuratie en certificaten testen om er zeker van te zijn dat alles nog steeds goed werkt. Tools zoals SSL Labs kunnen helpen bij het vinden van eventuele problemen.

Door deze best practices te volgen voor het veilig beheren van sleutels en certificaten en het up-to-date houden van OpenSSL, kunt u uw SSL/TLS-configuratie en de gegevens van uw gebruikers beter beschermen.

SSL-certificaten monitoren

Het monitoren van uw SSL-certificaten is een cruciaal onderdeel van het onderhouden van een veilige en betrouwbare website. Verlopen of verkeerd geconfigureerde SSL-certificaten kunnen leiden tot beveiligingskwetsbaarheden en een slechte gebruikerservaring. Uptimia biedt een SSL Certificate Monitoring-service die u helpt de gezondheid en geldigheid van uw certificaten bij te houden. Met Uptimia kunt u waarschuwingen ontvangen wanneer een certificaat bijna verloopt of technische problemen heeft, zoals niet-overeenkomende domeinnamen, zwakke versleutelingsalgoritmen of ongeldige certificaatketens. Door uw SSL-certificaten proactief te monitoren met Uptimia, kunt u er zeker van zijn dat uw website veilig en toegankelijk blijft voor uw gebruikers.

Belangrijkste punten

  • Gebruik het commando openssl version -a om uw OpenSSL-versie, build-opties en standaard certificaat- en sleutelopslagdirectory te identificeren
  • Veelvoorkomende OpenSSL-commando's zijn onder andere genrsa voor het genereren van privésleutels, req voor het maken van CSR's, x509 voor het bekijken en converteren van certificaten, pkcs12 voor het converteren van formaten en s_client voor het testen van beveiligde verbindingen
  • Bij het genereren van privésleutels kiest u tussen RSA (aanbevolen) en ECDSA-algoritmen, gebruikt u een sleutelgrootte van minimaal 2048 bits voor RSA of 256 bits voor ECDSA, en overweegt u het gebruik van een wachtwoordzin voor extra beveiliging
  • Gebruik OpenSSL-commando's om certificaatinformatie te bekijken, sleutelovereenkomsten te verifiëren, te converteren tussen PEM-, PKCS#12- en DER-formaten, ondersteunde cipher-suites weer te geven en bestands-hashes te maken
  • Volg best practices zoals het genereren van sterke privésleutels, het gebruik van een vertrouwde CA, het veilig opslaan en beheren van sleutels en certificaten, en het up-to-date houden van OpenSSL om uw SSL/TLS-configuratie te beschermen