当前位置:网站首页>密码学系列之:PEM和PKCS7,PKCS8,PKCS12
密码学系列之:PEM和PKCS7,PKCS8,PKCS12
2022-08-05 04:47:00 【qq_43479892】
优质资源分享
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
Python量化交易实战 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
目录* 简介
简介
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/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
边栏推荐
- The solution to the failure to read channel information when dedecms generates a message in the background
- No regrets, the appium automation environment is perfectly built
- How to deal with DNS hijacking?
- 雷克萨斯lm的安全性到底体现在哪里?一起来看看吧
- [CISCN2019 华东南赛区]Web11
- C++ core programming
- 为什么刚考完PMP,就开始准备软考了?
- Qixi Festival code confession
- [MRCTF2020] PYWebsite
- write the story about us
猜你喜欢
Qixi Festival code confession
【学习笔记之菜Dog学C】动态内存管理之经典笔试题
[极客大挑战 2019]FinalSQL
MySql index learning and use; (I think it is detailed enough)
The log causes these pits in the thread block, you have to guard against
【8.1】代码源 - 【第二大数字和】【石子游戏 III】【平衡二叉树】
数字孪生技术在电力系统中的应用现状
Spark Basics [Introduction, Getting Started with WordCount Cases]
Index Mysql in order to optimize paper 02 】 【 10 kinds of circumstances and the principle of failure
【 8.4 】 source code - [math] [calendar] [delete library 】 【 is not a simple sequence (Bonus) 】
随机推荐
Detailed explanation of each module of ansible
程序开发的一些常规套路(一)
【8.2】代码源 - 【货币系统】【硬币】【新年的问题(数据加强版)】【三段式】
There are several common event handling methods in Swing?How to listen for events?
Why did you start preparing for the soft exam just after the PMP exam?
mutillidae下载及安装
dedecms报错The each() function is deprecated
多列属性column元素的可见性:display、visibility、opacity、垂直对齐方式:vertical-align、z-index 越大越显示在上层
Feature preprocessing
A 35-year-old software testing engineer with a monthly salary of less than 2W, resigns and is afraid of not finding a job, what should he do?
商业智能BI业务分析思维:现金流量风控分析(一)营运资金风险
动力小帆船制作方法简单,电动小帆船制作方法
[SWPU2019]Web1
Some conventional routines of program development (1)
mysql数据库表什么字段类型的存储长度最大?
小程序_动态设置tabBar主题皮肤
作业8.4 进程间的通信 管道与信号
The first performance test practice, there are "100 million" a little nervous
DEJA_VU3D - Cesium功能集 之 059-腾讯地图纠偏
dedecms织梦tag标签不支持大写字母修复