我今天一直在为自己的域名设置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文件具有开始和结束标记,并已从我收到的确认电子邮件中完全复制,非常令人沮丧!
干杯!
编辑>>当试图validation.crt它似乎不工作:
>> openssl x509 -noout -text -in domain.com.crt 无法加载证书 16851:错误:0906D06C:PEM例程:PEM_read_bio:无起始行:pem_lib.c:650:预计:TRUSTED CERTIFICATE
也>>
>> openssl x509 -text -inform PEM -in domain.com.crt 无法加载证书 21321:错误:0906D06C:PEM例程:PEM_read_bio:无起始行:pem_lib.c:650:预计:TRUSTED CERTIFICATE
>> 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 ----- BEGIN CERTIFICATE ----- -----结束证书-----
只是通过电子邮件提供证书的公司,他们回应>
我已经检查过您提供的CSR文件,我可以保证这是正确生成的。 您目前遇到的错误是由于您使用错误的命令行来安装CSR所致。 您需要使用您的域的相应名称,从您的命令行修改此domain.com.crt。
是否有可能是^ M终止? 将文件从Windows移到UNIX系统时,这是一个潜在的问题。 一个简单的检查方法是在“show me the binary”模式下使用vi -b /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt
,使用vi -b /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt
。
如果每行都以控制-M结束,就像这样
-----BEGIN CERTIFICATE-----^M MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM^M MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg^M THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x^M
你有一个Windows行终止格式的文件,而且Apache不喜欢这些。
您的select包括再次移动文件,需要更加小心; 或者使用dos2unix
命令将其dos2unix
; 如果你小心的话,你也可以在vi里面删除它们。
对于尝试读取证书签名请求(CSR)(注意OP正在读取证书)时出现类似错误的人,请确保使用正确的OpenSSL命令。 x509
用于证书, req
是用于CSR:
openssl req -in server.csr -text -noout
VS
openssl x509 -in server.crt -text -noout
就这样绕了一圈圈,结果certificate我有错误的方式certificate – 例如
SSLCertificateFile /etc/apache2/ssl/server.key SSLCertificateKeyFile /etc/apache2/ssl/server.crt
代替:
SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key
有什么要检查,如果你得到这个错误。
在我的情况下,我发现我的证书有不同的“ – ”字符。 必须是pipe理员将证书放到服务器上的复制/粘贴问题,文本编辑器将replace为一个特殊的unicode字符。
这花了好几个小时的时间来诊断,最后我只是猜到了,用vi编辑了证书,删除了现有的“ – ”字符,然后重新input。
希望这有助于某人。
在我的情况下,我遇到了OP的错误,因为无论谁为我创build.crt文件,真正创build了.PEM格式的文件,并将其命名为.crt。
我通过运行以下有用的指南发现了这一点: https : //support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how -to-转换,他们
我所要做的就是将我的.crt重命名为.pem,而我完成了! 指南指出,从OP的问题中的错误意味着input文件已经是PEM格式,所以试图将其从DER格式转换为.pem是无法完成的,实际上是不必要的。
>> 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
确保您的文件在证书文件中没有尾随或前导空格。 请仔细确保证书文件中没有空格或空格,方法是select整个文本并在纯文本编辑器上查找空格。
另外检查是否确实存在所有已configuration的文件并且是正确的。
例如:在你的另一篇文章中,你说你的.key文件被命名为我的 domain.com.crt而在虚拟主机configuration你有domain.com.crt
SSLCertificateFile /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt SSLCertificateKeyFile /etc/apache2/domain.ssl/domain.ssl.key/domain.com.key SSLCertificateChainFile /etc/apache2/domain.ssl/ca.crt SSLCACertificateFile /etc/apache2/domain.ssl/gs_intermediate_ca.crt
再次检查所有上述文件是否存在并且是有效的。
其他人应该遇到这个问题,你的Apache错误日志说:
初始化:无法从文件/etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt读取服务器证书
确保你没有在apacheconfiguration中的声明中交换你的密钥和证书文件。 我已经把我的证书文件和证书指向我的密钥文件。 这篇文章帮助我弄清楚了这个问题,但是我想指出这是另一个潜在的问题/解决scheme。
我的问题(使用Apache 2.4安装新服务器时出现同样的错误)是Apache(2.4)无法读取二进制文件.crt文件。 我将它导入到我的个人证书存储(使用mmc),并将其导出为base-64编码的X.509(.cer)。 将导出的文件重命名为相同的名称(.crt)(在我的httpd-ssl.conf中使用),并重新运行! 同样的证书在我的旧服务器上工作,也许Apache 2.4更严格,然后2.2? 祝你好运。
就我而言,它与文件中存在的BOM有关。 人们可以像这样剥离它:
tail -c +4 ssl.crt > ssl2.crt
不知道它是否总是需要3个字节,所以更好的方法是:
vi -c 'se nobomb' -c wq ssl.crt
我得到了同样的错误,因为我用.crt文件名切换.key
我有一个类似的问题,当我不小心在apacheconfiguration中使用客户提供的p7btypes的IIS证书。 将证书转换为x509格式修复了错误。 这两种types在表面上看起来都一样,但在内部显然是不同的。