Apache SSL 错误:无法从文件读取服务器证书

Apache SSL 错误:无法从文件读取服务器证书

服务器启动时出现 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

我已经做了一些基本的健全性检查,例如 -

  1. 比较私钥和公钥的 mod。它完全匹配

  2. 另外,在 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/ 中有两个文件 -

  1. ca-bundle.crt-> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
  2. 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

相关内容