标签: .pem文件详解; pem;
.pem文件详解
概述
.pem
文件是一种用于存储和传输加密密钥、证书以及其他相关数据的文件格式。PEM 是 “Privacy-Enhanced Mail” 的缩写,虽然其初衷是为电子邮件安全而设计,但现在广泛用于各种加密和安全应用中。
PEM文件的特点
- Base64编码:PEM 文件内容通常是以 Base64 编码的 ASCII 文本格式表示。这种编码使得 PEM 文件可以在纯文本环境中传输和存储。
- 标记(Headers):PEM 文件使用明确的标记来界定数据的开始和结束,例如
-----BEGIN CERTIFICATE-----
和-----END CERTIFICATE-----
。
常见的 PEM 文件类型
PEM 文件可以包含多种类型的数据,以下是一些常见的类型及其用途:
-
证书(Certificates):
- 用途:存储 X.509 证书。
- 标记:
-----BEGIN CERTIFICATE----- (Base64编码的证书数据) -----END CERTIFICATE-----
-
私钥(Private Keys):
- 用途:存储 RSA、DSA、ECDSA 私钥。
- 标记:
- 非加密私钥:
-----BEGIN PRIVATE KEY----- (Base64编码的私钥数据) -----END PRIVATE KEY-----
- 加密私钥:
-----BEGIN ENCRYPTED PRIVATE KEY----- (Base64编码的加密私钥数据) -----END ENCRYPTED PRIVATE KEY-----
- 非加密私钥:
-
公钥(Public Keys):
- 用途:存储 RSA、DSA、ECDSA 公钥。
- 标记:
-----BEGIN PUBLIC KEY----- (Base64编码的公钥数据) -----END PUBLIC KEY-----
-
证书请求(Certificate Signing Requests, CSR):
- 用途:存储用于向证书颁发机构(CA)请求签名的证书请求。
- 标记:
-----BEGIN CERTIFICATE REQUEST----- (Base64编码的证书请求数据) -----END CERTIFICATE REQUEST-----
-
其他类型:
- 用途:可以包含任何其他加密或签名数据,如 Diffie-Hellman 参数等。
- 标记:
-----BEGIN DH PARAMETERS----- (Base64编码的数据) -----END DH PARAMETERS-----
使用PEM文件的常见操作
以下是使用 OpenSSL 工具操作 PEM 文件的一些常见命令示例:
1. 生成私钥
生成一个 2048 位的 RSA 私钥,并保存为 PEM 格式:
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
2. 生成证书请求(CSR)
基于私钥生成一个证书签名请求:
openssl req -new -key private_key.pem -out cert_request.csr
3. 生成自签名证书
使用私钥生成一个自签名证书,有效期为365天:
openssl req -x509 -new -key private_key.pem -out self_signed_cert.pem -days 365
4. 查看证书内容
查看 PEM 格式证书的详细信息:
openssl x509 -in self_signed_cert.pem -text -noout
5. 转换PEM和其他格式
将 PEM 格式的证书转换为 DER 格式:
openssl x509 -outform der -in cert.pem -out cert.der
将 PEM 格式的私钥转换为 PKCS #8 格式:
openssl pkcs8 -topk8 -inform PEM -outform PEM -in private_key.pem -out private_key_pkcs8.pem -nocrypt
总结
PEM 文件格式在信息安全中扮演着重要角色,广泛用于存储和传输证书、密钥以及其他加密数据。其 Base64 编码的 ASCII 文本格式使其易于在各种环境中使用和传输。通过明确的标记,PEM 文件可以包含多种类型的数据,并且可以通过工具如 OpenSSL 进行生成、查看和转换操作。在日常的安全操作中,理解和正确使用 PEM 文件是至关重要的。
作者简介:https://shimo.im/docs/rp3OVwxle2fJn7Am/
上海徐汇
2024年6月3日