说明
PEM (Privacy Enhanced Mail
的缩写)文件最初是为了确保电子邮件安全而发明的, 现在它是一个互联网安全标准. PEM 文件是 X.509 证书、CSR(certificate signing request
) 和加密密钥的最常见格式.
什么是 PEM 文件
PEM 文件是一个文本文件, 文件中包含一个或多个采用 Base64 ASCII 编码的条目, 每个条目都有纯文本的页眉和页脚
例如:
--BEGIN CERTIFICATE--
和--END CERTIFICATE--
PEM 是一种容器格式, 可能只包括公共证书, 也可能包括整个证书链, 包括公钥、私钥和根证书.
PEM可以有多种扩展名
例如: .pem、.key、.cer、.cert 等
典型的 PEM 文件是:
key.pem
: 包含私有加密密钥cert.pem
: 包含证书信息
PEM 文件格式
页眉和页脚用于标识文件的类型, 但并非所有 PEM 文件都需要它们. 如下说明几种不同类型的PEM文件
页眉页脚内容 | 文件类型 |
---|---|
—–BEGIN CERTIFICATE REQUEST—– .... —–END CERTIFICATE REQUEST—– | CSR文件 |
—–BEGIN RSA PRIVATE KEY—– .... —–END RSA PRIVATE KEY—– | 私钥文件 |
—–BEGIN CERTIFICATE—– .... —–END CERTIFICATE—– | 证书文件 |
如果 PEM 文件包含 SSL 证书链, 则格式如下所示:
|
|
文件示例
如下示例是一个私钥 pem 文件:
|
|
如下是根证书 pem 文件的示例:
|
|
其他
使用
openssl
命令检查 PEM 证书文件openssl
是一个开源命令行工具, 通常用于生成私钥、创建 CSR、安装我们的 SSL/TLS 证书以及识别证书信息.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
## 命令格式是: openssl x509 -text -in server.pem -noout # 示例: $ openssl x509 -in /etc/pki/fwupd/LVFS-CA.pem -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha256WithRSAEncryption Issuer: CN = LVFS CA, O = Linux Vendor Firmware Project Validity Not Before: Aug 1 00:00:00 2017 GMT Not After : Aug 1 00:00:00 2047 GMT Subject: CN = LVFS CA, O = Linux Vendor Firmware Project Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (3072 bit) Modulus: 00:b5:f5:17:1f:73:70:0c:9c:d6:ca:19:0f:c8:f7: ...... Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:1 X509v3 Subject Alternative Name: URI:http://www.fwupd.org/, email:sign@fwupd.org X509v3 Extended Key Usage: Code Signing X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: B1:8D:EA:E4:23:A7:7E:09:8E:B5:EE:31:E0:6A:DD:9E:34:37:65:AC X509v3 CRL Distribution Points: Full Name: URI:http://www.fwupd.org/pki/ Signature Algorithm: sha256WithRSAEncryption ......
ssh
使用的 PEMPEM 文件也用于 ssh, 如果我们执行过
ssh-keygen
用来配置ssh
的免密, 则~/.ssh/id_rsa
就是一个 PEM 文件, 只是没有扩展名.我们可以在
ssh
中使用-i
标志来指定我们要使用新密钥而不是id_rsa
:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
# 生成一对新公私钥对 $ ssh-keygen -f ./test_rsa -t rsa -P '' Generating public/private rsa key pair. Your identification has been saved in ./test_rsa Your public key has been saved in ./test_rsa.pub The key fingerprint is: SHA256:r+NkIS+z7wZcjYjsQ1q/mWDkBkbSXjE1W7mS74W69AE liawne@ruiwen The key's randomart image is: +---[RSA 3072]----+ | . ooo .. | |. o .. +. | | + o ..o + | | + * + + . | | . O oE+S. | | . B ++oo. | | o o+B=.. | | .=B+o | | o**. | +----[SHA256]-----+ # 使用新生成的密钥对配置免密 $ ssh-copy-id -i ./test_rsa.pub pi@192.168.8.106 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "./test_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed ...... # 使用对应的私钥连接服务器 $ ssh -i ./test_rsa pi@192.168.8.106 Last login: Tue Mar 22 23:10:35 2022 from 192.168.8.102 ......