Gigaone Logo

Polecenia OpenSSL

28.12.2023

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 mojadomena.pem to plik pobrany z serwera wystawcy, a intermediate.pem to odpowiedni certyfikat pośredni dla wystawionego certyfikatu SSL.

openssl verify -untrusted intermediate.pem mojadomena.pem

Wynik działania powyższego polecenia:

mojadomena.pem: OK

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 plik mojadomena.p7b z certyfikatem serwera (mojadomena.pem) i certyfikatem pośrednim (certyfikat_posredni.pem) w formacie PKCS#7.

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

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 www

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
    

17. Sprawdzenie poprawności instalacji certyfikatu SSL na serwerze pocztowym (SMTP, IMAP, POP3)

Sprawdzenie serwera SMTP na porcie 25:

openssl s_client -starttls smtp -showcerts -servername mail.moja-domena.pl -connect mail.moja-domena.pl:25

Sprawdzenie serwera SMTP na porcie 587:

openssl s_client -starttls smtp -showcerts -servername mail.moja-domena.pl -connect mail.moja-domena.pl:587

Sprawdzenie serwera IMAP na porcie 993:

openssl s_client -showcerts -servername mail.moja-domena.pl -connect mail.moja-domena.pl:993

Sprawdzenie serwera POP3 na porcie 995:

openssl s_client -showcerts -servername mail.moja-domena.pl -connect mail.moja-domena.pl:995

Jeżeli wynik działania wyświetla:

Verification error: unable to verify the first certificate

Oznacza to, że najprawdopodobniej na serwerze brakuje certyfikatu pośredniego (do pobrania z Panelu Klienta).


Jeżeli wynik działania wyświetla:

Verification: OK

Oznacza to, że serwer udostępnia oba certyfikaty SSL (certyfikat SSL serwera i pośredni).