服务器启动时出现 Apache 错误。错误内容如下:
[error] Init: Unable to read server certificate from file /etc/pki/tls/certs/ca-bundle.trust.crt
[error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error
我已经做了一些基本的健全性检查,例如 -
比较私钥和公钥的 mod。它完全匹配
另外,在 crt 文件上运行 dos2unix
openssl x509 -noout -modulus -in /etc/pki/tls/certs/ca-bundle.trust.crt | openssl md5
openssl rsa -noout -modulus -in /etc/pki/tls/private/servername00.key | openssl md5
有什么建议吗?根本原因是什么?
供参考:这是我的 conf.d/app.conf 文件,服务器版本是 Apache/2.2.15 (Unix)
<Directory "/path/to/app/source/html">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<VirtualHost *:80>
ServerName servername.com
# Trailing slash is important
Redirect / https://servername.com/
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot /path/to/app/source/html
ServerName servername
#SSLEngine on
# Update the path with the location of your new cert and key
SSLCertificateFile /etc/pki/tls/certs/ca-bundle.trust.crt
SSLCertificateKeyFile /etc/pki/tls/private/servername.key
ErrorLog logs/appname-80-error_log
CustomLog logs/appname-80-access_log common
Header always set Access-Control-Allow-Origin "*"
# Rewrite hostname to FQN
RewriteEngine on
RewriteCond %{HTTP_HOST} !^servername\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) https://servername.com/$1 [L,R]
</VirtualHost>
答案1
提取的证书以“开始受信任证书”作为标题。它需要是“开始证书”。
请注意,/etc/pki/tls/certs/ 中有两个文件 -
- ca-bundle.crt-> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
- ca-bundle.trust.crt
我犯了一个错误,引用了 ca-bundle.trust.crt 而不是 ca-bundle.crt。
来源 -https://manned.org/update-ca-trust/e1b1e94d
/etc/pki/tls/certs/ca-bundle.crt 旧文件名,文件包含受信任的 CA 证书列表,用于 TLS 服务器身份验证,采用简单的 BEGIN/END CERTIFICATE 文件格式,不包含不信任信息。如果禁用兼容的 CA 信任替换,则这是一个静态文件,将保持不变。仅当启用了兼容的 CA 信任替换时,此文件才是指向 update-ca-trust 命令创建的合并输出的符号链接。
/etc/pki/tls/certs/ca-bundle.trust.crt 旧文件名,文件包含扩展的 BEGIN/END TRUSTED CERTIFICATE 文件格式的 CA 证书列表,其中包括特定于证书使用的信任(和/或不信任)标志。如果禁用兼容的 CA 信任替换,则这是一个静态文件,将保持不变。仅当启用了兼容的 CA 信任替换时,此文件才是指向 update-ca-trust 命令创建的合并输出的符号链接。
或者,
sed -i 's/BEGIN TRUSTED CERTIFICATE/BEGIN CERTIFICATE/g' /etc/pki/tls/certs/ca-bundle.trust.crt
sed -i 's/END TRUSTED CERTIFICATE/END CERTIFICATE/g' /etc/pki/tls/certs/ca-bundle.trust.crt