关于密码学:密码学系列之PEM和PKCS7PKCS8PKCS12

10次阅读

共计 1865 个字符,预计需要花费 5 分钟才能阅读完成。

简介

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/

最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!

欢送关注我的公众号:「程序那些事」, 懂技术,更懂你!

正文完
 0