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

Posted

技术标签:

【中文标题】我需要将 .CER 转换为 .CRT 以获得 Apache SSL 证书吗?如果是这样,怎么做?【英文标题】:Do I need to convert .CER to .CRT for Apache SSL certificates? If so, how? 【发布时间】:2010-10-13 03:20:56 【问题描述】:

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

我有我的 *.key 文件,但是我在网上找到的所有文档、*.crt 文件都已指定,而我的 CA 只为我提供了一个 *.cer 文件。

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

【问题讨论】:

CERCRT 扩展没有任何意义。不同的 PKI 供应商对同一事物使用不同的扩展。如果文件是二进制文件,那么它可能是 ASN.1/DER 编码的。如果文件是人类可读的-----BEGIN CERTIFICATE-----,那么它的 PEM 编码。你有什么(DER 或 PEM),你需要什么(DER 或 PEM)? 【参考方案1】:

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

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

更让人困惑的是,在文件中存储证书数据有两种标准方式:一种是“二进制”X.509 编码,另一种是“文本”base64 编码,通常以“@987654323”开头@"。它们对相同的数据进行编码,但采用不同的方式。大多数系统都接受这两种格式,但如果需要,您可以通过 openssl 或其他工具将一种格式转换为另一种格式。证书文件中的编码实际上与某人为该文件提供的扩展名无关。

【讨论】:

我的理解是它们都是 X.509编码。你没有说其他,但上面 x.509 的不对称使用可能会向读者暗示其他情况。对于读者来说,值得注意的是证书可以在这两种编码之间来回转换,因为正如这个答案所提到的,它们拥有相同的信息。使用 openssl x509 -inform 命令查看其他答案。【参考方案2】:

.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 的评论。普通证书显然是特殊编码,而不是纯文本可读。谢谢。【参考方案3】:

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

-----开始PKCS7----- MIIW4gYJKoZIhvcNAQcCoIIW0zCCFs8CAQExADALBgkqhkiG9w0BBwGggha1MIIH ... POI9n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G +bKhADEA -----结束PKCS7-----

PEM 证书数据如下所示:

-----开始证书----- MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm ... nv72c/OV4nlyrvBLPoaS5JFUJvFUG8RfAEY= -----结束证书-----

有一个 OpenSSL 命令可以将 .cer 文件(带有 PKCS#7 数据)转换为您可能会遇到的 PEM 数据(上例中的 BEGIN CERTIFICATE 块)。您可以通过此命令在我们将调用 certfile.cer 的文件上将 PKCS#7 数据强制转换为 PEM 格式:

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

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

【讨论】:

如果你有这个假设的来源会很方便。我认为人们(可能不正确地)交替使用 .cer、.crt、.pem),因此拥有事实来源可以纠正误解。【参考方案4】:

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

编码不一样

【讨论】:

这个答案是错误的。 .CER 和 .CRT 都可以使用 DER 或 PEM(文本)编码。扩展名 .pem 和 .der 反映编码,.cer 和 .crt 不反映。 More details. 其实应该是相反的。但是所有这些扩展都被混淆了很长时间,所以你不应该依赖它们。 可以确认。我有一个 .cer,它是二进制文件【参考方案5】:

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

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

【讨论】:

这对我不起作用!我用过:openssl x509 -inform der -in certificate.cer -out certificate.pem 我收到此错误消息:unable to load PKCS7 object @friederbluemle 您查看过这个答案吗? serverfault.com/questions/417140/… 这是我必须做的,以准备将我的 positiveSSL 证书转换为 PKCS12 以在 Azure 中使用。 windows 命令窗口中的 print_certs 选项无效,这不起作用【参考方案6】:

做事

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

【讨论】:

您是否愿意详细说明这条线的作用以及您为什么要使用这些参数?这个答案很短,对于经验较少的人来说可能很难理解。【参考方案7】:

根据文档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

【讨论】:

zscaler 后面运行vagrantwin (vbox vbox homestead) 时,这是否会通过将我们受信任的根证书安装到vagrant box 中来解决ssl 证书错误?我scp'd 他们,然后使用您的转换并将它们符号链接到/etc/ssl/certs 并在重新配置之前将内容复制到ca-certificates.crt 文件中,但我仍然收到google-recaptcha tls ssl @ 错误987654335@ 在开发盒上。【参考方案8】:

如果您的 cer 文件是二进制格式,您必须将其转换为

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

【讨论】:

【参考方案9】:

基本上有两种 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

【讨论】:

当我尝试编辑我的 cer 文件看起来像二进制文件时,DER 格式对我有用...谢谢! 对读者来说,我发现 openssl 手册页很有用。对我来说,哪个命令做了什么(即转换的方式)是模棱两可的。 -inform 参数指定输入-in 文件的格式,这很直观,但是如果您已经有点困惑,那么明确地知道是很好的。见openssl.org/docs/manmaster/man1/openssl-x509.html【参考方案10】:

我使用命令:

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

但 CER 是二进制形式的 X.509 证书,DER 编码。 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

【讨论】:

【参考方案11】:

如果我们需要将 .cer 转换为 .crt,这是一个对我有用的案例,尽管它们在上下文上是相同的

openssl pkcs12 -in identity.p12 -nokeys -out mycertificate.crt

我们应该有一个有效的私钥 (identity.p12) PKCS 12 格式,这是我从创建我的证书的 CA(认证机构)提供的密钥库(.jks 文件)生成的。

【讨论】:

以上是关于我需要将 .CER 转换为 .CRT 以获得 Apache SSL 证书吗?如果是这样,怎么做?的主要内容,如果未能解决你的问题,请参考以下文章

无法将 .CER 文件转换为 .PEM [重复]

证书类文件转换pem转换为cer

将.crt、.cer、.pfx、.p7b、.der的ssl证书转换成.pem格式

DER、CRT、CER、PEM证书格式介绍及转换方法

ssl证书 只有crt文件 但是使用时需要key或pem文件 请问如何转换

ssl证书 只有crt文件 但是使用时需要key或pem文件 请问如何转换