コンテンツにスキップ

証明書と鍵のファイル形式

証明書、 CSR、 秘密鍵 などは、DERまたはPEMとして保存されることが多い。


ASN.1は、証明書などのデータ構造を定義するための記法である。DERは、そのASN.1データを一意なバイナリとして符号化する形式である。

テキストエディターで開いても内容を直接読むことはできない。

server.der

PEMはDERデータをBase64へ変換し、種類を表すヘッダーとフッターで囲んだテキスト形式である。

証明書:

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

CSR:

-----BEGIN CERTIFICATE REQUEST-----
...
-----END CERTIFICATE REQUEST-----

秘密鍵:

-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----

ファイルの先頭を見ると、格納されているデータの種類を判別できる。


.crt、 .cer、 .key、 .csr、 .pem などの拡張子は慣習であり、実際の符号化形式を保証しない。

拡張子 よく格納されるもの
.crt、 .cer 証明書
.csr CSR
.key 秘密鍵
.pem PEM形式の証明書、鍵、CSRなど
.der DER形式の証明書など

たとえば server.crt がPEM形式の場合もDER形式の場合もある。コマンドが読み込めないときは、拡張子だけで判断せず実際の形式を確認する。


証明書をPEMからDERへ変換する:

Terminal window
openssl x509 \
-in server.crt \
-outform DER \
-out server.der

証明書をDERからPEMへ変換する:

Terminal window
openssl x509 \
-inform DER \
-in server.der \
-outform PEM \
-out server.crt

符号化形式を変換しても、証明書に含まれるSubject、公開鍵、有効期間、署名などは変化しない。


PEM形式では、複数の証明書を1つのファイルへ順番に連結できる。

-----BEGIN CERTIFICATE-----
サーバー証明書
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Intermediate CA証明書
-----END CERTIFICATE-----

TLSサーバー製品では、サーバー証明書と Intermediate CA証明書 を連結したファイルを fullchain.pem などの名前で使用することがある。

連結する順序や Root CA を含めるかどうかは、使用するソフトウェアの仕様を確認する。


OpenSSL 3.5の openssl genpkey は、通常PKCS #8形式の秘密鍵を出力する。

暗号化していない秘密鍵:

-----BEGIN PRIVATE KEY-----

パスフレーズで暗号化した秘密鍵:

-----BEGIN ENCRYPTED PRIVATE KEY-----

RSA専用のTraditional形式では、次のヘッダーになる。

-----BEGIN RSA PRIVATE KEY-----

どちらもRSA秘密鍵を格納できるが、PKCS #8はRSA以外の鍵アルゴリズムも共通の構造で扱える。



  • RFC 7468 証明書、CSR、秘密鍵などのPKIX・PKCS構造をテキスト化する形式。