すべての SSL 記事 SSL と証明書

SSL証明書フォーマット:PEM、PFX、DERの違い

SSL証明書と秘密鍵はいくつかのファイル形式で保存できます。内容は同じで、エンコーディングとパッケージングが異なります。ほとんどの混乱は、サーバーが特定の形式を必要とすることから生じます。

フォーマット比較

フォーマット拡張子エンコーディング含む内容使用される場所
PEM.pem, .crt, .cer, .keyBase64(テキスト)証明書、鍵、またはチェーン(ファイルごとに1つ)Nginx, Apache, ほとんどのLinuxサーバー
DER.der, .cerバイナリ単一の証明書または鍵Java, 一部のWindowsアプリ
PFX/PKCS#12.pfx, .p12バイナリ証明書 + 鍵 + チェーンを1ファイルにWindows IIS, Azure, macOS Keychain

PEM — 最も一般的なフォーマット

PEM(Privacy Enhanced Mail)はBase64エンコードされたテキストです。テキストエディタで開けます:

-----BEGIN CERTIFICATE-----
MIIFYjCCBEqgAwIBAgISA8ht...
(base64 encoded data)
-----END CERTIFICATE-----

PEMファイルには証明書、秘密鍵、または証明書チェーンを含めることができます。ヘッダーで中身がわかります:

  • BEGIN CERTIFICATE — 証明書
  • BEGIN PRIVATE KEY — 秘密鍵(またはBEGIN RSA PRIVATE KEY / BEGIN EC PRIVATE KEY
  • BEGIN CERTIFICATE REQUEST — CSR

GetHTTPSはPEM形式で出力しますprivkey.pemcert.pemchain.pemfullchain.pem

DER — バイナリエンコーディング

DERは、PEMがテキストとしてエンコードするのと同じデータのバイナリ形式です。人間には読めません。主にJavaアプリケーション(keytool)や一部のWindowsコンポーネントで使用されます。

PFX/PKCS#12 — バンドル形式

PFX(Personal Information Exchange)は証明書、秘密鍵、チェーンを1つのパスワード保護されたファイルにバンドルします。Windows IIS、Azure App Service、macOS Keychainがこの形式を必要とします。

フォーマット間の変換

すべての変換にOpenSSLを使用します:

PEM → PFX

openssl pkcs12 -export \
  -out certificate.pfx \
  -inkey privkey.pem \
  -in cert.pem \
  -certfile chain.pem

エクスポートパスワードの設定を求められます。

PFX → PEM

# 証明書を抽出
openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out cert.pem

# 秘密鍵を抽出
openssl pkcs12 -in certificate.pfx -nocerts -nodes -out privkey.pem

# チェーンを抽出
openssl pkcs12 -in certificate.pfx -cacerts -nokeys -out chain.pem

PEM → DER

openssl x509 -in cert.pem -outform DER -out cert.der

DER → PEM

openssl x509 -in cert.der -inform DER -outform PEM -out cert.pem

どのフォーマットが必要か?

サーバー/プラットフォームフォーマット必要なファイル
NginxPEMfullchain.pem + privkey.pem
ApachePEMcert.pem + chain.pem + privkey.pem
IIS(Windows)PFXcertificate.pfx(PEMから変換)
Azure App ServicePFXcertificate.pfx
AWS(ACM)PEMcert.pem + chain.pem + privkey.pem(コンソールに貼り付け)
Java(Tomcat)JKSまたはPFXPEM → PFX → JKSにkeytoolで変換
Node.jsPEMコードで直接ファイルを読み込み

ファイルのフォーマットを特定する方法

ファイルの形式がわからない場合の確認方法:

# "-----BEGIN"で始まるならPEM(base64テキスト)
head -1 mystery-file.pem

# バイナリ(文字化け)ならDERまたはPFX
file mystery-file.cer
# "data"や"certificate"と出力 = DER
# "PKCS12"と出力 = PFX

# PEM証明書を調査
openssl x509 -in cert.pem -noout -text

# DER証明書を調査
openssl x509 -in cert.der -inform DER -noout -text

# PFXファイルを調査
openssl pkcs12 -in cert.pfx -info -nokeys

よくあるファイル拡張子の混乱

拡張子通常の意味別の可能性
.pemPEM(base64)常にPEM
.crtPEM証明書WindowsではDER
.cerPEM証明書WindowsではDER
.keyPEM秘密鍵DER(まれ)
.pfxPKCS#12バンドル常にPFX
.p12PKCS#12バンドル常にPFX(.pfxと同じ)
.derDER(バイナリ)常にDER
.jksJava KeyStore常にJKS

経験則: テキストエディタでファイルを開いてください。-----BEGIN CERTIFICATE-----が見えればPEMです(拡張子に関係なく)。バイナリのゴミが見えればDERまたはPFXです。

よくある質問

.crt、.cer、.pemの違いは何ですか?

すべてPEM形式の場合があります。拡張子は命名規則であり、形式の指標ではありません。.crt.cerは証明書ファイルに一般的に使用され、.pemはPEMエンコードされたあらゆるファイルに使用されます。Windowsでは、.cerファイルがDERエンコードされている場合があります。テキストエディタで開いて確認してください。

GetHTTPSはなぜ4つのファイルをくれるのですか?

最大限の互換性のためです。GetHTTPSは以下を提供します:privkey.pem(秘密鍵)、cert.pem(証明書のみ)、chain.pem(中間認証局証明書)、fullchain.pem(証明書 + チェーンを結合)。Nginxfullchain.pemが必要で、Apacheは別々のcert.pem + chain.pemが必要で、IISはPFX(PEMから変換)が必要です。

Windows/IIS用のPFXを作成するにはどうすればいいですか?

上記のOpenSSL PEM → PFXコマンドを使用してください。GetHTTPSからのprivkey.pemcert.pemchain.pemが必要です。生成される.pfxIIS、Azure App Service、またはmacOS Keychainにインポートできます。

秘密鍵なしでフォーマット間の変換はできますか?

証明書はPEMとDER間で秘密鍵なしに変換できます。ただし、PFXの作成には秘密鍵が必要です(証明書 + 鍵をバンドルします)。秘密鍵を紛失した場合は、新しい証明書を生成する必要があります。

Let’s Encryptはどのフォーマットを使用しますか?

Let’s Encrypt(GetHTTPSを含むあらゆるACMEクライアント経由)はPEM形式で出力します。サーバーに別の形式が必要な場合は、上記のOpenSSLコマンドで変換してください。

関連記事

デプロイ 2026-05-08
NginxにSSL証明書をインストールする方法
NginxにSSL証明書をインストールするステップバイステップガイド。ファイルアップロード、完全なサーバーブロック設定、TLSベストプラクティス、HTTP/2、HSTS、リダイレクト設定、テスト、6つの一般的なエラーのトラブルシューティングを解説します。
デプロイ 2026-05-08
ApacheにSSL証明書をインストールする方法
mod_sslを使用したApacheへのSSL証明書インストールのステップバイステップガイド。ファイルアップロード、VirtualHost設定、TLSベストプラクティス、HSTS、HTTPリダイレクト、5つの一般的なエラーのトラブルシューティングを解説します。
SSL と証明書 2026-05-07
CSR(証明書署名要求)とは?
CSRはSSL証明書を申請するために認証局に送信するメッセージです。CSRの内容、生成方法、GetHTTPSが自動的に処理する理由を解説します。
ブラウザで無料 SSL 証明書を取得
インストール不要、アカウント不要。秘密鍵は常にデバイスに残ります。
証明書を取得