pfx形式のSSL証明書をpem形式に変換する

概要

  • 今回はなぜかSSL証明書がpfx形式で提供されたため、pem形式に変換して使用した経験を元に記事をまとめます。
  • pfx形式とは、秘密鍵(パスワード保護)と証明書が単一のファイルとして格納されているSSL証明書のアーカイブとなります。ルート証明書や中間証明書も一緒に格納できます。標準仕様としては「PKCS #12」に相当。
  • pfx形式のSSL証明書は、主にMicrosoftのサービス(AzureやIIS、SQL Serverなど)で使用することが多い。一方、pem形式のSSL証明書は、AWSのACMにインポートする場合やLinuxのApache、NginxなどのWebサーバーで使用します。
 

pfxファイルからpem形式のサーバー証明書を取り出す

  • 下記opensslコマンドを使用して、サーバー証明書を取り出します。
    • openssl pkcs12 -in <pfxファイル名> -clcerts -nokeys -out <任意のサーバー証明書ファイル名>
    • コマンド入力時に、パスフレーズの入力が必要となります。pfxファイルをエクスポートする際に設定したパスフレーズを入力します。
    • pem形式の証明書は、
      -----BEGIN CERTIFICATE-----
      から始まり、
      -----END CERTIFICATE-----
      で終わります。

niikawa@niikawa1:~$ openssl pkcs12 -in sample.com.pfx -clcerts -nokeys -out sample.com_servercert.pem.cer
Enter Import Password:
   

pfxファイルからpem形式のCA証明書を取り出す

  • 下記opensslコマンドを使用します。
    • openssl pkcs12 -in <pfxファイル名> -cacerts -nokeys -out <任意のCA証明書ファイル名>
    • コマンド入力時に、パスフレーズの入力が必要となります。pfxファイルをエクスポートする際に設定したパスフレーズを入力します。
    • pem形式の証明書は、
      -----BEGIN CERTIFICATE-----
      から始まり、
      -----END CERTIFICATE-----
      で終わります。

niikawa@niikawa1:~$ openssl pkcs12 -in sample.com.pfx -cacerts -nokeys -out sample.com_cacert.pem.cer
Enter Import Password:
 

証明書の見方

  • 下記opensslコマンドを使用して、サーバー証明書 or CA証明書を確認します。
    • openssl x509 -text -noout -in <証明書ファイル名>
  • 証明書を確認する際の基本的なポイントは、下記の通りです。
    • Version(バージョン)
    • Serial Number(シリアル番号)
    • Issuer(発行者)
    • Validity(有効期間の開始と満了)
    • Subject(主体者)
    • Subject Public Key Info(主体者の公開鍵アルゴリズム、主体者の公開鍵)
  • また、X509v3 extensionsセクションのBasic ConstraintsにあるCA属性を確認することで、サーバー証明書かCA証明書かを判断します。CA属性は、下記の通り。
    • CA:FALSE → サーバー証明書
    • CA:TRUE → CA証明書
  • opensslコマンドのサンプルはこちらを参照。
 

pfxファイルからpem形式の秘密鍵を取り出す

  • 下記opensslコマンドを使用します。(秘密鍵ファイルの暗号化あり)
    • openssl pkcs12 -in <pfxファイル名> -nocerts -out <任意の秘密鍵ファイル名>
    • コマンド入力時に、パスフレーズの入力が必要となります。pfxファイルをエクスポートする際に設定したパスフレーズを入力します。
    • 暗号化されている秘密鍵ファイルは、
      -----BEGIN ENCRYPTED PRIVATE KEY-----
      から始まり、
      -----END ENCRYPTED PRIVATE KEY-----
      で終わります。

niikawa@niikawa1:~$ openssl pkcs12 -in sample.com.pfx -nocerts -out sample.com.key
Enter Import Password:
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
 
  • 下記opensslコマンドを使用します。(秘密鍵ファイルの暗号化なし)
    • openssl pkcs12 -in <pfxファイル名> -nocerts -nodes -out <任意の秘密鍵ファイル名>
    • コマンド入力時に、パスフレーズの入力が必要となります。pfxファイルをエクスポートする際に設定したパスフレーズを入力します。
    • 暗号化されていない秘密鍵ファイルは、
      -----BEGIN PRIVATE KEY-----
      から始まり、
      -----END PRIVATE KEY-----
      で終わります。

niikawa@niikawa1:~$ openssl pkcs12 -in sample.com.pfx -nocerts -nodes -out sample.com.key
Enter Import Password:
 

関連情報