简介
PEM是一种常见的保留key或者证书的格局,PEM格局的文件一般来说后缀是以.pem结尾的。那么PEM到底是什么呢?它和罕用的证书格局PKCS7和PKCS12有什么关系呢?一起来看看吧。
PEM
PEM尽管应用来存储证书或者密钥的,然而PEM本来是和email相关联的,因为PEM的全称是Privacy-Enhanced Mail,最后是为邮件的隐衷加强而创立的,是在1993年由IETF制订的规范。尽管最终的协定规范并没有被宽泛采纳,然而其中定义的文本编码却被宽泛的应用,最终由IETF在RFC 7468中正式化。
之前咱们介绍过一种协定描述语言ASN.1,ASN.1通常被用来定义协定中的数据结构,而后通过应用DER编码来对这些数据进行序列化,然而DER编码是二进制的格局,二进制文件在某些状况下不不便进行传输或者展现,不然说某些只反对ASCII编码的状况,所以须要一种能够讲DER格局转换成为文本格式的形式。
这种形式就叫做PEM。PEM应用的办法也很简略,就是对DER编码过后的二进制数据应用base64编码,将其转换成为文本文件。
在PEM中有固定的文件头和文件结尾符。文件头是以'-----BEGIN'+label+'-----'开始,文件结尾是以'-----END'+label+'-----'完结。
其中label示意的是编码的音讯类型,通常能够取这些值:CERTIFICATE, CERTIFICATE REQUEST, PRIVATE KEY 和 X509 CRL。
上面是一个PEM的例子,示意其内容是一个证书:
-----BEGIN CERTIFICATE KEY----------END CERTIFICATE KEY-----
尽管PEM格局的文件通常以.pem完结,然而也能够应用 ".cer" 或者 ".crt" 示意一个证书,应用".key"示意是一个密钥。
另外, 一个PEM文件中能够蕴含多个内容,比方对于证书来说,通常来说可能须要一些额定的信息比方证书链,这样一个证书链能够存储在一个PEM文件中。
PKCS7
PKCS7是Public-Key Cryptography Standards系列的一员,次要用来存储签名或者加密后的数据,比方证书或者CRL。PKCS7能够用原始的DER格局进行存储,也能够应用PEM格局进行存储。
如果以PEM格局进行存储,那么文件的结尾和结尾别离是:
‑‑‑‑‑BEGIN PKCS7‑‑‑‑‑‑‑‑‑‑END PKCS7‑‑‑‑‑
在windows中PKCS7通常以.p7b结尾。
PKCS7的操作能够通过openssl命令来进行。
比方将一个PKCS7的文件从PEM格局转换成为DER格局:
openssl pkcs7 -in file.pem -outform DER -out file.der
从一个文件中提取出所有的证书到另外一个文件:
openssl pkcs7 -in file.pem -print_certs -out certs.pem
PKCS8
PKCS8也是Public-Key Cryptography Standards系列的一员,它次要用来存储私钥。
私钥首先会应用PKCS #5的规范进行加密,而后将其进行base64编码,转换成为PEM格局进行存储。
所以说PKCS8的格局就是PEM,然而外面存储的内容是通过加密过后的私钥。
PKCS12
PKCS12也是Public-Key Cryptography Standards系列的一员,PKCS12能够看做是PKCS7的扩大,在PKCS12中能够存储证书,私钥或者CRL。和PKCS7相比,PKCS12能够额定存储私钥。
PKCS12的文件是以.p12 或者 .pfx结尾的。在JDK9中,PKCS12是默认的密钥存储格局。
PKCS12的格局和PEM相比会简单的多,在须要的时候,咱们能够应用OPENSSL将PKCS12格局转换成为PEM格局:
openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem
当然也能够从PEM到PKCS12:
openssl pkcs12 -export -in Cert.pem -out Cert.p12 -inkey key.pem
总结
以上就是PEM和PKCS系列中几个十分罕用的编码格局。心愿大家可能把握和正确应用。
更多内容请参考 http://www.flydean.com/48-pem-pkcs7812/
最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!
欢送关注我的公众号:「程序那些事」,懂技术,更懂你!