我是否需要将Apache SSL证书的.CER转换为.CRT?如果是,怎么做?

我是否需要将Apache SSL证书的.CER转换为.CRT?如果是,怎么做?,apache,ssl,Apache,Ssl,我需要使用SSL设置Apache2服务器 我有我的*.key文件,但我在网上找到的所有文档都指定了*.crt文件,我的CA只向我提供了一个*.cer文件 *.cer文件是否与*.crt相同?如果没有,我如何将CER转换为CRT格式?加密证书的文件扩展名并不像您预期的那样标准化。默认情况下,Windows将双击.crt文件视为将证书导入Windows根证书存储的请求,但将.cer文件视为仅查看证书的请求。因此,它们是不同的,因为Windows对于双击每种类型的文件时所发生的事情具有一些固有的不同含

我需要使用SSL设置Apache2服务器

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


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

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

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


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

只要将.cer和.crt文件导入密钥库,它们就应该是可交换的

查看.cer文件的内容。擦除
----开始证书------
行之前和
----结束证书------
行之后的任何内容。您将只剩下开始/结束行,它们之间有一堆Base64编码的东西

-----BEGIN CERTIFICATE-----
MIIDQTCCAqqgAwIBAgIJALQea21f1bVjMA0GCSqGSIb3DQEBBQUAMIG1MQswCQYD
...
pfDACIDHTrwCk5OefMwArfEkSBo/
-----END CERTIFICATE-----
然后使用keytool将其导入到您的keyfile中

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

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

-----BEGIN PKCS7----- MIIW4gYJKoZIhvcNAQcCoIIW0zCCFs8CAQExADALBgkqhkiG9w0BBwGggha1MIIH ... POI9n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G +bKhADEA -----END PKCS7----- -----BEGIN CERTIFICATE----- MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm ... nv72c/OV4nlyrvBLPoaS5JFUJvFUG8RfAEY= -----END CERTIFICATE----- -----开始PKCS7----- MIIW4GYJKOZIHVCNAQCOIW0ZCCFS8CAQEXADALBKQHKIG9W0BBWGGHA1MiIH ... POI9n9cd2cNgQ4xYDiKWL2KjLB+6RQXVQZJ4H6UCXM1XAX5UJ5TLUUL9WQT6U0G +bKhADEA -----完PKCS7----- PEM证书数据如下所示:

-----BEGIN PKCS7----- MIIW4gYJKoZIhvcNAQcCoIIW0zCCFs8CAQExADALBgkqhkiG9w0BBwGggha1MIIH ... POI9n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G +bKhADEA -----END PKCS7----- -----BEGIN CERTIFICATE----- MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm ... nv72c/OV4nlyrvBLPoaS5JFUJvFUG8RfAEY= -----END CERTIFICATE----- -----开始证书----- MIIHNJCBH6GAWIBAGIQALBXTQKAZSXUSR9QDWWXANDANBGKQHKIG9W0BAQUFADBM ... nv72c/OV4NLYRVBLPOA5JFUJVFUG8RFAEY= -----结束证书----- 有一个OpenSSL命令可以将.cer文件(带有PKCS#7数据)转换为您可能会遇到的PEM数据(上例中的
begincertificate
块)。您可以通过以下命令将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证书,用文本(base-64)编码封装


编码不同。

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

照办

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

根据文件:

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

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

如果cer文件为二进制格式,则必须通过

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

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

opensslx509-通知DER-in-certificate.cer-out-certificate.crt

openssl x509-通知PEM-in-certificate.cer-out certificate.crt

我使用命令:

opensslx509-通知PEM-in-certificate.cer-out-certificate.crt

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

因此,您可能应该使用:

opensslx509-通知DER-in-certificate.cer-out-certificate.crt

然后要导入您的证书:

将CA复制到目录:

/usr/local/share/ca证书/

使用命令:

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

更新CA存储:


sudo-update-ca-certificates

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

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

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

帮助我的是你对BASE-64编码的评论。一个普通的证书显然是特殊编码,而不是纯文本可读的。谢谢。如果你有这个假设的来源,那就很方便了。我认为人们(可能错误地)使用.cer、.crt、.pem,因此有一个真理的来源可以纠正误解。
cer
crt
扩展没有任何意义。不同的PKI供应商对同一事物使用不同的扩展。如果文件是二进制的,那么它可能是ASN.1/DER编码的。如果文件是人类可读的,请使用
----begincertificate