证书内容格式
并不代表证书文件后缀就是以它结尾的
个人信息交换 (PKCS #12)
个人信息交换格式(PFX,也称为 PKCS #12)支持安全存储证书、私钥和证书路径中的所有证书。
PKCS #12 是唯一可用于导出证书及其私钥的文件格式。
加密消息语法标准 (PKCS #7)
PKCS #7 格式支持存储证书和证书路径中的所有证书。
DER 编码的二进制 X.509(DER)
区别编码规则 (DER) 格式支持存储单个证书。该格式不支持存储私钥或证书路径。
Base64 编码的 X.509(PEM)
Base64 格式支持存储单个证书。该格式不支持存储私钥或证书路径。
使用PEM格式存储的证书开头:—–BEGIN CERTIFICATE—–
使用PEM格式存储的私钥开头:—–BEGIN RSA PRIVATE KEY—–
使用PEM格式存储的证书请求文件开头:—–BEGIN CERTIFICATE REQUEST—–
常见证书后缀
CRT – CRT应该是certificate的三个字母,其实还是证书的意思,常见于*NIX系统,有可能是PEM编码,也有可能是DER编码,大多数应该是PEM编码,相信你已经知道怎么辨别.
CER – 还是certificate,还是证书,常见于Windows系统,同样的,可能是PEM编码,也可能是DER编码,大多数应该是DER编码.
KEY – 通常用来存放一个公钥或者私钥,并非X.509证书,编码同样的,可能是PEM,也可能是DER.
CSR – Certificate Signing Request,即证书签名请求,这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的信息),在生成这个申请的时候,同时也会生成一个私钥,私钥要自己保管好.做过iOS APP的朋友都应该知道是怎么向苹果申请开发者证书的吧.
PFX/P12 – predecessor of PKCS#12,对*nix服务器来说,一般CRT和KEY是分开存放在不同文件中的,但Windows的IIS则将它们存在一个PFX文件中,(因此这个文件包含了证书及私钥)这样会不会不安全?应该不会,PFX通常会有一个”提取密码”,你想把里面的东西读取出来的话,它就要求你提供提取密码,PFX使用的时DER编码,如何把PFX转换为PEM编码?
JKS – 即Java Key Storage,这是Java的专利,跟OpenSSL关系不大,利用Java的一个叫”keytool”的工具,可以将PFX转为JKS,当然了,keytool也能直接生成JKS,不过在此就不多表了.
证书格式转换
PEM to DER
openssl x509 -outform der -in certificate.pem -out certificate.der
PEM to P7B
openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
PEM to PFX
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
DER to PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
P7B to PEM
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
PFX to PEM
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
PXF转PEM后certificate.cer
文件包含认证证书和私钥(上文介绍pem格式处说过,pem格式不能存储私钥),需要把它们分开存储才能使用。
要转换KEY文件也类似,只不过把x509换成rsa,要转CSR的话,把x509换成req
申请证书
向权威证书颁发机构申请证书
用这命令生成一个csr: openssl req -newkey rsa:2048 -new -nodes -keyout my.key -out my.csr
把csr交给权威证书颁发机构,权威证书颁发机构对此进行签名,完成.保留好csr,当权威证书颁发机构颁发的证书过期的时候,你还可以用同样的csr来申请新的证书,key保持不变.
或者生成自签名的证书
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
在生成证书的过程中会要你填一堆的东西,其实真正要填的只有Common Name,通常填写你服务器的域名,如”yourcompany.com”,或者你服务器的IP地址,其它都可以留空的.
生产环境中还是不要使用自签的证书,否则浏览器会不认,或者如果你是企业应用的话能够强制让用户的浏览器接受你的自签证书也行.向权威机构要证书通常是要钱的,但现在也有免费的,仅仅需要一个简单的域名验证即可.有兴趣的话查查”沃通数字证书”.
参考
- Google Chrome帮助文档
- http://www.cnblogs.com/eshizhan/archive/2012/10/07/2713557.html
- http://www.cnblogs.com/guogangj/p/4118605.html
- http://blog.csdn.net/anxuegang/article/details/6157927