はじめに
この章では、本書の目的と読み方、対象者を分かりやすく示します。SSL/TLSで使われるPEMファイルについて、実務で役立つ知識を丁寧に伝えることを目指しています。
目的
PEMファイルの正体や役割、内部の構造、他形式との違い、運用上の注意点までを体系的に解説します。具体例を交えて、実際のサーバ設定や鍵管理に応用できる理解を促します。
対象読者
サーバ管理者、開発者、セキュリティ担当者、これから証明書運用を学ぶ技術者を想定しています。暗号の専門家でなくても理解できるように書いています。
本書の読み方
各章は独立して読めますが、順に読むと理解が深まります。第2章ではPEMの基本、第3章以降で中身や実務での扱い方を詳述します。実例やコマンド例は必要最小限に留め、概念の理解を優先します。
この先で具体的な内容に入ります。丁寧に一つずつ見ていきましょう。
PEMファイルとは何か
概要
PEMファイルは、証明書や秘密鍵、CA証明書などの暗号化データを保存するためのテキスト形式のファイルです。名前は「Privacy Enhanced Mail」に由来します。元々は安全なメールのために作られましたが、メール用途よりファイルフォーマットとして広く使われるようになりました。
主な特徴
- プレーンテキストで保存され、メモ帳などのテキストエディタで開けます。
- 中身はBase64でエンコードされたバイナリデータと、明示的なヘッダー/フッター行で構成されます。例:
- —–BEGIN CERTIFICATE—– … —–END CERTIFICATE—–
- —–BEGIN PRIVATE KEY—– … —–END PRIVATE KEY—–
- 1つのPEMファイルに複数の証明書や鍵を連結できます(チェーンやバンドルの形)。
なぜ使われるか(具体例)
- Webサーバー(Apache、Nginx)で証明書や鍵を指定するときに使います。
- opensslなどのツールで形式変換(PEM⇄DER)や署名確認が簡単にできます。
PEMは読みやすく取り扱いが簡単なため、多くの環境で標準的に採用されています。
PEMファイルの中身:何が入っているのか
概要
PEMはテキストベースの容器です。中には複数の「PEMブロック」が入ります。各ブロックは「—–BEGIN …—–」と「—–END …—–」で囲まれます。代表的な中身を以下で丁寧に説明します。
主な中身と意味
- X.509証明書(—–BEGIN CERTIFICATE—–)
- サーバやサービスの身元を示す証明書です。公開鍵や有効期限、発行者情報が含まれます。
- 秘密鍵(例:—–BEGIN RSA PRIVATE KEY—–)
- サーバが自分だけで持つ鍵です。署名や暗号化の復号に使います。決して公開しないでください。
- 公開鍵(—–BEGIN PUBLIC KEY—–)
- 秘密鍵に対応する鍵で、相手に渡して暗号や検証に使います。
- 中間CA・ルートCA証明書
- 発行元を遡るための連鎖(チェーン)です。複数の証明書を順に並べて格納できます。
- CSR(証明書署名要求)
- 証明書を発行してもらうための申請データです。
- CRL(証明書失効リスト)
- 失効した証明書の一覧で、運用の確認に使います。
ファイル内の構成例と注意点
- 同じ.pemでも、証明書だけ、証明書+中間証明書、または秘密鍵+証明書を1ファイルにまとめることがあります。複数ブロックは空行で区切られて連結保存されます。
- チェーンの順は重要です。一般にサーバ証明書を先頭に置き、その後に中間CAを並べます。ルートは通常省略することが多いです。
- 秘密鍵は厳重に管理してください。ファイル権限を制限し、必要ならパスフレーズを付けます。
ブロックの識別
- ファイルを見れば、BEGIN/END行で中身が判別できます。ツール(opensslなど)で形式や中身を確認すると安全に扱えます。
以上がPEMファイルに入る代表的な中身と扱い方の説明です。
PEMファイルのフォーマット構造
PEMファイルは見た目がテキストのため扱いやすいです。基本は「ヘッダー行」「Base64部分」「フッター行」の三つで構成されます。
- ヘッダー/フッター
- 例: —–BEGIN CERTIFICATE—– / —–END CERTIFICATE—–
-
ラベル部分(BEGIN … / END …)が中身の種類を示します。拡張子よりもこのラベルを優先して判断してください。
-
Base64でエンコードされた本体
-
バイナリを64文字程度の行長でBase64に変換したものが並びます。実装により行長は前後しますが、64文字が一般的です。
-
追加ヘッダー(鍵が暗号化されている場合など)
- 例: Proc-Type: 4,ENCRYPTED や DEK-Info: DES-EDE3-CBC,0123456789ABCDEF
-
これらはヘッダー行とBase64の間に置かれます。
-
複数ブロックの併置
-
証明書チェーンや鍵+証明書などを1ファイルに並べることができます。各ブロックのBEGIN/ENDで区切られます。
-
注意点
- BEGIN/ENDのラベルが最も重要です。ファイル名や拡張子に頼らず、ラベルで処理してください。
- 改行コードはLFやCRLFの両方が使われますが、多くのツールが両方を扱えます。
この構造を理解すると、手で確認したり、ツールで正しく扱ったりしやすくなります。
PEMファイルと他形式(DER, PFX など)の違い
短い概要
PEM、DER、PFX(PKCS#12)は同じ証明書や鍵を扱いますが、表現方法や用途が異なります。選び方は運用環境や配布方法で決まります。
フォーマットの違い
- PEM: テキスト形式(Base64)で、—–BEGIN/END—–というヘッダ付きです。証明書・秘密鍵・CSR・CRLを単体または連結して保存できます。
- DER: バイナリ形式で、主に単一のX.509証明書を扱います。テキストではないためそのまま読めません。
- PFX/PKCS#12: バイナリのコンテナ形式で、証明書・秘密鍵・チェーンをまとめて暗号化して格納できます。
拡張子と主な用途
- PEM: .pem, .crt, .cer — Linux/Apache/Nginx、Kubernetes、クラウド設定でよく使われます。
- DER: .der — Windowsや一部機器向けの証明書配布に使われます。
- PFX: .pfx, .p12 — Windows/IISやブラウザへのインポート、鍵を含む配布に向きます。
互換性と変換の例
PEMとDERは同じX.509データを異なるエンコードで表しているだけなので、OpenSSLで相互変換できます。例:
– PEM → DER: openssl x509 -outform der -in cert.pem -out cert.der
– PEM(鍵+証明書)→ PFX: openssl pkcs12 -export -out cert.pfx -inkey key.pem -in cert.pem -certfile chain.pem
使い分けの目安
Linux系やサーバ設定ではPEMが扱いやすく、Windows環境やエンドユーザへの配布ではPFXやDERが便利です。運用で秘密鍵を安全に扱いたい場合はPFXなどの暗号化コンテナを検討してください。
SSL/TLSにおけるPEMファイルの役割
証明書の提示
WebサーバはTLSハンドシェイクでクライアントに自分のサーバ証明書を渡します。多くの場合、この証明書はPEM形式のX.509ファイルです。クライアントは証明書を検証して、提示されたドメイン名や発行者の情報が正しいかを確認します。
証明書チェーンの管理
中間CAやルートCAとつながる証明書チェーンもPEMで保存します。サーバ設定ではchain.pemやfullchain.pemのように連結したファイルを指定し、クライアントが信頼の経路を辿れるようにします。例として、fullchain.pemはサーバ証明書と中間証明書をまとめたファイルです。
秘密鍵の役割
サーバは秘密鍵(通常はprivkey.pem)を使ってハンドシェイクの一部を署名したり、暗号化された情報を復号したりします。秘密鍵は絶対に公開してはいけません。ファイルのパーミッションを制限し、安全に保管してください。
サーバ設定と運用の例
Apacheやnginx、ロードバランサやメールサーバなどでPEMファイルを指定してTLSを有効にします。場合によっては証明書と鍵を一つのPEMに結合することもあります。自動更新を行う環境では、更新後にサーバを再読み込みして新しいPEMを読み込ませます。
注意点(権限とバックアップ)
秘密鍵は厳重に管理し、必要最小限のユーザだけが読めるようにします。バックアップは暗号化して保管し、鍵が漏れた場合は速やかに証明書を失効させて再発行してください。












