我需要将Apache SSL证书的.CER转换为.CRT吗?如果是这样,怎么办?


121

我需要使用SSL设置Apache 2服务器。

我有我的* .key文件,但是我在网上找到了所有文档,指定了* .crt文件,而我的CA仅向我提供了* .cer文件。

* .cer文件与* .crt是否相同?如果没有,如何将CER转换为CRT格式?


11
CERCRT扩展意味着什么。不同的PKI供应商对同一事物使用不同的扩展名。如果文件是二进制文件,则可能是ASN.1 / DER编码的。如果该文件是人类可读的-----BEGIN CERTIFICATE-----,则使用PEM编码。您有什么(DER或PEM),以及什么(DER或PEM)?
2014年

Answers:


106

加密证书的文件扩展名并没有像您期望的那样标准化。Windows默认情况下将双击.crt文件视为将证书导入Windows根证书存储.cer的请求,但将文件视为仅查看证书的请求。因此,它们在某种意义上是不同的,因为Windows双击每种类型的文件时会产生一些固有的不同含义。

但是,当您双击它们时Windows处理它们的方式大约是两者之间的唯一区别。这两个扩展名仅表示它包含一个公共证书。您可以重命名证书文件,以在我所看到的任何系统或配置文件中使用一个扩展名代替另一个扩展名。在非Windows平台(甚至Windows)上,人们对使用的扩展名不是特别小心,并且可以将它们互换使用,因为只要文件内容正确,它们之间就没有区别。

使事情更令人困惑的是,有两种标准的方式将证书数据存储在文件中:一种是“二进制” X.509编码,另一种是通常以“ -----BEGIN CERTIFICATE-----” 开头的“文本” base64编码。这些编码相同的数据,但是方式不同。大多数系统都接受两种格式,但是,如果需要,可以通过openssl或其他工具将其转换为另一种格式。证书文件中的编码实际上与某人给该文件的扩展名无关。


我的理解是,他们 X.509编码。您没有其他说明,但是上面x.509的不对称使用可能会给读者带来其他提示。对于读者而言,值得注意的是,可以在这两种编码之间来回转换证书,因为正如此答案所提到的,它们持有相同的信息。使用openssl x509 -inform命令查看其他答案。
FreeText

55

根据文档mod_ssl

SSLCertificateFile: 
   Name: SSLCertificateFile
   Description: Server PEM-encoded X.509 certificate file

证书文件应为PEM编码的X.509证书文件:

openssl x509 -inform DER -in certificate.cer -out certificate.pem

这将解决SSL证书错误,落后时zscaler,运行vagrantwinvbox homestead),通过安装我们的受信任的根证书到无业游民盒子?我找到了scp它们,然后使用您的转换并将它们符号链接到其中,并且在重新配置之前/etc/ssl/certs将其内容复制到了ca-certificates.crt文件中,并且仍然在dev框上google-recaptcha tls ssl出现错误file_get_contents
blamb

54

基本上有两种CER证书编码类型,即DER和Base64。当DER类型返回错误加载证书(asn1编码例程)时,请尝试PEM,它将起作用。

openssl x509 -inform DER -in certificate.cer -out certificate.crt

openssl x509 -inform PEM -in certificate.cer -out certificate.crt


3
当我的cer文件看上去像二进制文件时,DER格式对我来说很有用...谢谢!
布拉德·帕克斯

1
对于读者来说,我发现openssl手册页很有用。对我来说,哪个命令做了什么(即转换是哪种方式)对我来说是模棱两可的。-inform参数指定输入-in文件的格式,这很直观,但是如果您已经有点困惑了,最好明确地知道。参见openssl.org/docs/manmaster/man1/openssl-x509.html
FreeText,

32

我假设您有一个.cer文件,其中包含PKCS#7编码的证书数据,并且想要将其转换为PEM编码的证书数据(通常是.crt或.pem文件)。例如,一个包含PKCS#7编码数据的.cer文件如下所示:

----- BEGIN PKCS7 -----
MIIW4gYJKoZIhvcNAQcCoIIW0zCCFs8CAQExADALBgkqhkiG9w0BBwGggha1MIIH
...
POI9n9cd2cNgQ4xYDiKWL2KjLB + 6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G
+ bKhADEA
-----结束PKCS7 -----

PEM证书数据如下所示:

----- BEGIN证书-----
MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm
...
nv72c / OV4nlyrvBLPoaS5JFUJvFUG8RfAEY =
-----结束证书-----

有一个OpenSSL命令可以将.cer文件(带有PKCS#7数据)转换为您可能会遇到的PEM数据(BEGIN CERTIFICATE上面示例中的块)。您可以通过以下命令将PKCS#7数据强制转换为PEM格式,将其称为certfile.cer:

openssl pkcs7 -text -in certfile.cer -print_certs -outform PEM -out certfile.pem

请注意,.cer或.pem文件可能包含一个或多个证书(可能是整个证书链)。


1
如果您有这个假设的来源将很方便。我认为人们可以(可能不正确地)交替使用.cer,.crt和.pem),因此掌握真相可以纠正误解。
PhilT

30

CERDER编码的二进制形式的X.509证书。
CRT是二进制X.509证书,封装在文本(base-64)编码中。

它不是相同的编码。


13
这个答案是错误的。.CER和.CRT都可以使用DER或PEM(文本)编码。扩展名.pem和.der反映了编码,.cer和.crt没有。更多细节
2016年

1
其实,这应该是相反的。但是所有这些扩展都已经混淆了很长时间,因此您不应该依赖它们。
Claudio Floreani

16

如何将.cer文件转换为.crt文件(它们的编码方式不同!)的问题的答案是:

openssl pkcs7 -print_certs -in certificate.cer -out certificate.crt

5
这对我不起作用!我曾经用过:openssl x509 -inform der -in certificate.cer -out certificate.pem
sj59

我收到此错误消息:unable to load PKCS7 object
friederbluemle 2015年

@friederbluemle您是否签出了这个答案?serverfault.com/questions/417140/...
亚历山大Presber

这是我必须要做的事情,以准备好我的PositiveSSL证书转换为PKCS12以在Azure中使用。
Owen

16

我使用命令:

openssl x509 -inform PEM -in certificate.cer -out certificate.crt

但是CER是DER编码的二进制形式的X.509证书。CRT是二进制X.509证书,封装在文本(base-64)编码中。

因此,您可能应该使用:

openssl x509 -inform DER -in certificate.cer -out certificate.crt

然后导入您的证书:

将您的CA复制到目录:

/usr/local/share/ca-certificates/

使用命令:

sudo cp foo.crt /usr/local/share/ca-certificates/foo.crt

更新CA存储:

sudo update-ca-certificates



3

.cer和.crt文件应可互换,只要将它们导入密钥库即可。

看一下.cer文件的内容。删除-----BEGIN CERTIFICATE-----行前和行后的所有内容-----END CERTIFICATE-----。您将剩下BEGIN / END行,它们之间有一堆Base64编码的内容。

-----BEGIN CERTIFICATE-----
MIIDQTCCAqqgAwIBAgIJALQea21f1bVjMA0GCSqGSIb3DQEBBQUAMIG1MQswCQYD
...
pfDACIDHTrwCk5OefMwArfEkSBo/
-----END CERTIFICATE-----

然后,只需使用keytool将其导入您的密钥文件即可。

keytool -import -alias myalias -keystore my.keystore -trustcacerts -file mycert.cer

帮助我的是您对BASE-64 ENCODING的评论。普通证书显然是特殊编码,不是纯文本可读的。谢谢。
DRapp 2011年

-2

做就是了

openssl x509 -req -days 365 -in server.cer -signkey server.key -out server.crt

8
您是否愿意详细说明此行的功能以及为什么要使用这些参数?这个答案很短,对于经验较少的人可能很难理解。
GameDroids 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.