Gigaone Logo

Polecenia OpenSSL

23.10.2020

1. Generowanie klucza prywatnego z hasłem

Hasło będzie należało podać podczas startowania serwera.

openssl genrsa -des3 -out mojadomena.key 2048

2. Generowanie klucza prywatnego bez hasła

Potencjalnie niebezpieczne, ale umożliwi wystartowanie serwera bez podawania hasła.

openssl genrsa -out mojadomena.key 2048

3. Usunięcie hasła z klucza prywatnego

openssl rsa -in mojadomena.key -out mojadomena.bezhasla.key

4. Generowanie CSR

Wpisz poniższe polecenie, aby wygenerować CSR wg prywatnego klucza RSA. (w formacie PEM). Zakładamy, że plik CSR będzie nosił nazwę mojadomena.csr.

openssl req -new -sha256 -key mojadomena.key -out mojadomena.csr

Przykładowa zawartość pliku CSR:

-----BEGIN CERTIFICATE REQUEST-----
MIIDCjCCAnMCAQAwdTEZMBcGA1UEAxMQaG9zdC5kb21haW4ubmFtZTEVM
BMGA1UECxMMT3JnYW5pemF0aW9uMRUwEwYDVQQKEwxPcmdhbml6YXRpb2
Vnq2AWTDw2ykyxKg6neb2vYTZRvbot7M578Vvh6P8CAwEAAaCCAVMwGgY
KKwYBBAGCNw0CAzEMFgo1LjAuMjE5NS4yMDUGCisGAQQBgjcCAQ4xJzAl
MA4GA1UdDwEB/wQEAwIE8DATBgNVHSUEDDAKBggrBgEFBQcDATCB/QYKK
IhvcNAQEFBQADgYEAg4+QHTvkP5CG+WcGnrhKiMkJnMP6QEsds40obUDS
dGtEupQz8C+4xoMd1aM68q9Ri6Va+JTeuhKHxLz9hT/KUJhNBy0sRfnx+
JkQdrKG69UanTwvLqXINh9xChw9ErIto/2kZI5kl2KYQdiOqTv6p0GEUP
Rq/MD52Zy3bOzSRF0=
-----END CERTIFICATE REQUEST-----

Szczegółowe informacje na temat generowania CSR.


5. Weryfikacja klucza prywatnego

openssl rsa -in mojadomena.key -check

6. Weryfikacja pliku CSR

openssl req -noout -text -in mojadomena.csr
lub
openssl req -noout -verify -in mojadomena.csr

7. Weryfikacja certyfikatu SSL

openssl x509 -noout -text -in mojadomena.pem

8. Weryfikacja sum kontrolnych klucza prywatnego, CSR-a (Żądania Podpisania Certyfikatu) i certyfikatu

Poniższe polecenia umożliwiają porównanie sum kontrolnych klucza prywatnego, CSR-a (Żądania Podpisania Certyfikatu) i certyfikatu SSL.


Sprawdzenie sumy kontrolnej klucza prywatnego:

openssl rsa -in mojadomena.key -modulus -noout | openssl md5

Przykładowy wynik działania:

ccd4ca8dc071f3a61b580b7e7427a7cf

Sprawdzenie sumy kontrolnej CSR-a (Żądania Podpisania Certyfikatu)

openssl req -in mojadomena.csr -modulus -noout | openssl md5

Przykładowy wynik działania:

ccd4ca8dc071f3a61b580b7e7427a7cf

Sprawdzenie sumy kontrolnej certyfikatu SSL:

openssl x509 -in mojadomena.pem -modulus -noout | openssl md5

Przykładowy wynik działania:

ccd4ca8dc071f3a61b580b7e7427a7cf

Jeżeli suma kontrolna w każdym z powyższych poleceń jest identyczna (w tym przypadku: ccd4ca8dc071f3a61b580b7e7427a7cf) oznacza to, że:


9. Weryfikacja certyfikatu i CA

Gdzie cacert.pem to plik pobrany z serwera wystawcy.

openssl verify -verbose -CAfile cacert.pem  mojadomena.pem

10. Wygenerowanie CSR-a na podstawie istniejącego certyfikatu SSL

openssl x509 -x509toreq -in mojadomena.pem -out mojadomena.csr -signkey mojadomena.key

11. Konwersja klucza prywatnego z formatu PEM do DER

openssl rsa -inform PEM -in mojadomena.pem -outform DER -out mojadomena.der

12. Konwersja klucza prywatnego z formatu DER do PEM

openssl rsa -inform DER -in mojadomena.der -outform PEM -out mojadomena.pem

13. Konwersja certyfikatu i klucza prywatnego z Apache'a do zaimportowania w IIS na serwerze Windows (z formatu PEM do PKCS#12).

Poniższe polecenie utworzy kopię zapasową certyfikatu, klucza prywatnego i certyfikatów pośrednich w pliku iis.pfx w formacie PKCS#12.

openssl pkcs12 -export -inkey mojadomena.key -in mojadomena.pem -certfile intermediate.pem -out iis.pfx

14. Konwersja certyfikatu z formatu PEM do PKCS#7 (P7B).

Poniższe polecenie utworzy kopię zapasową certyfikatu serwera i certyfikatu pośredniego w pliku mojadomena.pfx w formacie PKCS#7.

openssl crl2pkcs7 -nocrl -certfile mojadomena.pem -out mojadomena.p7b -certfile certyfikat_posredni.cer

15. Konwersja certyfikatu i klucza prywatnego z IIS-a do Apache'a lub innego serwera (z formatu PKCS#12 do PEM).


Konwersja certyfikatu SSL

Poniższe polecenie utworzy plik mojadomena.pem zawierający certyfikat.

openssl pkcs12 -in iis.pfx -clcerts -nokeys -out mojadomena.pem

Konwersja klucza prywatnego

Poniższe polecenie utworzy plik mojadomena.key z kluczem prywatnym zabezpieczonym hasłem.

openssl pkcs12 -in iis.pfx -nocerts -out  mojadomena.key

Poniższe polecenie utworzy plik mojadomena.key z kluczem prywatnym bez hasła

openssl pkcs12 -in iis.pfx -nocerts -nodes -out  mojadomena.key

16. Sprawdzenie poprawności instalacji certyfikatu SSL na serwerze

Wersja skrócona

openssl s_client -CAfile cacert.pem -quiet -connect www.moja-domena.pl:443 -servername www.moja-domena.pl

Przykładowy wynik działania powyższego polecenia w przypadku poprawnej konfiguracji:

depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = RapidSSL TLS DV RSA Mixed SHA256 2020 CA-1
verify return:1
depth=0 CN = www.moja-domena.pl
verify return:1

W przypadku niepowodzenia zostanie zwrócony błąd unable to get local issuer certificate i unable to verify the first certificate:

depth=0 CN = www.moja-domena.pl
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = www.moja-domena.pl
verify error:num=21:unable to verify the first certificate
verify return:1

Wersja rozszerzona

openssl s_client -CAfile cacert.pem -connect www.moja-domena.pl:443 -servername www.moja-domena.pl

Przykładowy wynik działania powyższego polecenia w przypadku poprawnej konfiguracji:

CONNECTED(00000005)
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = RapidSSL TLS DV RSA Mixed SHA256 2020 CA-1
verify return:1
depth=0 CN = www.moja-domena.pl
verify return:1
---
Certificate chain
 0 s:CN = www.moja-domena.pl
   i:C = US, O = DigiCert Inc, CN = RapidSSL TLS DV RSA Mixed SHA256 2020 CA-1
 1 s:C = US, O = DigiCert Inc, CN = RapidSSL TLS DV RSA Mixed SHA256 2020 CA-1
   i:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGGjCCBQKgAwIBAgIQCA7DURVSj+MOJx8HLuLntTANBgkqhkiG9w0BAQsFADBZ
[...] tu pozostała zawartość certyfikatu (skrócona dla czytelności) [...]
nYigRVgAZjb8IlSwduKfRQwieAsa70262uoCDUka
-----END CERTIFICATE-----
subject=CN = www.moja-domena.pl

issuer=C = US, O = DigiCert Inc, CN = RapidSSL TLS DV RSA Mixed SHA256 2020 CA-1

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 3496 bytes and written 396 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: F9B42ED3B7EB68C34B84A899F0794E3DC83C0ABBE9B3759E31DB3E14535BB5EC
    Session-ID-ctx:
    Resumption PSK: 1849D5A96EC5D8E8717B61ADD61572C4ED6C1A5FC77972ACD8BDF768138C3A1E5FF48133A81ED01A685D5EAFBE4CFA23
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 86400 (seconds)
    TLS session ticket:
    0000 - 6a db b1 96 08 10 3e c7-80 c0 e5 b9 c6 5a 77 d0   j.....>......Zw.
    0010 - cb 00 ef 18 ea 3c 65 9e-5f a6 2f a8 37 39 73 d9   .....ce._./.79s.

    Start Time: 1602157820
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: D31B5AA29D6AEBBAE169D48B64BB5F82707E53D9661697D6F4F0FC15A6DC378D
    Session-ID-ctx:
    Resumption PSK: 940F4CF61594A3B964E5DF5F521B2A9EB5D8F3D6979FB39C1579BFFA7C8532EC2F69FB836E876AE93EF461EB8A445B42
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 86400 (seconds)
    TLS session ticket:
    0000 - 4d 35 e8 31 6f 32 e4 d4-bb f2 39 6f 5a 7a 9e d2   M5.1o2....9oZz..
    0010 - 41 b5 73 e0 9c 66 30 0e-73 c2 83 36 b3 3a fb f5   A.s..f0.s..6.:..

    Start Time: 1602157820
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK