Windows版OpenSSLを使用してpfxファイルから秘密鍵を取り出す方法

サーバ・ネットワーク
スポンサーリンク

Windows ServerでSSL証明書をインストールした場合、一般的な手順では、インストールした証明書のバックアップ(エクスポート)を取ることが推奨されます。
バックアップをすると、pfxという拡張子のファイルが出力され、そのファイルには、SSL証明書や中間証明書、秘密鍵などが格納され、サーバーを移行する場合などは、このpfxファイルを移行先サーバーでインポートすることで簡単に証明書関連のデータも移行することができます。

ただ、移行先のサーバーがWindows系サーバーであれば問題は無いのですが、Linux系サーバーの場合は、このpfxファイルのままでは扱えません
LinuxでSSL証明書をApacheなどに読み込ませるには、秘密鍵ファイルも読み込ませる必要があり、このpfxファイルに含まれる秘密鍵をファイルとして出力してあげる必要があります。

そこで今回は、Windows環境でpfxファイルから秘密鍵を取り出す方法を紹介します。

pfxファイルから秘密鍵を取り出す手順

当項では、pfxファイルから秘密鍵を取り出す手順を紹介していきます。
尚、前提として、pfxファイルから秘密鍵を取り出す作業はWindows10やWindows7などのWindows環境で実施する想定です。
また、当作業では、Windows版の「OpenSSL」を使用して実施する為、対象のWindows端末に「OpenSSL」をインストールする必要があります。

Windows版OpenSSLのダウンロードとインストール

LinuxではSSL証明書などを扱う際や暗号化の処理などの場合には「OpenSSL」というソフトを使用することが一般的です。
ただ、Windowsでは標準ではOpenSSLはインストールされていません。
今回紹介する作業では、OpenSSLの機能を利用して秘密鍵を取り出す為、Windows端末にOpenSSLをインストールして頂く必要があります。

まずは以下のリンク先からOpenSSLのインストーラーをダウンロードします。

Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions

対象ページ内の見出し「Download Win32/Win64 OpenSSL」にインストーラーのダウンロードリンクがあり、インストーラーはいくつかありますが、使用している端末がWindowsの64bitであれば、「Win64 OpenSSL v1.1.1i Light」のMSI形式ファイルをダウンロードしてください。

このファイルをダウンロードし、インストールまで実施してください。
尚、インストールが完了すると、寄付金額を選択する画面が表示されますが、寄付金額を選択するチェックボックスはすべて外してその画面を終わらせることができるのでご安心ください。※もちろん寄付までして頂いても結構ですが。

OpenSSLのインストール先パスを環境変数を登録

インストールすれば、OpenSSLはすぐに使用することができますが、OpenSSLはコマンドラインで操作する為、インストールしたままの状態だと、コマンドプロンプトでOpenSSLのインストール先までカレントディレクトリを移動して操作するか、インストール先パスを含んだ実行ファイルを指定してコマンドを入力する必要があり、若干面倒です。
その為、OpenSSLのインストール先パスをWindowsの環境変数に登録しておきます。

まず、Windowsの「システムのプロパティ」を表示して、「詳細設定」タブ内の「環境変数」ボタンを押下します。

登録されている環境変数を表示する画面が開きます。
この画面の下部の「システム環境変数」の枠内の変数名「Path」の行をクリックして選択したうえで、画面下部の「編集」を押下します。

「環境変数名の編集」画面が開きます。
この画面の右側の「新規」ボタンを押下すると、画面中央のリストが入力可能な状態になるため、OpenSSLをインストールしたパスを入力してください。
その際には、インストール先直下のディレクトリまでではなく、binフォルダまで指定してください。

これでPathの登録は完了です。
この登録をしておくことで、コマンドプロンプトを起動して、OpenSSL と入力するだけで、OpenSSLの実行ファイルを直接指定することができます。

コマンドプロンプトを起動してコマンドを実行

秘密鍵を抜き出したいpfxファイルを用意して、OpenSSLにファイル名などの引数を渡して実行します。

今回はpfxファイルから秘密鍵だけを抜き出したい為、実行するコマンドの構文は以下のようになります。

秘密鍵を抜き出すコマンドの構文

openssl pkcs12 -in “pfxファイルのファイル名” -nocerts -nodes -out “秘密鍵ファイルの出力先”

具体的なコマンド実行例は以下です。

openssl pkcs12 -in "c:\www.example.com.pfx" -nocerts -nodes -out "c:\www.example.com.key"

このコマンドを実行すると、もしpfxファイルにパスワードが設定されていた場合は、コマンドプロンプト内でパスワードの入力が求められる為、パスワードを入力します。
pfxファイルでパスワードを設定していなければ、即座に秘密鍵ファイルが出力されます。

尚、上記コマンドのオプションとして “-nocerts” と指定していることからわかるように、秘密鍵だけではなく、SSL証明書などの出力も可能です。
当記事では紹介しませんが、もし必要であれば調べてみてください。

最後に

今回はWindows端末でpfxファイルから秘密鍵を抜き出す方法を紹介しました。
因みにLinux環境でOpenSSLがインストールされていれば、同じように秘密鍵を抜き出すことは可能です。
ただ、慣れているWindows環境下で作業するほうが不安も少ないかと思うので、SSL証明書の入れ替えやサーバー移行などの作業が今後発生しそうな場合は、Windowsの自端末にOpenSSLを予めインストールしておくと良いかと思います。

今回も読んで頂きましてありがとうございました。
また次回もよろしくお願いいたします。
※アイキャッチの画像はPete LinforthによるPixabayからの画像を利用させて頂いています。