PEM文件及相关概念

PEM文件及相关概念

前言

这是我第一次在项目中接触.PEM文件,并需要使用它完成相关需求。所以我有必要了解其相关知识并对它进行记录。本文所参考的博客将在文末贴出连接。

.PEM 文件,全称 Privacy-Enhanced Mail ,直译过来就是"隐私增强邮件"。它是一种文件编码格式,采用 Base64 ASCII 编码的纯文本,用于承载证书和密钥信息。主要应用在 Linux 服务器上。

主要格式:

css 复制代码
-----BEGIN XXX-----
(AFTER CODE)
-----END XXX-----

以下贴出本文所涉及到的名词表格及其相对应的含义

名词 含义
X.509 一种通用的证书格式,包含证书持有人的公钥,加密算法等信息
.der 证书的二进制存储格式
.pem 证书或者密钥的Base64文本存储格式。可以单独存放证书或者密钥,也可以包含两者
.key 单独存放 .pem 格式的密钥
.cer , .crt 证书文件,Linux 下为 .crt ,windows 下为 .cer ; 存储格式可以为 .pem 或者*.der*
.csr 证书签名请求,包含证书持有人信息,如:国家,邮件,域名等信息; 存储格式可以为 .pem 或者*.der*

如何使用

自定义生成公钥和私钥对
  1. 生成公钥和私钥对
csharp 复制代码
$ openssl genpkey -algorithm rsa -out rsa_private.key
  1. 生成的 rsa_private.key 文件中包含了私钥和公钥,我们可以通过下面的命令提取出公钥
vbnet 复制代码
$ openssl rsa -pubout -in rsa_private.key -out rsa_pub.key
对文件进行公钥加密和私钥解密
  1. 生成测试文件
shell 复制代码
$ echo "this is a test" > text
  1. 使用公钥对文件进行加密,对应参数为 -encrypt
vbnet 复制代码
$ openssl rsautl -encrypt -in text -inkey rsa_pub.key -pubin -out text.en
  1. 使用私钥对文件进行解密,对应参数为 -decrypt
vbnet 复制代码
$ openssl rsautl -decrypt -in text.en -inkey rsa_private.key
  1. 获得结果
kotlin 复制代码
this is a test
对文件进行私钥加密和公钥解密

该过程在实际使用中并非用加密和解密来描述,而是用签名和校验来描述

  1. 生成测试文件
shell 复制代码
$ echo "this is a test" > text_1
  1. 使用公钥对文件进行加密,对应参数为 -sign
csharp 复制代码
$ openssl rsautl -sign -in text_1 -inkey rsa_private.key -out text_1.en
  1. 使用私钥对文件进行解密,对应参数为 -verify
ruby 复制代码
$ openssl rsautl -verify -in text_1.en -inkey rsa_pub.key -pubin
  1. 获得结果
kotlin 复制代码
this is a test

公钥加密和私钥加密的区别 *

阐述一个前提,在非对称加密的前提下,公钥加密的使用场景是加密和解密,私钥加密的使用场景是签名和验证。有两个终端,我们称其分别为A、B。

假设现在A为发送方,需要向B发送信息,有两个地方需要注意:

  • A发送的信息只能由B解读
  • B必须确保该消息来自A

以上两点,则分别对应加解密,以及签名验证的概念。

首先,A和B分别持有两个密钥。A持有自身的私钥以及B的公钥,B持有自身私钥以及A的公钥。当A向B发送消息时,首先使用B的公钥对内容进行加密,然后使用自己的私钥对其签名。当B收到该消息后,首先用A的公钥对其验签,通过后再使用自己的私钥对其进行解密,最后拿到真正的消息内容。


确保公钥有效性 *

当拿到一个公钥后,为了判断公钥从属、安全性以及是否被杜撰,需要先将公钥向某些权威认证机构进行验证,然而,公钥自身并没有携带这些信息。因此引入以下两个概念:

  • 证书:公钥信息 + 额外的其他信息(包括所属机构,采用加密算法等), 文件扩展名一般为 .crt。
  • 证书认证机构(CA):当拿到证书后,需要将证书交付给 CA 完成验证。验证成功则可以正常使用证书中的公钥向持有对应私钥的网络发起通信。
证书认证流程模拟
  1. 生成密钥对
csharp 复制代码
$ openssl genpkey -algorithm rsa -out rsa_private.key
  1. 基于生成的密钥对生成 .csr, .csr 文件为证书签名请求的预处理文件
vbnet 复制代码
$ openssl req -new -key rsa_private.key -out server.csr
  1. 将生成的 .csr 文件发送给证书认证机构(CA)

这里我们是模拟流程,所以不需要向真正的 CA 注册,因为这个过程是收费的

我们把自己当作 CA 进行注册

csharp 复制代码
$ openssl x509 -req -days 365 -in server.csr -signkey rsa_private.key -out mycert.crt

参考博客

相关推荐
小辰记事本4 小时前
从零读懂RoCEv2数据包构造:从WQE到线缆上的完整旅程
服务器·网络·网络协议·rdma
北京耐用通信6 小时前
全域适配工业场景耐达讯自动化Modbus TCP 转 PROFIBUS 网关轻松实现以太网与现场总线互通
网络·人工智能·网络协议·自动化·信息与通信
YMWM_9 小时前
UDP协议详解:从原理到Python实践
网络·网络协议·udp
pengyi8710159 小时前
共享 IP 与独享 IP 怎么选?被封后升级方案避坑
网络·网络协议·tcp/ip
半壶清水11 小时前
用P4 Tutorial、BMv2 和 Mininet‌解析网络第一集------模拟环境搭建
运维·服务器·网络·网络协议·tcp/ip
BullSmall12 小时前
Promtheus和Alertmanager 之间是通过管理平面还是业务层面IP交互
网络协议·tcp/ip·平面
DONSEE广东东信智能读卡器12 小时前
用PowerShell实现Windows 本地 WSS/HTTPS 自签名证书配置方法
windows·网络协议·https·powershell·身份证阅读器
2501_9160074712 小时前
iOS开发中抓取HTTPS请求的完整解决方法与步骤详解
android·网络协议·ios·小程序·https·uni-app·iphone
Irissgwe13 小时前
一、网络基础概念
linux·网络·websocket·网络协议·socket·linux网络编程
treesforest13 小时前
2026年,IP地理位置精准查询的几个硬核技术变化
运维·网络·网络协议·tcp/ip·ip