Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| develop:ssl-certificates [2025/12/25 20:03] – [Создание полной цепочки] mirocow | develop:ssl-certificates [2025/12/25 22:11] (текущий) – mirocow | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | {{tag> | + | {{tag> |
| ====== Сертификаты ====== | ====== Сертификаты ====== | ||
| + | |||
| + | ===== Самоподписанные сертификаты ===== | ||
| + | |||
| + | ===== Покупные сертификаты ===== | ||
| + | |||
| + | Вы получите от удостоверяющего центра один из следующих файлов: | ||
| + | * Элемент ненумерованного спискафайл подписанного сертификата формата **X.509** с расширением **CER** или **CRT**; | ||
| + | * Элемент ненумерованного спискафайл цепочки сертификатов в формате **PKCS#7** с расширением **P7B**. Файл включает подписанный по вашему запросу сертификат сайта и сертификаты промежуточных центров сертификации. | ||
| === Создание полной цепочки === | === Создание полной цепочки === | ||
| Строка 35: | Строка 43: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| ==== Основные команды конвертации ==== | ==== Основные команды конвертации ==== | ||
| === PEM ↔ DER === | === PEM ↔ DER === | ||
| + | |||
| + | Получение файлов приватного ключа и сертификата от удостоверяющего центра. Приватный ключ и сертификат предоставляются в виде PFX-контейнера (формат PKCS#12, файл с расширением PFX или P12). | ||
| + | Если в качестве удостоверяющего центра в вашей организации используется стандартная служба Active Directory Certification Services, следует использовать шаблон Web Server для создания сертификата. | ||
| + | Вам нужно сохранить результат в виде цепочки сертификатов (certificate chain) в DER-кодировке. | ||
| <code bash> | <code bash> | ||
| Строка 43: | Строка 56: | ||
| $ openssl x509 -inform der -in cert.der -out cert.pem | $ 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 (с ключом) === | === PEM → PKCS#12 (с ключом) === | ||
| Строка 50: | Строка 69: | ||
| </ | </ | ||
| - | === PKCS#12 → PEM (сертификат + ключ) === | + | === PKCS# |
| + | |||
| + | Если удостоверяющий центр предоставил сертификат в форме PFX-контейнера (формат PKCS#12, файл с расширением PFX или P12), необходимо самостоятельно извлечь из него файлы сертификата и приватного ключа в PEM-кодировке. | ||
| <code bash> | <code bash> | ||
| $ openssl pkcs12 -in bundle.p12 -out cert.pem -nodes | $ openssl pkcs12 -in bundle.p12 -out cert.pem -nodes | ||
| - | </ | + | </ |
| + | |||
| + | В результате вы получите следующие файлы: | ||
| + | |||
| + | * key.pem – файл приватного ключа RSA в PEM-кодировке (без парольной фразы); | ||
| + | * cert.pem – файл сертификата формата X.509 в PEM-кодировке. | ||
| + | |||
| + | == Чтобы извлечь файл приватного ключа, используйте команду: | ||
| + | |||
| + | <code bash> | ||
| + | $ openssl pkcs12 -in source.pfx -nocerts -nodes -out key.pem | ||
| + | </ | ||
| + | |||
| + | == Чтобы извлечь файл сертификата, | ||
| + | |||
| + | <code bash> | ||
| + | $ openssl pkcs12 -in source.pfx -clcerts -nokeys -out cert.pem | ||
| + | </ | ||
| + | |||
| + | === PKCS#7 → PEM (сертификат + ключ) === | ||
| + | |||
| + | <code bash> | ||
| + | $ 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-кодировке, | ||
| + | |||
| + | <code bash> | ||
| + | $ openssl pkcs7 -in source.p7b -inform DER -print_certs -out cert.pem | ||
| + | </ | ||
| + | |||
| + | == Чтобы конвертировать файл формата PKCS#7 в PEM-кодировке, | ||
| + | |||
| + | <code bash> | ||
| + | $ openssl pkcs7 -in source.p7b -inform PEM -print_certs -out cert.pem | ||
| + | </ | ||
| + | |||
| + | === Извлечение только закрытого ключа из PKCS#12 / PFX-контейнера === | ||
| + | |||
| + | Если удостоверяющий центр предоставил сертификат в форме PFX-контейнера (формат PKCS#12, файл с расширением PFX или P12), необходимо самостоятельно извлечь из него файлы сертификата и приватного ключа в PEM-кодировке. | ||
| + | |||
| + | Извлечение файлов сертификата и приватного ключа можно выполнить с помощью утилиты openssl. В процессе извлечения файлов потребуется ввести парольную фразу от PFX-контейнера. | ||
| - | === Извлечение только закрытого ключа из PKCS#12 === | + | Чтобы извлечь |
| <code bash> | <code bash> | ||
| $ openssl pkcs12 -in bundle.p12 -nocerts -nodes -out private.key | $ openssl pkcs12 -in bundle.p12 -nocerts -nodes -out private.key | ||
| </ | </ | ||
| + | |||
| + | В результате вы получите следующие файлы: | ||
| + | |||
| + | * key.pem – файл приватного ключа RSA в PEM-кодировке (без парольной фразы); | ||
| + | * cert.pem – файл сертификата формата X.509 в PEM-кодировке. | ||
| ==== Проверка ==== | ==== Проверка ==== | ||
| Строка 153: | Строка 228: | ||
| 07: | 07: | ||
| </ | </ | ||
| + | |||
| + | <code bash> | ||
| + | $ echo | openssl s_client -servername command-fewgehe-bot.chickenkiller.com -connect command-fewgehe-bot.chickenkiller.com: | ||
| + | subject=CN=command-fewgehe-bot.chickenkiller.com | ||
| + | issuer=C=AT, | ||
| + | notBefore=Dec 25 00:00:00 2025 GMT | ||
| + | notAfter=Mar 25 23:59:59 2026 GMT | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | $ echo | openssl s_client -servername command-fewgehe-bot.chickenkiller.com -connect command-fewgehe-bot.chickenkiller.com: | ||
| + | CONNECTED(00000003) | ||
| + | --- | ||
| + | Certificate chain | ||
| + | 0 s: | ||
| + | | ||
| + | | ||
| + | | ||
| + | 1 s:C=AT, O=ZeroSSL, CN=ZeroSSL ECC Domain Secure Site CA | ||
| + | | ||
| + | | ||
| + | | ||
| + | 2 s:C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust ECC Certification Authority | ||
| + | | ||
| + | | ||
| + | | ||
| + | --- | ||
| + | Server certificate | ||
| + | -----BEGIN CERTIFICATE----- | ||
| + | MIIEIzCCA6qgAwIBAgIRANZR1A79Kwmtm6/ | ||
| + | MAkGA1UEBhMCQVQxEDAOBgNVBAoTB1plcm9TU0wxKjAoBgNVBAMTIVplcm9TU0wg | ||
| + | RUNDIERvbWFpbiBTZWN1cmUgU2l0ZSBDQTAeFw0yNTEyMjUwMDAwMDBaFw0yNjAz | ||
| + | MjUyMzU5NTlaMDAxLjAsBgNVBAMTJWNvbW1hbmQtZmV3Z2VoZS1ib3QuY2hpY2tl | ||
| + | bmtpbGxlci5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR2evAfPrY6qzqM | ||
| + | +IKsjjZLRA4FqOFhOnrCthe6Q6Qeowt03JVYoP+QRFJFBC9n1i0tKHaCnDMec8mH | ||
| + | DCu8asdFo4ICiDCCAoQwHwYDVR0jBBgwFoAUD2vmS845R672fpAeefAwkZLIX6Mw | ||
| + | HQYDVR0OBBYEFHgPeBDvTexI4Ccf74PiU3pemwngMA4GA1UdDwEB/ | ||
| + | BgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMBMEkGA1UdIARCMEAwNAYL | ||
| + | KwYBBAGyMQECAk4wJTAjBggrBgEFBQcCARYXaHR0cHM6Ly9zZWN0aWdvLmNvbS9D | ||
| + | UFMwCAYGZ4EMAQIBMIGIBggrBgEFBQcBAQR8MHowSwYIKwYBBQUHMAKGP2h0dHA6 | ||
| + | Ly96ZXJvc3NsLmNydC5zZWN0aWdvLmNvbS9aZXJvU1NMRUNDRG9tYWluU2VjdXJl | ||
| + | U2l0ZUNBLmNydDArBggrBgEFBQcwAYYfaHR0cDovL3plcm9zc2wub2NzcC5zZWN0 | ||
| + | aWdvLmNvbTCCAQUGCisGAQQB1nkCBAIEgfYEgfMA8QB2AA5XlLzzrqk+MxssmQez | ||
| + | 95Dfm8I9cTIl3SGpJaxhxU4hAAABm1b1lfgAAAQDAEcwRQIgF92YAwC7jOkvHzBq | ||
| + | K61YXtYQK2b+ISHgX8wmDRYhzsICIQCOvpd3zHBm8J0Ml7mMfgBmW1GjFdY0awsU | ||
| + | rggk0/ | ||
| + | lskAAAQDAEgwRgIhAPlPMso7tZmbvc4eunGhynWyH9tJ/ | ||
| + | sNf2e0LEWpP9uIpDM4NRiAKyYOA0dVLUHdhHgZer5YwwMAYDVR0RBCkwJ4IlY29t | ||
| + | bWFuZC1mZXdnZWhlLWJvdC5jaGlja2Vua2lsbGVyLmNvbTAKBggqhkjOPQQDAwNn | ||
| + | ADBkAjAy6B4pKKrTqpN4zt+XbHA4d4H9yHPQDCaHluj4bswnXgz9obxKE3DJVf5u | ||
| + | 3RD6E0UCMFWPk7L8aTHVELvYYc630P3LD8XAdwNWGMbN+ExQjtIsj5VSjAfT6qr2 | ||
| + | O95GBOJd3A== | ||
| + | -----END CERTIFICATE----- | ||
| + | subject=CN=command-fewgehe-bot.chickenkiller.com | ||
| + | issuer=C=AT, | ||
| + | --- | ||
| + | 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: | ||
| + | --- | ||
| + | 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: | ||
| + | Expansion: NONE | ||
| + | No ALPN negotiated | ||
| + | Early data was not sent | ||
| + | Verify return code: 0 (ok) | ||
| + | --- | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Проверка валидности сертификата и ключа ===== | ||
| + | |||
| + | ==== Файл ==== | ||
| + | |||
| + | <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 bash> | ||
| + | # проверка срока действия сертификата: | ||
| + | $ echo | openssl s_client -connect lampa-tv.ru: | ||
| + | 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: | ||
| + | |||
| + | # Сколько секунд осталось до истечения (0 — уже истёк) | ||
| + | $ echo | openssl s_client -servername example.com -connect example.com: | ||
| + | |||
| + | # Проверка «истечёт ли в ближайшие 30 дней» (число секунд: | ||
| + | $ echo | openssl s_client -servername example.com -connect example.com: | ||
| + | </ | ||
| + | |||
| + | ===== Ссылки ===== | ||
| + | |||
| + | |||
| + | * [[nginx: | ||
| + | * [[ssl-certificates|Извлечение цепочки сертификатов из контейнеров]] | ||
| + | |||