Это старая версия документа!


Сертификаты

Вы получите от удостоверяющего центра один из следующих файлов:

  • Элемент ненумерованного спискафайл подписанного сертификата формата X.509 с расширением CER или CRT;
  • Элемент ненумерованного спискафайл цепочки сертификатов в формате PKCS#7 с расширением P7B. Файл включает подписанный по вашему запросу сертификат сайта и сертификаты промежуточных центров сертификации.

Создание полной цепочки

Файлы сертификата:

  • Сертификат
  • CSR-запрос
  • Корневой сертификат
  • Private Key
$ 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
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;
}

PEM ↔ DER

Получение файлов приватного ключа и сертификата от удостоверяющего центра. Приватный ключ и сертификат предоставляются в виде PFX-контейнера (формат PKCS#12, файл с расширением PFX или P12). Если в качестве удостоверяющего центра в вашей организации используется стандартная служба Active Directory Certification Services, следует использовать шаблон Web Server для создания сертификата. Вам нужно сохранить результат в виде цепочки сертификатов (certificate chain) в DER-кодировке.

$ openssl x509 -in cert.pem -outform der -out cert.der
$ openssl x509 -inform der -in cert.der -out cert.pem

После выполнения запроса на выписку сертификата удостоверяющий центр может предоставить подписанный сертификат в формате X.509 (файл с расширением CER или CRT). Файл сертификата в формате X.509 может быть представлен в двух кодировках:

  • DER encoded (DER-кодировка).
  • Base64 encoded (PEM-кодировка).

PEM → PKCS#12 (с ключом)

$ openssl pkcs12 -export -in cert.pem -inkey key.pem -out bundle.p12

PKCS#12 / PFX-контейнера → PEM (сертификат + ключ)

Если удостоверяющий центр предоставил сертификат в форме PFX-контейнера (формат PKCS#12, файл с расширением PFX или P12), необходимо самостоятельно извлечь из него файлы сертификата и приватного ключа в PEM-кодировке.

$ openssl pkcs12 -in bundle.p12 -out cert.pem -nodes

В результате вы получите следующие файлы:

  • key.pem – файл приватного ключа RSA в PEM-кодировке (без парольной фразы);
  • cert.pem – файл сертификата формата X.509 в PEM-кодировке.
Чтобы извлечь файл приватного ключа, используйте команду:
$ openssl pkcs12 -in source.pfx -nocerts -nodes -out key.pem
Чтобы извлечь файл сертификата, используйте команду:
$ openssl pkcs12 -in source.pfx -clcerts -nokeys -out cert.pem

PKCS#7 → PEM (сертификат + ключ)

$ openssl pkcs7 -in source.p7b -inform DER -print_certs -out cert.pem

После выполнения запроса на выписку сертификата удостоверяющий центр может предоставить цепочку сертификатов в формате PKCS#7 (файл с расширением P7B). Цепочка включает подписанный по вашему запросу сертификат сайта, а также сертификаты промежуточных центров сертификации. Файл в формате PKCS#7 может быть представлен в двух кодировках:

  • DER encoded (DER-кодировка).
  • Base64 encoded (PEM-кодировка).

Для дальнейшего использования необходимо извлечь сертификаты из контейнера и получить файл в кодировке PEM. Конвертацию можно выполнить с помощью утилиты openssl.

Чтобы конвертировать файл формата PKCS#7 в DER-кодировке, используйте команду:
$ openssl pkcs7 -in source.p7b -inform DER -print_certs -out cert.pem
Чтобы конвертировать файл формата PKCS#7 в PEM-кодировке, используйте команду:
$ openssl pkcs7 -in source.p7b -inform PEM -print_certs -out cert.pem

Извлечение только закрытого ключа из PKCS#12 / PFX-контейнера

Если удостоверяющий центр предоставил сертификат в форме PFX-контейнера (формат PKCS#12, файл с расширением PFX или P12), необходимо самостоятельно извлечь из него файлы сертификата и приватного ключа в PEM-кодировке.

Извлечение файлов сертификата и приватного ключа можно выполнить с помощью утилиты openssl. В процессе извлечения файлов потребуется ввести парольную фразу от PFX-контейнера.

Чтобы извлечь файл приватного ключа, используйте команду:

$ openssl pkcs12 -in bundle.p12 -nocerts -nodes -out private.key

В результате вы получите следующие файлы:

  • key.pem – файл приватного ключа RSA в PEM-кодировке (без парольной фразы);
  • cert.pem – файл сертификата формата X.509 в PEM-кодировке.
## 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
$ 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
$ 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
 
$ 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)
---
# проверка соответствия ключа и сертификата (хеши должны совпадать)
$ 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
# проверка срока действия сертификата:
$ 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