本文へスキップ
ecdsa.com

PEM

DER データを base64 にして -----BEGIN label----- 行と -----END label----- 行で挟んだテキスト形式で、PKIX オブジェクト向けに RFC 7468 で標準化されており、ほとんどのツールが証明書や鍵の保存に使っています。
別表記PEM filePEM formatBEGIN CERTIFICATERFC 7468

本文は DER バイト列の標準の base64(base64url ではありません)で、慣例として 64 文字ごとに改行します。RFC 7468 のラベルには、CERTIFICATE、X509 CRL、CERTIFICATE REQUEST、PKCS7、CMS、PRIVATE KEY(PKCS #8)、ENCRYPTED PRIVATE KEY、PUBLIC KEY(SPKI)があります。OpenSSL の従来形式では RSA PRIVATE KEY、EC PRIVATE KEY、RSA PUBLIC KEY が加わり、古い暗号化された鍵には、1993年のプライバシー強化メール(Privacy-Enhanced Mail)から受け継いだ Proc-Type: 4,ENCRYPTED ヘッダーと DEK-Info ヘッダーが付いています。

1 つの PEM ファイルに複数のオブジェクトを入れることができます。たとえば証明書チェーン(リーフ証明書が先頭)や、鍵とそれに続く証明書です。ブロックの前やブロック間にテキストを置くことも許されているため、openssl x509 -text の出力を base64 の隣に置くことができます。

よくあるエラーの原因は、base64 ではなくラベルにあります。no start line(ラベルの誤り、または PEM として渡された DER ファイル)、expecting: ANY PRIVATE KEY(秘密鍵が必要な場所に公開鍵を渡した)、CRLF や空白文字による破損、そして厳格なパーサーでの最後の改行の欠落です。変換で情報が失われることはなく、openssl x509 -outform DER で変換し、元に戻すこともできます。

規格と参考文献

すべての用語