DER を PEM に変換する手順
.der、.cer、.crtファイルをボックスにドロップします。バイナリの入力はバイト列として読み取ります。ファイルの代わりに、1 行の Base64 DER や、30 82 01 b7 …のような 16進数を貼り付けることもできます。- 変換先 は PEM(64 桁) のままにします。
- PEM ラベル は 自動検出 のままにします。変換ツールが ASN.1 を読み、
CERTIFICATE、CERTIFICATE REQUEST、PUBLIC KEY、PRIVATE KEYなどを書き込みます。ツールが特定のラベルを要求する場合にだけ、自分で選んでください。 - 必要なら Windows の改行コード(CRLF) にチェックを入れ、出力をコピー か .pem をダウンロード を押します。
変換したものを確認するには 詳細表示 に切り替えます。サブジェクト、有効期限、フィンガープリントがカードに表示されます。
DER ファイルやヘッダーのない Base64 の出どころ
| 出どころ | 得られるもの |
|---|---|
| Windows の証明書エクスポート「DER encoded binary X.509 (.CER)」 | バイナリの DER |
-rfc を付けない Java の keytool -exportcert | バイナリの DER |
| 証明書内の CA 発行者の URL(AIA 拡張) | たいていは DER の .cer |
JWK や JWKS の x5c | 証明書ごとに 1 行の Base64 DER |
SAML メタデータの <ds:X509Certificate> | Base64 DER、改行を含むこともある |
| パケットキャプチャ、HSM やスマートカードのツール | 16進ダンプ |
どれも同じ PEM になります。443 バイトの DER 証明書は 656 バイトの PEM になります。10 行に分かれた 592 文字の Base64 に、BEGIN 行と END 行が加わります。
PEM 形式の概要
RFC 7468 にはパーサーが期待する形式が書かれており、出力はそれに従っています。
-----BEGIN CERTIFICATE-----
MIIBtzCCAV2gAwIBAgIUfX6gOa1S96OttEsj3WbuIdu0cE0wCgYIKoZIzj0EAwIw
...64 characters per line, the last line shorter...
-----END CERTIFICATE-----
- BEGIN と END のラベルは完全に一致していなければなりません。
- 本文の行は、
=パディング付きの標準の Base64 で 64 文字です。URL セーフなアルファベット(-と_)やパディングなしの入力も受け付け、標準の形式で書き出します。 - 1 つのファイルに複数の証明書を入れるには、ブロックをつなげるだけです。
fullchain.pemや CA バンドルはこうして作られています。作るときは、各 DER 証明書を変換し、リーフを先頭にしてブロックを順に貼り付けてください。
OpenSSL、Python、シェルで DER を PEM にする
openssl x509 -inform der -in cert.cer -out cert.pem
openssl pkey -inform der -in key.der -out key.pem
openssl req -inform der -in app.der -out app.csr
古い OpenSSL のビルドでは、-inform der を付け忘れると unable to load certificate で失敗します。最近のものは自分で DER を判定します。x5c のエントリのような 1 行の Base64 文字列なら次のようにします。
{ echo '-----BEGIN CERTIFICATE-----'; echo "$B64" | fold -w 64; echo '-----END CERTIFICATE-----'; } > cert.pem
Python には組み込みの関数があります。ssl.DER_cert_to_PEM_cert(open("cert.der", "rb").read()) です。ほかのレシピは OpenSSL と Python のページにあります。
よくある問題
- 「PEM でも有効な Base64 DER でもありません」 や 「バイト … で DER/ASN.1 として不正です」:Base64 が壊れているか、途中で切れているか、DER ではありません。
.p12や.pfxファイルも DER ですが、中身が暗号化されているので、代わりにopenssl pkcs12で変換してください。 - ラベルが
DATAになる:構造が証明書、鍵、リクエストとして認識されませんでした。バイト列は変換されているので、中身がわかっているならラベルを自分で設定してください。 - ファイルがもともと PEM だった:拡張子が
.cerでも中身が PEM のファイルがあります。その場合、出力は折り返し直しただけの同じ証明書で、変換の必要はありませんでした。中身は 証明書デコーダー で確認できます。 - 逆方向が必要:PEM から DER へ で、
.derのダウンロード、1 行の Base64、16進数が得られます。
よくある質問
.cer ファイルが DER か PEM かはどう見分けますか?
テキストエディターで開いてください。-----BEGIN CERTIFICATE----- という読めるテキストなら PEM、読めないバイナリなら DER で、その最初のバイトは 0x30 です。Linux や macOS の file コマンドは、それぞれ PEM certificate、Certificate, Version=3 と表示します。
SAML メタデータの X509Certificate の値を PEM ファイルにするには?
<ds:X509Certificate> の中の Base64 テキストをボックスに貼り付けます。これはヘッダーのない DER なので、変換ツールが -----BEGIN CERTIFICATE----- を付け、64 文字で折り返し、ブロックを閉じます。
DER 形式の秘密鍵をここで PEM に変換できますか?
はい。PKCS#8、PKCS#1 の RSA 鍵、SEC1 の EC 鍵を判定し、PRIVATE KEY や EC PRIVATE KEY など対応するラベルを付けます。変換はローカルで行い、鍵の値はページに表示しません。
Windows の改行コード(CRLF)にチェックを入れるべきなのはどんなときですか?
Windows のツールや厳格なパーサーがファイルを拒否する場合だけです。ほとんどのソフトウェアはどちらも受け付け、RFC 7468 も PEM でどちらの改行コードも認めています。