我是否需要将 ApacheSSL 证书的.CER 转换为.CRT? 如果需要,如何转换?

我需要用 SSL 设置一个 Apache2服务器。

我有我的 * 。但我在网上找到的所有文件 * 。指定了 crt 文件,我的 CA 只提供了一个 * 。文件。

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

489887 次浏览

加密证书的文件扩展名并没有像您期望的那样标准化。默认情况下,Windows 将双击一个 .crt文件视为将证书导入到 Windows 根证书存储的请求,而将一个 .cer文件视为仅仅为了查看证书的请求。因此,它们的不同之处在于,Windows 对于双击每种类型的文件时所发生的情况有一些内在的不同含义。

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

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

Ce 和. crt 文件应该可以互换,只要将它们导入密钥存储库即可。

查看。文件。删除 -----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

我猜你有一个。Cer 文件,其中包含 PKCS # 7编码的证书数据,并且希望将其转换为 PEM 编码的证书数据(通常为。或者。Pem 档案)。例如,。包含 PKCS # 7编码数据的 cer 文件如下所示:

-----BEGIN PKCS7-----
MIIW4gYJKoZIhvcNAQcCoIIW0zCCFs8CAQExADALBgkqhkiG9w0BBwGggha1MIIH
...
POI9n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G
+bKhADEA
-----END PKCS7-----

PEM 证书数据如下:

-----BEGIN CERTIFICATE-----
MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm
...
nv72c/OV4nlyrvBLPoaS5JFUJvFUG8RfAEY=
-----END CERTIFICATE-----

有一个 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 文件可能包含一个或多个证书(可能是整个证书链)。

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

编码不一样。

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

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

照做就是了

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

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

如果 cerfile 具有二进制格式,则必须将其转换为

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

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

我使用命令:

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

但是 CER 是 X.509证书的二进制形式,DER 编码。 CRT 是一个二进制 X.509证书,以文本(基于64)编码封装。

因此,你也许应该使用:

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

然后导入您的证书:

将您的 CA 复制到 dir:

/usr/local/share/ca-certificates/

使用命令:

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

更新 CA 存储:

sudo update-ca-certificates

如果我们需要转换的话,这里有一个案例对我很有用。Cer to.虽然它们的上下文是一样的

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

其中我们应该有一个有效的私钥(Identity. p12) PKCS 12格式,这个格式是从 keystore (生成的。Jks 文件) ,该文件由创建我的证书的 CA (证书颁发机构)提供。