iOS安全相关 - HTTPS证书基础概念

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

参考: http://www.jianshu.com/p/2dad7c95b6af

在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进制方式

你可能感兴趣的:(iOS安全相关 - HTTPS证书基础概念)