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

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

我今天一直在为我的域名设置 SSL,并且遇到了另一个问题 - 我希望有人可以解释一下..

我不断收到以下错误信息:

[错误] 初始化:无法从文件 /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt 读取服务器证书
[错误] SSL 库错误:218529960 错误:0D0680A8:asn1 编码例程:ASN1_CHECK_TLEN:错误标签
[错误] SSL 库错误:218595386 错误:0D07803A:asn1 编码例程:ASN1_ITEM_EX_D2I:嵌套 asn1 错误

我正在运行 Apache 2.2.16 和 Ubuntu 10.10。我的 .crt 文件有 Begin 和 End 标签,并且是从我收到的确认电子邮件中准确复制而来的,真令人沮丧!

干杯!

编辑>>尝试验证.crt时它似乎不起作用:

>> openssl x509 -noout -text -in domain.com.crt
无法加载证书
16851:错误:0906D06C:PEM 例程:PEM_read_bio:无起始行:pem_lib.c:650:预期:受信任的证书

更多>>

>> openssl x509 -text -inform PEM -in domain.com.crt
无法加载证书
21321:错误:0906D06C:PEM 例程:PEM_read_bio:无起始行:pem_lib.c:650:预期:受信任的证书
>> openssl x509 -text -inform DER -in domain.com.crt
无法加载证书
21325:错误:0D0680A8:asn1 编码例程:ASN1_CHECK_TLEN:错误标签:tasn_dec.c:1316:
21325:错误:0D07803A:asn1 编码例程:ASN1_ITEM_EX_D2I:嵌套 asn1 错误:tasn_dec.c:380:Type=X509

编辑>>(顺便感谢你的帮助)

>> grep '^-----' domain.com.crt
-----开始证书-----
-----证书结束-----

刚刚给提供证书的公司发了一封电子邮件,他们回复了>

我已检查您提供的 CSR 文件,并可以确保该文件已正确生成。您当前遇到的错误是由于您使用错误的命令行安装 CSR 造成的。您需要使用相应的域名从命令行修改此 domain.com.crt。

  • 目前 crt 设置为 mysite.com.crt - 我使用 domain.com.crt 作为示例

答案1

这些行是否可能以 ^M 结尾?将文件从 Windows 移动到 UNIX 系统时,这是一个潜在的问题。一种简单的检查方法是使用vi“显示二进制文件”模式,使用vi -b /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt

如果每行以 control-M 结尾,就像这样

-----BEGIN CERTIFICATE-----^M
MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM^M
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg^M
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x^M

您有一个 Windows 行终止格式的文件,而 apache 不喜欢这种格式。

您的选择包括再次移动文件,更加小心;或使用命令dos2unix将其删除;如果您小心的话,您也可以在 vi 中删除它们。


编辑:感谢@dave_thompson_085,他指出这个答案在 2019 年不再适用。也就是说,Apache/OpenSSL 现在可以容忍以 ^M 结尾的行,因此它们不会引起问题。话虽如此,其他格式错误(评论中出现了几个不同的例子)仍然会引起问题;如果证书已跨系统移动,请仔细检查这些错误。

答案2

对于在尝试读取证书签名请求(CSR)(请注意,OP 正在读取证书)时遇到类似错误的人,请确保使用正确的 OpenSSL 命令。x509用于证书,req用于 CSR:

openssl req -in server.csr -text -noout

对比

openssl x509 -in server.crt -text -noout

答案3

>> openssl x509 -noout -text -in domain.com.crt 
unable to load certificate
16851:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: TRUSTED CERTIFICATE

我怀疑你的证书格式有问题。

运行以下两个命令并返回输出:

openssl x509 -text -inform DER -in domain.com.crt 
openssl x509 -text -inform PEM -in domain.com.crt 

答案4

就我而言,我发现我的证书有不同的“-”字符。这肯定是管理员在将证书放到服务器上时出现的复制/粘贴问题,其中文本编辑器将 -- 替换为特殊的 Unicode 字符。

诊断这个问题花了好几个小时,最后我只是猜测,在 vi 中编辑了证书并删除了现有的“-”字符,然后重新输入它们。

希望这对某人有帮助。

相关内容