iOS开发中,有许多概念例如证书标准,证书编码格式,证书文件扩展名等等
证书的标注
X.509
是一种常用的证书标准!HTTPS也使用的这个标准
PEM/DER两种证书编码格式
X.509
这种证书标准中有两类常用的证书的编码格式
-- PEM和DER.
- PEM: Private Enhanced Mail,用文本文件可以打开查看的,以"-----BEGIN..."开头, "-----END..."结尾.内容是base64编码.常用后缀
.pem
- DER: Distinguished Encoding Rules,用文本文件打开是二进制数据,不可读.常用后缀
.cer, .crt
查看PEM格式证书的信息:
openssl x509 -in certificate.pem -text -noout
.Apache和unix服务器偏向于使用这种编码格式.查看DER格式证书的信息:
openssl x509 -in certificate.der -inform der -text -noout
.
Java和Windows服务器偏向于使用这种编码格式.
证书的文件扩展名
这是比较误导人的地方,虽然我们已经知道有PEM和DER这两种编码格式,但文件扩展名并不一定就叫"PEM"或者"DER",常见的扩展名除了PEM和DER还有以下这些,它们除了编码格式可能不同之外,内容也有差别,但大多数都能相互转换编码格式.
- 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文件中
查看KEY的办法:
openssl rsa -in mykey.key -text -noout
如果是DER格式的话,同理应该这样了:
openssl rsa -in mykey.key -text -noout -inform der
查看CSR的办法:
openssl req -noout -text -in my.csr
(如果是DER格式的话照旧加上-inform der,这里不写了)
证书编码的转换
PEM --> DER
openssl x509 -in cert.crt -outform der -out cert.der
DER --> PEM
openssl x509 -in cert.crt -inform der -outform pem -out cert.pem
在Security编程中,有几种典型的密码交换信息文件格式:
DER-encoded certificate: .cer, .crt
PEM-encoded message: .pem
PKCS#12 Personal Information Exchange: .pfx, .p12
PKCS#10 Certification Request: .p10 .csr
PKCS#7 cert request response: .p7r
PKCS#7 binary message: .p7b .p7c .spc
cer/.crt 是用于存放证书,它是2进制形式存放
pem 跟crt/cer的区别是它以Ascii来表示
pfx/p12 用于存放个人证书/私钥,他通常包含保护密码,2进制方式