我需要使用SSL设置Apache 2服务器.
我有我的*.key文件,但我的证书颁发者提供了一个*.cer文件.
在网络的所有文档中,它们都是*.crt证书.
请告诉我,*.cer与*.crt相同.
如果没有,我如何将CER转换为CRT格式?
加密证书的文件扩展名并不像您期望的那样标准化.Windows默认情况下将双击.crt
文件视为将证书导入Windows根证书存储区.cer
的请求,但将文件视为仅查看证书的请求.因此,它们在这个意义上是不同的,至少,Windows对于双击每种类型的文件时发生的情况有一些固有的不同含义.
但是当你双击它们时Windows处理它们的方式是两者之间的唯一区别.这两个扩展只表示它包含公共证书.您可以在我见过的任何系统或配置文件中重命名文件或使用一个文件代替另一个文件.在非Windows平台上(甚至在Windows上),人们并不特别注意他们使用哪种扩展,并且可以互换地对待它们,因为只要文件内容正确,它们之间就没有区别.
让事情更加混乱的是,有两种标准方法可以将证书数据存储在一个文件中:一种是"二进制"X.509编码,另一种是"文本"base64编码,通常以" -----BEGIN CERTIFICATE-----
" 开头.它们以不同的方式编码相同的数据.大多数系统都接受这两种格式,但如果需要,可以通过openssl或其他工具将其转换为另一种格式.但是证书文件中的编码实际上与某人给予该文件的扩展无关.
如果您对特定程序使用特定类型文件时遇到困难有特定问题,最好发布一个单独的问题,说明您拥有哪种文件以及您的应用程序期望的内容.
根据文档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
基本上有两种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是二进制形式的X.509证书,DER编码.
CRT是二进制X.509证书,封装在文本(base-64)编码中.
它的编码不一样.
我假设您有一个包含PKCS#7编码的证书数据的.cer文件,并且您希望将其转换为PEM编码的证书数据(通常是.crt或.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
块).您可以在我们称之为certfile.cer的文件上通过此命令将PKCS#7数据强制转换为PEM格式:
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
我使用命令:
openssl x509 -inform PEM -in certificate.cer -out certificate.crt
但是CER是DER编码的二进制形式的X.509证书。CRT是二进制X.509证书,封装在文本(基本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
如果您的cer文件为二进制格式,则必须通过
openssl x509 -inform DER -in YOUR_CERTIFICATE.cer -out YOUR_CERTIFICATE.crt