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
lubopenssl 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:
- CSR (plik
mojadomena.csr
) został wygenerowany z użyciem klucza prywatnego umieszczonym w plikumojadomena.key
- certyfikat SSL (plik
mojadomena.pem
) pasuje do klucza prywatnego (plikmojadomena.key
)
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
cacert.pem
- Plik z certyfikatem Root CA dla właściwego certyfikatu. Może to być np. plik wykorzystywany przez poleceniecurl
, który jest zbiorem Magazynu Certyfikatów przeglądarki Firefox w formacie PEM. Plik do pobrania ze strony https://curl.haxx.se/ca/cacert.pem.- www.moja-domena.pl:443 - Adres serwera oraz port (443 - domyślny dla połączeń HTTPS)
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).