证书格式¶
PEM¶
PEM 以 -----BEGIN
开头,以 -----END
结尾,中间包含 ASN.1 格式的数据。ASN.1 是经过 base64 转码的二进制数据。Wikipedia 上有完整 PEM 文件的例子。
用 Python 3 和 PyCryptodome 库可以与 PEM 文件交互并提取相关数据。例如我们想提取出模数 n
:
#!/usr/bin/env python3
from Crypto.PublicKey import RSA
with open("certificate.pem","r") as f:
key = RSA.import_key(f.read())
print(key.n)
DER¶
DER 是 ASN.1 类型的二进制编码。后缀 .cer
或 .crt
的证书通常包含 DER 格式的数据,但 Windows 也可能会接受 PEM 格式的数据。
我们可以用 openssl
将 PEM 文件转化为 DER 文件:
openssl x509 -inform DER -in certificate.der > certificate.pem
现在问题被简化成了如何读取 PEM 文件,所以我们可以重复使用上一小节中的 Python 代码。
其他格式转换¶
openssl x509 -outform der -in certificate.pem -out certificate.der
openssl x509 -inform der -in certificate.cer -out certificate.pem