証明書と鍵のファイル形式
ASN.1は、証明書などのデータ構造を定義するための記法である。DERは、そのASN.1データを一意なバイナリとして符号化する形式である。
テキストエディターで開いても内容を直接読むことはできない。
server.derPEMはDERデータをBase64へ変換し、種類を表すヘッダーとフッターで囲んだテキスト形式である。
証明書:
-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----CSR:
-----BEGIN CERTIFICATE REQUEST-----...-----END CERTIFICATE REQUEST-----秘密鍵:
-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----ファイルの先頭を見ると、格納されているデータの種類を判別できる。
拡張子と形式は同じではない
Section titled “拡張子と形式は同じではない”.crt、 .cer、 .key、 .csr、 .pem などの拡張子は慣習であり、実際の符号化形式を保証しない。
| 拡張子 | よく格納されるもの |
|---|---|
.crt、 .cer |
証明書 |
.csr |
CSR |
.key |
秘密鍵 |
.pem |
PEM形式の証明書、鍵、CSRなど |
.der |
DER形式の証明書など |
たとえば server.crt がPEM形式の場合もDER形式の場合もある。コマンドが読み込めないときは、拡張子だけで判断せず実際の形式を確認する。
PEMとDERの変換
Section titled “PEMとDERの変換”証明書をPEMからDERへ変換する:
openssl x509 \ -in server.crt \ -outform DER \ -out server.der証明書をDERからPEMへ変換する:
openssl x509 \ -inform DER \ -in server.der \ -outform PEM \ -out server.crt符号化形式を変換しても、証明書に含まれるSubject、公開鍵、有効期間、署名などは変化しない。
PEMファイルの連結
Section titled “PEMファイルの連結”PEM形式では、複数の証明書を1つのファイルへ順番に連結できる。
-----BEGIN CERTIFICATE-----サーバー証明書-----END CERTIFICATE----------BEGIN CERTIFICATE-----Intermediate CA証明書-----END CERTIFICATE-----TLSサーバー製品では、サーバー証明書と Intermediate CA証明書 を連結したファイルを fullchain.pem などの名前で使用することがある。
連結する順序や Root CA を含めるかどうかは、使用するソフトウェアの仕様を確認する。
PKCS #8とTraditional形式
Section titled “PKCS #8とTraditional形式”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構造をテキスト化する形式。
OpenSSL公式ドキュメント
Section titled “OpenSSL公式ドキュメント”-
openssl-format-options OpenSSLコマンドで使用するPEM、DER、PKCS #12などの形式指定。
-
openssl-pkey 秘密鍵と公開鍵の入出力形式と変換。