安装 SSL 证书后尝试启动 Apache 时出错

安装 SSL 证书后尝试启动 Apache 时出错

我正在尝试安装 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 的示例也存在此错误,因为它引用了两次证书——证书和密钥。

因此,请务必检查您是否在正确的参数中引用了正确的文件。

相关内容