Я пытаюсь установить SSL-сертификат и получаю следующие ошибки:
AH02241: Init: Unable to read server certificate from file /path/my.crt
SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
SSL Library Error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error (Type=X509)
AH02312: Fatal error initialising mod_ssl, exiting.
Вот как я следовал:
Я создал свой закрытый ключ с помощью:
openssl genrsa -out my.key 2048
Я создал CSR с помощью:
openssl req -new -key my.key -out my.csr
Я предоставил CSR нашему ИТ-отделу, и они вернули crt - он начинается с
-----BEGIN CERTIFICATE-----
В моем ssl.conf (my.example.com совпадает с общим именем, используемым при генерации CSR):
<VirtualHost my.example.com:443>
SSLEngine On
ServerName my.example.com
SSLCertificateFile /path/my.crt
SSLCertificateKeyFile /path/my.key
</VirtualHost>
У меня нет набора файлов SSLCertificateChainFile или SSLCACertificate.
Закрытый ключ начинается с
----BEGIN RSA PRIVATE KEY-----
CSR начинается с
-----BEGIN CERTIFICATE REQUEST-----
Я подтвердил, что оба:
openssl rsa -noout -modulus -in my.key
openssl req -noout -modulus -in my.csr
производят такой же результат. Я не могу понять, как проверить crt - попытка как x509, так и rsa выдает ошибку.
Должен ли этот процесс работать? Могу ли я как-то убедиться, что my.crt соответствует ключу?
Оказалось, что предоставленный мне сертификат был плохим.
Бег
openssl x509 -in my.crt -text
должен был работать, но поскольку сертификат был поврежден, возникли ошибки:
unable to load certificate
140513785948000:error:0D07209B:asn1 encoding routines:ASN1_get_object:too long:asn1_lib.c:142:
140513785948000:error:0D068066:asn1 encoding routines:ASN1_CHECK_TLEN:bad object header:tasn_dec.c:1306:
140513785948000:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=X509
140513785948000:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:
Думаю, я должен был заметить, что строки в блоке при просмотре плохого сертификата не были одинаковой длины.
Для:
SSLCertificateFile my.crt
SSLCertificateKeyFile my.key
Вы должны использовать полный путь к этим файлам, то есть:
SSLCertificateFile /home/vhosts/domain.com/keys/my.crt
SSLCertificateKeyFile /home/vhosts/domain.com/keys/my.crt
Обновите правильные пути и перезапустите Apache, чтобы изменения вступили в силу. Отправьте ответ с обновленной ошибкой / сообщением, если проблема не исчезнет.
-Брендан
Для записи: у меня был такой же отчет об ошибке, и проблема была не в сертификате, а в конфигурации.
По ошибке я определил ключ как сертификат, а сертификат как ключ. Результатом было то же сообщение об ошибке.
Ошибка возникла из-за того, что в моей эталонной конфигурации эти элементы были представлены в обратном порядке.
Даже в примере @Brendan есть эта ошибка, поскольку он дважды ссылается на сертификат - и для сертификата, и для ключа.
Поэтому убедитесь, что вы ссылаетесь на правильные файлы в правильном параметре.