| この記事の要点 |
|
概要
PEM や CRT 単体では証明書と秘密鍵を別ファイルで扱う必要があり、配布や移行で「片方だけ送ってしまった」「鍵が漏れた」といった事故が起きやすい。PKCS#12 (RFC 7292) はこの問題を解決するために、X.509 証明書チェーンと秘密鍵を一括バイナリ化し、パスフレーズで暗号化する形式として定められた。
Microsoft が早期から PFX として採用したため Windows ファミリーでは事実上の標準で、IIS の証明書バインドや Authenticode 署名鍵 (signtool の /f 引数) はほぼ PFX を要求する。Java の PKCS12 キーストアや Kubernetes Ingress Controller の一部、Citrix / F5 アプライアンスでも採用される。
内部構造
PKCS#12 は ASN.1 構造で、外側に MAC (Message Authentication Code) を伴う「AuthSafe」があり、その中に複数の SafeBag (CertBag / KeyBag / ShroudedKeyBag など) が並ぶ。秘密鍵を保持する KeyBag は PBE (Password-Based Encryption)で暗号化される。歴史的に使われた pbeWithSHAAnd3-KeyTripleDES-CBC + RC2 のレガシー暗号と、近年の AES-256-CBC + PBKDF2 の 2 系統があり、古い OS (Windows Server 2008 R2 等) との互換性で問題が起きやすい。
ファイル全体は冒頭から DER バイナリで、テキストで読むことはできない。中身を確認するには OpenSSL の -info オプションを使うのが定番。
主な用途
- IIS への証明書インストール: 「証明書のインポート」で .pfx を選び、パスワードを入れてバインドするのが基本フロー。
- コード署名証明書の保管: EV コード署名以外は PFX で配布されることが多い。
signtool sign /f mycode.pfx。 - ロードバランサ / WAF へのアップロード: Azure Application Gateway、AWS ALB の一部、F5 BIG-IP など。
- S/MIME メール鍵の個人エクスポート: Outlook や Apple Mail の鍵バックアップ。
関連形式との比較
- PEM: テキスト、複数ファイルに分けがち、パスワード保護は鍵のみ任意。
- JKS (Java KeyStore): Java 独自バイナリ。JDK 9 以降は PKCS12 がデフォルトに変更され、JKS は徐々に縮小。
- P7B (.p7b): 証明書チェーンのみで秘密鍵は含まない。PKCS#12 と混同しがちだが用途が異なる。
- BKS (Bouncy Castle): Android 旧版で使われた独自形式。最近はあまり見ない。
コマンド・ツール
# PEM 群 (証明書 + 秘密鍵 + 中間 CA) を PFX にまとめる
openssl pkcs12 -export \
-inkey key.pem \
-in cert.pem \
-certfile chain.pem \
-name "myserver" \
-out bundle.pfx
# PFX を分解 (証明書と鍵を別 PEM へ)
openssl pkcs12 -in bundle.pfx -clcerts -nokeys -out cert.pem
openssl pkcs12 -in bundle.pfx -nocerts -nodes -out key.pem
# 中身の確認 (パスフレーズ要求)
openssl pkcs12 -in bundle.pfx -info -nodes
# Windows (PowerShell) で証明書ストアへ
Import-PfxCertificate -FilePath bundle.pfx `
-CertStoreLocation Cert:\LocalMachine\My `
-Password (Read-Host -AsSecureString)
# Java keystore (PKCS12) に変換
keytool -importkeystore -srckeystore bundle.pfx \
-srcstoretype PKCS12 \
-destkeystore mykeystore.p12 \
-deststoretype PKCS12
注意点
- パスフレーズの強度: PFX は鍵入りなので漏洩リスクが大きい。8 文字未満や弱い辞書語は避け、配布もパスフレーズと別経路で。
- レガシー暗号互換性: OpenSSL 3.x はデフォルト暗号が AES に変わり、古い Windows / Java で読めない事故が頻発。互換性が要るときは
-legacyや-keypbe/-certpbeを明示。 - Authenticode の HSM 化: 2023 年以降の OV/EV コード署名は PFX 配布が原則禁止になり、トークン or クラウド HSM に移行。新規調達時は要確認。
- エクスポート可能フラグ: Windows で「秘密キーをエクスポート可能にする」を忘れると、後で PFX に戻せず鍵をロストする。
- バックアップ: PFX は単独でサーバ復旧の鍵そのもの。漏洩対策とロスト対策を両立する保管設計が必要。
関連リンク
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15