Показать страницуИстория страницыСсылки сюдаCopy this pageExport to MarkdownODT преобразованиеНаверх Вы загрузили старую версию документа! Сохранив её, вы создадите новую текущую версию с этим содержимым. Медиафайлы{{tag>[ssl certificate openssl pem crt pfx der X.509 P12]}} ====== Сертификаты ====== ===== Самоподписанные сертификаты ===== ===== Покупные сертификаты ===== Вы получите от удостоверяющего центра один из следующих файлов: * Элемент ненумерованного спискафайл подписанного сертификата формата **X.509** с расширением **CER** или **CRT**; * Элемент ненумерованного спискафайл цепочки сертификатов в формате **PKCS#7** с расширением **P7B**. Файл включает подписанный по вашему запросу сертификат сайта и сертификаты промежуточных центров сертификации. === Создание полной цепочки === Файлы сертификата: * **Сертификат** * CSR-запрос * **Корневой сертификат** * **Private Key** <code> $ cat Сертификат Корневой_сертификат > domain-fullchain.crt $ chown www-data:www-data /etc/nginx/ssl/domain-fullchain.crt /etc/nginx/ssl/Private_Key $ chmod 644 /etc/nginx/ssl/domain-fullchain.crt $ chmod 600 /etc/nginx/ssl/Private_Key </code> <code nginx> server { listen 443 ssl; http2 on; server_name domain; access_log /var/log/nginx/command-fewgehe-bot.access.log; error_log /var/log/nginx/command-fewgehe-bot.error.log; ssl_certificate /etc/nginx/ssl/domain-fullchain.crt; ssl_certificate_key /etc/nginx/ssl/Private_Key; # Оптимальные настройки безопасности 2025 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers off; } </code> ==== Основные команды конвертации ==== === PEM ↔ DER === Получение файлов приватного ключа и сертификата от удостоверяющего центра. Приватный ключ и сертификат предоставляются в виде PFX-контейнера (формат PKCS#12, файл с расширением PFX или P12). Если в качестве удостоверяющего центра в вашей организации используется стандартная служба Active Directory Certification Services, следует использовать шаблон Web Server для создания сертификата. Вам нужно сохранить результат в виде цепочки сертификатов (certificate chain) в DER-кодировке. <code bash> $ openssl x509 -in cert.pem -outform der -out cert.der $ openssl x509 -inform der -in cert.der -out cert.pem </code> После выполнения запроса на выписку сертификата удостоверяющий центр может предоставить подписанный сертификат в формате X.509 (файл с расширением CER или CRT). Файл сертификата в формате X.509 может быть представлен в двух кодировках: * DER encoded (DER-кодировка). * Base64 encoded (PEM-кодировка). === PEM → PKCS#12 (с ключом) === <code bash> $ openssl pkcs12 -export -in cert.pem -inkey key.pem -out bundle.p12 </code> === PKCS#12 / PFX-контейнера → PEM (сертификат + ключ) === Если удостоверяющий центр предоставил сертификат в форме PFX-контейнера (формат PKCS#12, файл с расширением PFX или P12), необходимо самостоятельно извлечь из него файлы сертификата и приватного ключа в PEM-кодировке. <code bash> $ openssl pkcs12 -in bundle.p12 -out cert.pem -nodes </code> В результате вы получите следующие файлы: * key.pem – файл приватного ключа RSA в PEM-кодировке (без парольной фразы); * cert.pem – файл сертификата формата X.509 в PEM-кодировке. == Чтобы извлечь файл приватного ключа, используйте команду: == <code bash> $ openssl pkcs12 -in source.pfx -nocerts -nodes -out key.pem </code> == Чтобы извлечь файл сертификата, используйте команду: == <code bash> $ openssl pkcs12 -in source.pfx -clcerts -nokeys -out cert.pem </code> === PKCS#7 → PEM (сертификат + ключ) === <code bash> $ openssl pkcs7 -in source.p7b -inform DER -print_certs -out cert.pem </code> После выполнения запроса на выписку сертификата удостоверяющий центр может предоставить цепочку сертификатов в формате PKCS#7 (файл с расширением P7B). Цепочка включает подписанный по вашему запросу сертификат сайта, а также сертификаты промежуточных центров сертификации. Файл в формате PKCS#7 может быть представлен в двух кодировках: * DER encoded (DER-кодировка). * Base64 encoded (PEM-кодировка). Для дальнейшего использования необходимо извлечь сертификаты из контейнера и получить файл в кодировке PEM. Конвертацию можно выполнить с помощью утилиты openssl. == Чтобы конвертировать файл формата PKCS#7 в DER-кодировке, используйте команду: == <code bash> $ openssl pkcs7 -in source.p7b -inform DER -print_certs -out cert.pem </code> == Чтобы конвертировать файл формата PKCS#7 в PEM-кодировке, используйте команду: == <code bash> $ openssl pkcs7 -in source.p7b -inform PEM -print_certs -out cert.pem </code> === Извлечение только закрытого ключа из PKCS#12 / PFX-контейнера === Если удостоверяющий центр предоставил сертификат в форме PFX-контейнера (формат PKCS#12, файл с расширением PFX или P12), необходимо самостоятельно извлечь из него файлы сертификата и приватного ключа в PEM-кодировке. Извлечение файлов сертификата и приватного ключа можно выполнить с помощью утилиты openssl. В процессе извлечения файлов потребуется ввести парольную фразу от PFX-контейнера. Чтобы извлечь файл приватного ключа, используйте команду: <code bash> $ openssl pkcs12 -in bundle.p12 -nocerts -nodes -out private.key </code> В результате вы получите следующие файлы: * key.pem – файл приватного ключа RSA в PEM-кодировке (без парольной фразы); * cert.pem – файл сертификата формата X.509 в PEM-кодировке. ==== Проверка ==== <code bash> ## PEM openssl x509 -in cert.pem -noout -text ## DER: openssl x509 -in cert.der -inform der -noout -text ## PKCS#12: openssl pkcs12 -in bundle.p12 -nodes -info -nokeys </code> <code bash> $ openssl x509 -in /etc/nginx/ssl/command-fewgehe-bot.chickenkiller.com/fullchain.cer -noout -text Certificate: Data: Version: 3 (0x2) Serial Number: d6:51:d4:0e:fd:2b:09:ad:9b:af:f2:c6:7a:64:4f:82 Signature Algorithm: ecdsa-with-SHA384 Issuer: C=AT, O=ZeroSSL, CN=ZeroSSL ECC Domain Secure Site CA Validity Not Before: Dec 25 00:00:00 2025 GMT Not After : Mar 25 23:59:59 2026 GMT Subject: CN=command-fewgehe-bot.chickenkiller.com Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:76:7a:f0:1f:3e:b6:3a:ab:3a:8c:f8:82:ac:8e: 36:4b:44:0e:05:a8:e1:61:3a:7a:c2:b6:17:ba:43: a4:1e:a3:0b:74:dc:95:58:a0:ff:90:44:52:45:04: 2f:67:d6:2d:2d:28:76:82:9c:33:1e:73:c9:87:0c: 2b:bc:6a:c7:45 ASN1 OID: prime256v1 NIST CURVE: P-256 X509v3 extensions: X509v3 Authority Key Identifier: 0F:6B:E6:4B:CE:39:47:AE:F6:7E:90:1E:79:F0:30:91:92:C8:5F:A3 X509v3 Subject Key Identifier: 78:0F:78:10:EF:4D:EC:48:E0:27:1F:EF:83:E2:53:7A:5E:9B:09:E0 X509v3 Key Usage: critical Digital Signature X509v3 Basic Constraints: critical CA:FALSE X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.6449.1.2.2.78 CPS: https://sectigo.com/CPS Policy: 2.23.140.1.2.1 Authority Information Access: CA Issuers - URI:http://zerossl.crt.sectigo.com/ZeroSSLECCDomainSecureSiteCA.crt OCSP - URI:http://zerossl.ocsp.sectigo.com CT Precertificate SCTs: Signed Certificate Timestamp: Version : v1 (0x0) Log ID : 0E:57:94:BC:F3:AE:A9:3E:33:1B:2C:99:07:B3:F7:90: DF:9B:C2:3D:71:32:25:DD:21:A9:25:AC:61:C5:4E:21 Timestamp : Dec 25 19:21:33.944 2025 GMT Extensions: none Signature : ecdsa-with-SHA256 30:45:02:20:17:DD:98:03:00:BB:8C:E9:2F:1F:30:6A: 2B:AD:58:5E:D6:10:2B:66:FE:21:21:E0:5F:CC:26:0D: 16:21:CE:C2:02:21:00:8E:BE:97:77:CC:70:66:F0:9D: 0C:97:B9:8C:7E:00:66:5B:51:A3:15:D6:34:6B:0B:14: AE:08:24:D3:FE:E0:62 Signed Certificate Timestamp: Version : v1 (0x0) Log ID : D1:6E:A9:A5:68:07:7E:66:35:A0:3F:37:A5:DD:BC:03: A5:3C:41:12:14:D4:88:18:F5:E9:31:B3:23:CB:95:04 Timestamp : Dec 25 19:21:34.153 2025 GMT Extensions: none Signature : ecdsa-with-SHA256 30:46:02:21:00:F9:4F:32:CA:3B:B5:99:9B:BD:CE:1E: BA:71:A1:CA:75:B2:1F:DB:49:FE:04:E2:38:CB:1D:CB: B7:A0:82:33:0B:02:21:00:B0:D7:F6:7B:42:C4:5A:93: FD:B8:8A:43:33:83:51:88:02:B2:60:E0:34:75:52:D4: 1D:D8:47:81:97:AB:E5:8C X509v3 Subject Alternative Name: DNS:command-fewgehe-bot.chickenkiller.com Signature Algorithm: ecdsa-with-SHA384 Signature Value: 30:64:02:30:32:e8:1e:29:28:aa:d3:aa:93:78:ce:df:97:6c: 70:38:77:81:fd:c8:73:d0:0c:26:87:96:e8:f8:6e:cc:27:5e: 0c:fd:a1:bc:4a:13:70:c9:55:fe:6e:dd:10:fa:13:45:02:30: 55:8f:93:b2:fc:69:31:d5:10:bb:d8:61:ce:b7:d0:fd:cb:0f: c5:c0:77:03:56:18:c6:cd:f8:4c:50:8e:d2:2c:8f:95:52:8c: 07:d3:ea:aa:f6:3b:de:46:04:e2:5d:dc </code> <code bash> $ echo | openssl s_client -servername command-fewgehe-bot.chickenkiller.com -connect command-fewgehe-bot.chickenkiller.com:443 2>/dev/null | openssl x509 -noout -subject -issuer -dates subject=CN=command-fewgehe-bot.chickenkiller.com issuer=C=AT, O=ZeroSSL, CN=ZeroSSL ECC Domain Secure Site CA notBefore=Dec 25 00:00:00 2025 GMT notAfter=Mar 25 23:59:59 2026 GMT </code> <code bash> $ echo | openssl s_client -servername command-fewgehe-bot.chickenkiller.com -connect command-fewgehe-bot.chickenkiller.com:443 2>/dev/null CONNECTED(00000003) --- Certificate chain 0 s:CN=command-fewgehe-bot.chickenkiller.com i:C=AT, O=ZeroSSL, CN=ZeroSSL ECC Domain Secure Site CA a:PKEY: EC, (prime256v1); sigalg: ecdsa-with-SHA384 v:NotBefore: Dec 25 00:00:00 2025 GMT; NotAfter: Mar 25 23:59:59 2026 GMT 1 s:C=AT, O=ZeroSSL, CN=ZeroSSL ECC Domain Secure Site CA i:C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust ECC Certification Authority a:PKEY: EC, (secp384r1); sigalg: ecdsa-with-SHA384 v:NotBefore: Jan 30 00:00:00 2020 GMT; NotAfter: Jan 29 23:59:59 2030 GMT 2 s:C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust ECC Certification Authority i:C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services a:PKEY: EC, (secp384r1); sigalg: sha384WithRSAEncryption v:NotBefore: Mar 12 00:00:00 2019 GMT; NotAfter: Dec 31 23:59:59 2028 GMT --- Server certificate -----BEGIN CERTIFICATE----- MIIEIzCCA6qgAwIBAgIRANZR1A79Kwmtm6/yxnpkT4IwCgYIKoZIzj0EAwMwSzEL MAkGA1UEBhMCQVQxEDAOBgNVBAoTB1plcm9TU0wxKjAoBgNVBAMTIVplcm9TU0wg RUNDIERvbWFpbiBTZWN1cmUgU2l0ZSBDQTAeFw0yNTEyMjUwMDAwMDBaFw0yNjAz MjUyMzU5NTlaMDAxLjAsBgNVBAMTJWNvbW1hbmQtZmV3Z2VoZS1ib3QuY2hpY2tl bmtpbGxlci5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR2evAfPrY6qzqM +IKsjjZLRA4FqOFhOnrCthe6Q6Qeowt03JVYoP+QRFJFBC9n1i0tKHaCnDMec8mH DCu8asdFo4ICiDCCAoQwHwYDVR0jBBgwFoAUD2vmS845R672fpAeefAwkZLIX6Mw HQYDVR0OBBYEFHgPeBDvTexI4Ccf74PiU3pemwngMA4GA1UdDwEB/wQEAwIHgDAM BgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMBMEkGA1UdIARCMEAwNAYL KwYBBAGyMQECAk4wJTAjBggrBgEFBQcCARYXaHR0cHM6Ly9zZWN0aWdvLmNvbS9D UFMwCAYGZ4EMAQIBMIGIBggrBgEFBQcBAQR8MHowSwYIKwYBBQUHMAKGP2h0dHA6 Ly96ZXJvc3NsLmNydC5zZWN0aWdvLmNvbS9aZXJvU1NMRUNDRG9tYWluU2VjdXJl U2l0ZUNBLmNydDArBggrBgEFBQcwAYYfaHR0cDovL3plcm9zc2wub2NzcC5zZWN0 aWdvLmNvbTCCAQUGCisGAQQB1nkCBAIEgfYEgfMA8QB2AA5XlLzzrqk+MxssmQez 95Dfm8I9cTIl3SGpJaxhxU4hAAABm1b1lfgAAAQDAEcwRQIgF92YAwC7jOkvHzBq K61YXtYQK2b+ISHgX8wmDRYhzsICIQCOvpd3zHBm8J0Ml7mMfgBmW1GjFdY0awsU rggk0/7gYgB3ANFuqaVoB35mNaA/N6XdvAOlPEESFNSIGPXpMbMjy5UEAAABm1b1 lskAAAQDAEgwRgIhAPlPMso7tZmbvc4eunGhynWyH9tJ/gTiOMsdy7eggjMLAiEA sNf2e0LEWpP9uIpDM4NRiAKyYOA0dVLUHdhHgZer5YwwMAYDVR0RBCkwJ4IlY29t bWFuZC1mZXdnZWhlLWJvdC5jaGlja2Vua2lsbGVyLmNvbTAKBggqhkjOPQQDAwNn ADBkAjAy6B4pKKrTqpN4zt+XbHA4d4H9yHPQDCaHluj4bswnXgz9obxKE3DJVf5u 3RD6E0UCMFWPk7L8aTHVELvYYc630P3LD8XAdwNWGMbN+ExQjtIsj5VSjAfT6qr2 O95GBOJd3A== -----END CERTIFICATE----- subject=CN=command-fewgehe-bot.chickenkiller.com issuer=C=AT, O=ZeroSSL, CN=ZeroSSL ECC Domain Secure Site CA --- No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: ecdsa_secp256r1_sha256 Negotiated TLS1.3 group: X25519MLKEM768 --- SSL handshake has read 4423 bytes and written 1659 bytes Verification: OK --- New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Protocol: TLSv1.3 Server public key is 256 bit This TLS version forbids renegotiation. Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) --- </code> ===== Проверка валидности сертификата и ключа ===== ==== Файл ==== <code bash> # проверка соответствия ключа и сертификата (хеши должны совпадать) $ openssl x509 -noout -modulus -in certificate.crt | openssl md5 $ openssl rsa -noout -modulus -in private.key | openssl md5 # если используется ключ в формате PKCS#8: $ openssl pkey -noout -modulus -in private.key | openssl md5 # проверка соответствия ключа и сертификата из PFX-файла: $ openssl pkcs12 -in bundle.pfx -nocerts -nodes | openssl rsa -noout -modulus | openssl md5 # проверка срока действия сертификата: $ openssl x509 -in certificate.crt -noout -dates # проверка структуры PEM-файла (если формат неверный, будет ошибка): $ openssl x509 -in certificate.crt -noout </code> ==== Сайт ==== <code bash> # проверка срока действия сертификата: $ echo | openssl s_client -connect lampa-tv.ru:443 2>&1 | openssl x509 -noout -dates notBefore=Dec 20 13:12:38 2025 GMT notAfter=Jul 22 13:12:38 2026 GMT # Сводка по удалённому хосту (лист, issuer, subject, даты) $ echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -subject -issuer -dates # Сколько секунд осталось до истечения (0 — уже истёк) $ echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -enddate | awk -F= '{print $2}' | xargs -I{} date -d "{}" +%s | awk -v now=$(date +%s) '{print $1-now}' # Проверка «истечёт ли в ближайшие 30 дней» (число секунд: 30*24*3600 = 2592000) $ echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -checkend 2592000 -noout </code> СохранитьПросмотрРазличияОтменить Сводка изменений Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии: CC0 1.0 Universal