我正在尝试安装 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
我向我们的 IT 部门提供了 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 是否与密钥匹配吗?
答案1
事实证明我提供的证书是错误的。
跑步
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:
我想我应该注意到,查看不良证书时块中的行的长度并不完全相同。
答案2
为了:
SSLCertificateFile my.crt
SSLCertificateKeyFile my.key
您应该使用这些文件的完整路径,即:
SSLCertificateFile /home/vhosts/domain.com/keys/my.crt
SSLCertificateKeyFile /home/vhosts/domain.com/keys/my.crt
更新正确的路径并重新启动 Apache 以应用更改。如果问题仍然存在,请回复更新的错误/消息。
-布伦丹
答案3
仅供记录:我有相同类型的错误报告,问题实际上不是出在证书上,而是出在配置上。
我错误地将密钥定义为证书,将证书定义为密钥。结果还是同样的错误信息。
这个错误是由于我的参考配置以相反的顺序呈现这些项目而导致的。
甚至@Brendan 的示例也存在此错误,因为它引用了两次证书——证书和密钥。
因此,请务必检查您是否在正确的参数中引用了正确的文件。