与SSL的Apache – 如何将CER转换为CRT证书?

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

我有我的* .key文件,但我的证书颁发者提供了一个* .cer文件。

在networking的所有文件中,它们都是* .crt证书。

请让我知道,* .cer与* .crt相同。

如果现在,我如何将CER转换成CRT格式?

密码证书的文件扩展名并不像您预期​​的那样标准化。 Windows默认将双击.crt文件作为将证书导入Windows根证书存储区的请求,但将.cer文件作为仅查看证书的请求处理。 因此,至少在这种意义上,它们是不同的,即当你双击每种类型的文件时,Windows会有一些固有的不同含义。

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

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

如果您对特定程序使用特定类型的文件有困难,最好发布一个单独的问题来描述您拥有哪种类型的文件以及您的应用程序所期待的内容。

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

这是不一样的编码。

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

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

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

PEM证书数据如下所示:

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

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

 openssl pkcs7 -print_certs -in certificate.cer -out 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

.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 

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

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

做就是了

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