我今天一直在为我的域名设置 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 中编辑了证书并删除了现有的“-”字符,然后重新输入它们。
希望这对某人有帮助。