この Topic では、一般的な証明書ファイル形式と関連する概念について説明します。フォーマットを識別し、一般的な Web サーバーに適したものを選択し、すぐに使用できるコマンドを使用してフォーマット間で変換する方法について説明します。
一般的な証明書ファイル形式
サーバーによって必要な証明書のフォーマットは異なります。詳細については、「主要な Web サーバーの証明書フォーマットの選択」をご参照ください。Certificate Management Service コンソールで証明書を購入して発行した後、サーバーで必要なフォーマットの証明書ファイルをダウンロードします。詳細については、「SSL 証明書のダウンロード」をご参照ください。
ファイル拡張子 | コンテンツフォーマット | 説明 |
| テキスト形式 (PEM) | 一般的な拡張子です。証明書、秘密鍵、証明書チェーン、またはそれらの組み合わせを格納できます。ファイル内の BEGIN/END マーカーを確認して、その特定のコンテンツを判断します。 |
| テキスト形式 (PEM) またはバイナリ形式 (DER) | 通常、秘密鍵ファイルを格納します。 |
| テキスト形式 (PEM) またはバイナリ形式 (DER) | 通常、証明書 (公開鍵と ID 情報) のみを含み、秘密鍵は含みません。単一のサーバー証明書、または中間証明書を含む証明書チェーンファイルの場合があります。 |
| バイナリ形式 (PKCS#12) | サーバー証明書、秘密鍵、証明書チェーンを 1 つのファイルに含めることができます。このフォーマットは通常、パスワードで保護されています。 |
| バイナリ形式 (JKS) | Java Keystore 独自のフォーマットで、キーエントリ (秘密鍵と証明書チェーン) と信頼エントリ (CA 証明書) を格納するために使用されます。Java 9 以降、PKCS#12 がデフォルトの推奨フォーマットになりました。 |
主要な Web サーバーの証明書フォーマットの選択
サーバーの種類 | 推奨フォーマット | 必要なファイル | 説明 |
Nginx, Apache | PEM | 証明書ファイル ( | 証明書ファイルと秘密鍵ファイルには個別の構成が必要です。証明書ファイルは、サーバー証明書とすべての中間証明書を含む完全な証明書チェーンである必要があります。 |
Tomcat, JBoss, WebLogic | PFX/P12 (PKCS#12) | キーストアファイル ( | Java アプリケーションサーバーには、標準の PKCS#12 フォーマットが推奨されます。従来の JKS フォーマットをまだ使用している場合は、PKCS#12 に移行してください。 |
IIS | PFX | キーストアファイル ( | Windows IIS サーバーの標準フォーマットです。パスワードで保護された PFX ファイルをインポートして、証明書と秘密鍵をデプロイします。 |
IBM WebSphere | KDB | キーストアファイル ( | 公式の IBM |
Nginx と Apache の場合、認証局 (CA) が別の中間証明書ファイルを提供している場合は、サーバー証明書と中間証明書を組み合わせて、デプロイメント前に完全なチェーンファイルを作成します。通常、ルート CA 証明書を含める必要はありません。サーバー証明書と中間証明書のみを連結します。
# Linux または macOS ターミナルで実行します。
cat server.crt chain.crt > fullchain.crtSSL 証明書ファイルに関連する概念
SSL 証明書ファイルには、次の 4 つのコア概念が含まれます。
証明書のコンポーネント: 安全な SSL 通信を構成するコア要素。
SSL 証明書: ドメイン名、公開鍵、発行者、有効期間などの情報を含む ID 資格情報。
秘密鍵: 証明書内の公開鍵とキーペアを形成します。身分認証と暗号化通信に使用されます。秘密鍵は厳重に機密扱いにする必要があります。
証明書チェーン: サーバー証明書からルート CA 証明書までの完全な信頼パス。1 つ以上の中間 CA 証明書が含まれます。
エンコーディングメソッド: コンテンツをデータストリームにシリアル化するメソッド。
Privacy-Enhanced Mail (PEM): Base64 エンコーディングを使用し、
-----BEGIN...-----と-----END...-----マーカーで囲まれたテキスト形式。PEM ファイルには、証明書、秘密鍵、またはその両方の組み合わせを含めることができます。Distinguished Encoding Rules (DER): バイナリ形式。ASN.1 のバイナリエンコーディングです。PEM は、BEGIN/END マーカーを持つ Base64 エンコードされた DER データのテキストベースのカプセル化です。DER ファイルは PEM ファイルよりも小さいですが、テキストエディターで簡単に読み取ることはできません。
コンテナフォーマット: 1 つ以上の証明書コンポーネントをバンドルするための標準。
PFX / P12 (PKCS#12): バイナリ形式の証明書ストア。サーバー証明書、秘密鍵、中間証明書チェーンを 1 つのパスワードで保護された暗号化ファイルにバンドルします。これは、デプロイメントを合理化するため、サーバー間 (特に Windows IIS) で証明書を移行する場合や、Java アプリケーションサーバーに証明書を提供する場合に推奨されるフォーマットです。
JKS (Java Keystore): Java 固有の証明書ストアフォーマット。一部のレガシー Java アプリケーションではまだ使用されていますが、業界では現在、より汎用的な PKCS#12 フォーマットの使用を推奨しています。
ファイル名拡張子:
.pem、.crt、.key、.pfxなどのファイルのサフィックス。説明ファイル名拡張子は単なる命名規則であり、ファイルのエンコーディングを確実に示すものではありません。たとえば、
.crtファイルは PEM エンコードまたは DER エンコードのいずれかです。ファイルの内容を調べて、実際のフォーマットを判断してください。
証明書ファイル形式を識別する方法
デプロイメントの前に、これらのメソッドを使用して証明書ファイル形式を識別し、デプロイメントの失敗を防ぎます。
テキストコンテンツによる識別 (PEM 形式)
テキストエディターでファイルを開きます。次のフォーマットの ASCII ブロックが表示された場合、ファイルは PEM エンコードされています。そうでない場合は、OpenSSL ツールを使用してフォーマットを識別します。
-----BEGIN CERTIFICATE-----
MIIE5zCCA8+gAwIBAgIQN+whYc2BgzAogau0dc3PtzANBgkqh......
-----END CERTIFICATE-----一般的なマーカーは次のとおりです。
-----BEGIN CERTIFICATE-----: 証明書ファイル。-----BEGIN PRIVATE KEY-----または-----BEGIN RSA PRIVATE KEY-----: 秘密鍵ファイル。-----BEGIN ENCRYPTED PRIVATE KEY-----: 暗号化された秘密鍵ファイル。-----BEGIN EC PRIVATE KEY-----: 楕円曲線 (EC) 秘密鍵ファイル。
OpenSSL ツールを使用した識別
テキストエディターで読み取れないバイナリファイルの場合、または詳細情報を取得する必要がある場合は、OpenSSL コマンドラインツールを使用してフォーマットを識別します。
PEM 形式の証明書ファイルを識別します。
ファイルの内容が-----BEGIN CERTIFICATE-----で始まる場合、それは PEM エンコードされた証明書です。# PEM 証明書の詳細を表示 openssl x509 -in certificate.crt -noout -textPEM 形式の秘密鍵ファイルを識別します。
ファイルの内容が-----BEGIN PRIVATE KEY-----、-----BEGIN RSA PRIVATE KEY-----、-----BEGIN ENCRYPTED PRIVATE KEY-----、または-----BEGIN EC PRIVATE KEY-----で始まる場合、それは PEM エンコードされた秘密鍵です。# PEM 秘密鍵の詳細を表示 openssl pkey -in private.key -noout -textPFX/P12 証明書ストアを識別します。
これは、証明書と秘密鍵の両方を含むバイナリ形式です。# PFX ファイルの内容を表示します。パスワードの入力を求められます。 openssl pkcs12 -in keystore.pfx -info -nooutDER 形式の証明書を識別します。
DER は証明書のバイナリエンコーディング形式です。ファイルはテキストエディターで読み取ることはできません。Java アプリケーション、モバイルプラットフォーム、および Windows 証明書ストアで一般的に使用されます。
# DER 証明書の詳細を表示 openssl x509 -in certificate.der -inform der -noout -text
証明書フォーマットの変換
証明書フォーマットは 2 つの方法で変換できます。
Certificate Management Service の変換ツールを使用する: このサービスは、PEM、PFX、JKS などのフォーマット間の迅速な変換をサポートする便利な証明書ツールを提供し、コマンドライン操作は不要です。
OpenSSL コマンドラインツールを使用する: OpenSSL は最も汎用性の高い証明書処理ツールです。すべてのオペレーティングシステムで利用でき、高度にカスタマイズ可能な変換オプションを提供します。
Certificate Management Service の変換ツールを使用する
Alibaba Cloud Certificate Management Service は、SSL 証明書フォーマット変換ツールを提供します。PEM と PFX、PEM と JKS、および PEM と PKCS8 フォーマット間の変換をサポートしています。詳細については、「証明書ツール」をご参照ください。
OpenSSL コマンドラインツールを使用する
PEM を PFX に変換 (IIS、Tomcat 用)
このコマンドは、証明書ファイル (
.crt)、秘密鍵ファイル (.key)、およびオプションの証明書チェーンファイルを 1 つのパスワードで保護された PFX ファイルに結合します。# サーバー証明書と秘密鍵しかない場合は、このコマンドを実行します。 openssl pkcs12 -export -out server.pfx -inkey private.key -in server.crt # 完全な証明書チェーンがある場合は、このコマンドを実行します。 openssl pkcs12 -export -out server.pfx -inkey private.key -in server.crt -certfile chain.crtPFX を PEM に分割 (Nginx、Apache 用)
このコマンドは、PFX ファイルから証明書 (証明書チェーンを含む) と秘密鍵を抽出し、個別の PEM ファイルを生成します。
# 1. パスワードで保護された秘密鍵を抽出します。 openssl pkcs12 -in server.pfx -nocerts -out server.encrypted.key # 2. サーバーのリーフ証明書を抽出します (CA チェーンなし)。 openssl pkcs12 -in server.pfx -clcerts -nokeys -out server.crt # 3. 中間 CA 証明書を抽出します (注: ルート CA 証明書は通常不要です)。 openssl pkcs12 -in server.pfx -cacerts -nokeys -out chain.crt # 4. (オプション) Nginx または Apache の非対話型起動のために、秘密鍵からパスワード保護を解除します。 openssl pkey -in server.encrypted.key -out private.key # 5. (オプション) ファイルを連結して、Nginx または Apache 用の完全な証明書チェーンファイルを作成します # 順序: 最初にサーバー証明書、次いで中間証明書 (複数ある場合は順に追加) # 注: chain.crt が存在しない場合 (PFX ファイルに中間証明書がない場合)、このステップはスキップします。 cat server.crt chain.crt > fullchain.crt説明最終的な
private.keyファイルはパスワード保護のない秘密鍵であり、サーバー構成で直接使用できます。そのファイル権限が厳密に管理されていることを確認してください (たとえば、ファイル所有者に読み取り専用アクセスを許可するためにchmod 400 private.keyを実行します)。証明書チェーンが存在し、ファイルを連結して完全な証明書チェーンファイルを作成した場合は、デプロイメントに次の設定を使用します。
Nginx:
ssl_certificateをfullchain.crtファイルのパスに設定し、ssl_certificate_keyをprivate.keyファイルのパスに設定します。Apache:
SSLCertificateFileをfullchain.crtファイルのパスに設定し (Apache 2.4.8 以降)、SSLCertificateKeyFileをprivate.keyファイルのパスに設定します。Apache 2.4.8 より前のバージョンでは、SSLCertificateChainFileディレクティブで中間証明書チェーンを個別に構成する必要があります。
DER と PEM の間の変換
DER と PEM は、それぞれ ASN.1 のバイナリエンコーディングと、
BEGIN/ENDマーカーを持つ DER の Base64 エンコードバージョンです。それらの内容は同じですが、エンコーディングが異なります。# DER を PEM に変換 openssl x509 -inform der -in certificate.cer -out certificate.pem # PEM を DER に変換 openssl x509 -inform pem -in certificate.pem -outform der -out certificate.derJKS を PFX/P12 に変換 (推奨される移行パス) レガシーの JKS Keystore を使用している場合は、Java の
keytoolユーティリティを使用して、より汎用的な PFX/P12 フォーマットに変換します。keytool -importkeystore -srckeystore keystore.jks -srcstoretype JKS -destkeystore keystore.p12 -deststoretype PKCS12説明このコマンドは、
keystore.jksから新しいkeystore.p12ファイルにすべてのエントリを移行します。特定のエントリのみを移行したい場合は、-srcalias "your_alias"と-destalias "your_alias"パラメーターを追加できます。プロセス中に、宛先キーストア (PFX/P12) とソースキーストア (JKS) のパスワードを入力するように求められます。