Client VPN の証明書を Windows で作成してみた (vpnux PKI Manager 編)
みなさま Xin chao !
今回は、AWS Client VPN で使用するサーバー証明書を、OpenVPN.JP のサイトで紹介されている vpnux PKI Manager で作成してみます。 この方法の良いところは、GUI の操作のみで証明書を作成できることにあります。 Windows OS をメインでお使いになっている環境では、CLI での運用に馴染みが薄い場合もあるかと思いますが、vpnux PKI Manager であれば、Windows OS 同様に GUI による操作で証明書を作成できます。
Windows OS を使っているけれど CLI でも問題ないという場合は、EasyRSA 2 での方法もご覧ください。
やってみた
環境
今回は、以下の環境で試しています。
接続元 PC の OS | Windows Server 2019 (EC2) ※ Windows 10 Pro バージョン 1909 でも接続を確認済みです |
VPN クライアントアプリケーション | OpenVPN クライアント 2.4.9 |
認証方式 | 相互認証 (=クライアント証明書) |
証明書作成環境 | Windows Server 2019 (EC2) + vpnux PKI Manager 2014.06.19 |
クライアント証明書の保存先 | Windows 証明書ストア |
接続元 PC の利用者 | ローカル管理者権限なし (=ローカルの Users グループに所属) |
事前準備
証明書の作成に使用する vpnux PKI Manager をダウンロードし、証明書発行環境にコピーしておきます。 また、OpenVPN クライアントをダウンロードし、接続元 PC にコピーしておきます。
いずれも以下のサイトよりダウンロード可能です (vpnux PKI Manager : vpnuxPKIManager.zip, OpenVPN クライアント : Windowsインストーラ Windows10用)。 vpnux PKI Manager は ZIP 形式で圧縮されていますので、事前に解凍しておきましょう。
vpnux PKI Manager のインストール
.NET Framework 3.5 のインストール
vpnux PKI Manager を使うには .NET Framework 3.5 (.NET 2.0 および .NET 3.0 を含む) が必要になりますので、インストールします。
証明書作成環境となる Windows Server 2019 上で、[スタート] メニューから [サーバー マネージャー] を起動し、"役割と機能の追加" をクリック → "役割ベースまたは機能ベースのインストール" → インストール対象のサーバーを選択 → "サーバーの役割の選択" (何も変更しない) → "機能の選択" で ".NET Framework 3.5 Features" を選択 → [インストール] と進めてインストールを行います。
vpnux PKI Manager のインストール
インストーラー等はありませんので、事前にダウンロード・解凍済みのファイルを、証明書作成環境となる Windows Server 2019 上の適当なフォルダにコピーするのみです。
以降の手順では、新しく作成した C:\vpnuxPKIManager フォルダにコピーしたことを前提に進めます。
証明書の作成
CA の構築
フォルダにコピーした vpnuxPKI.exe を実行します。 すると、"[ファイル] - [新規] で最初に CA を構築してください。" と表示されるので [OK] をクリックします。
最初のメッセージに従い、[CA の新規作成] をクリック、または、[ファイル] - [新規] をクリックします。
"CA 構築には時間がかかることがあります。 開始してよろしいですか?" と表示されるので、[はい] をクックします。
CA のデータファイルを保存するフォルダ 兼 今後作成する証明書を保存するフォルダを選択します。 以降の手順では、新しく作成した C:\CA フォルダを選択したことを前提に進めます。
"保存先ディレクトリ xxx にあるファイルはすべて削除されます。 よろしいですか?" と訊かれるので、特に既存のフォルダを選択した場合には、事前にフォルダの内容を確認したうえで [はい] をクリックします。
必要に応じて、必須項目 (国名コード, 都道府県, 組織名, 共通名) を半角英数字で入力し、[CA 証明書作成] をクリックします。
(入力前)
(入力後)
CA の構築が始まりました。
CA の構築中は CPU 使用率が高くなりましたので、既存のサーバーで実行する場合は、サーバーで提供している他の機能への影響にご注意ください。
今回の環境では 2~3 分で完了しました。
[OK] をクリックすると、証明書が作成されたフォルダの内容が表示されます。
CA 証明書の有効期限を確認すると、10 年 (=3,650 日) になっていました。
サーバー証明書の作成
[サーバー用 秘密鍵/証明書] をクリックします。
これから作成しようとしているサーバー証明書が、Client VPN で使用しているものであると分かりやすいような共通名 (=Common Name) を入力し、[証明書作成] をクリックします。 Client VPN で使用する証明書の場合、任意の共通名で問題ないため、今回は実在しないドメイン名を指定しました。 vpnux PKI Manager の既定値のままでも構いません。
今回試した環境では、数秒で作成されました。 証明書を保存するフォルダーに、サーバー証明書と秘密鍵が作成されています。
サーバー証明書の有効期限を確認すると、10 年 (=3,650 日) になっていました。
クライアント証明書の作成
[クライアント用 秘密鍵/証明書] をクリックします。
画面の注意書きにある通り、この CA 内で固有の共通名 (=Common Name) を入力し、[証明書作成] をクリックします。 Client VPN クライアントごとにクライアント証明書を配布する運用を想定した場合、分かりやすさを重視するのであれば、クライアントのコンピューター名や資産管理番号など、共通名から Client VPN クライアントを推測できるような名前が良さそうです。
今回試した環境では、数秒で作成されました。 証明書を保存するフォルダーに、クライアント証明書と秘密鍵が作成されています。
クライアント証明書の有効期限を確認すると、サーバー証明書と同様に 10 年 (=3,650 日) になっていました。
作成したサーバー証明書 (server.masawo-cvpn.corp.crt), サーバー秘密鍵 (server.masawo-cvpn.corp.key), CA 証明書 (ca.crt) の各ファイルは、以降の手順で使用するので、AWS マネジメントコンソールを使用する端末にコピーしておきます。
クライアント証明書を PKCS #12 形式に変換
今回はクライアント証明書を証明書ストアにインポートして使用するため、PKCS #12 形式 (.pfx) に変換します。 vpnux PKI Manager をコピーしたフォルダに openssl.exe があったので、それを使って変換を行います。
残念ながら、この部分だけは CLI での操作が必要となってしまいました。 クライアント証明書を証明書ストアにインポートせず、ファイルとして接続元 PC に保存する場合には、PKCS #12 形式への変換は不要です。
コマンドプロンプトで、以下の通り実行します。 このコマンドでは、C:\CA フォルダにある client01.masawo-cvpn.corp.crt と client01.masawo-cvpn.corp.key を、client01.masawo-cvpn.corp.pfx に変換します。 変換したいファイル名に応じて書き換えてご使用ください。 なお、変換といっても .crt と .key もファイルが消えてしまうわけではありません。
パスワードを設定することを求められますが (Enter Export Password:)、設定したパスワードは後の手順で使うので忘れないようにします。
set OPENSSL_CONF=C:\vpnuxPKIManager\openssl.conf C: cd \vpnuxPKIManager openssl.exe pkcs12 -export -out /CA/client01.masawo-cvpn.corp.pfx -inkey /CA/client01.masawo-cvpn.corp.key -in /CA/client01.masawo-cvpn.corp.crt
ACM への証明書のインポート
AWS マネジメントコンソールを使って、ACM にサーバー証明書をインポートします。 ACM のコンソールを開き [証明書のインポート] をクリックします。
それぞれの入力欄には、以下のファイルの内容をコピーします (ファイルの内容はメモ帳等で確認できます)。
- 証明書本文 ・・・ サーバー証明書 (server.masawo-cvpn.corp.crt)
- 証明書のプライベートキー ・・・ サーバー証明書秘密キー (server.masawo-cvpn.corp.key)
- 証明書チェーン ・・・ CA 証明書 (ca.crt)
インポートが完了しました。
今回のように、サーバー証明書とクライアント証明書が同一の認証機関 (CA) から発行されている場合、クライアント証明書については ACM にインポートする必要はありません。
クライアント証明書の認証機関 (発行者) がサーバー証明書の認証機関 (発行者) と異なる場合にのみ、クライアント証明書を ACM にアップロードする必要があります。
相互認証 - AWS Client VPN 管理者ガイド より抜粋
Client VPN エンドポイントの作成
Client VPN エンドポイントは、AWS のドキュメントをもとに、相互認証を使用するように作成します。
クライアント VPN エンドポイント - AWS VPN 管理者ガイド
作成後、Client VPN クライアント設定ファイル (.ovpn) を、ダウンロードしておきます。
Client VPN クライアント設定ファイルの編集
クライアント証明書のサブジェクト名 (または拇印) の追記
接続元 PC の証明書ストアにクライアント証明書をインポートして使用するため、クライアント証明書のサブジェクト名、または、クライアント証明書の拇印のどちらか 1 つを、Client VPN クライアント設定ファイル (.ovpn) の末尾に追記する必要があります。 今回は、サブジェクト名を以下のように追記します。
cryptoapicert "SUBJ:client01.masawo-cvpn.corp"
サブジェクト名は、クライアント証明書のファイル (client01.masawo-cvpn.corp.crt) を右クリック → [開く] → [詳細] タブより確認することができます。
Client VPN エンドポイント DNS 名の変更
AWS のドキュメントをもとに、Client VPN エンドポイントの DNS 名を変更することも忘れないようにします。
ステップ 6: クライアント VPN エンドポイントの設定ファイルをダウンロードする - クライアント VPN の開始方法
(変更前の例)
remote cvpn-endpoint-0123456789ABCDEF0.prod.clientvpn.us-east-1.amazonaws.com 443
(変更後の例)
remote asdfa.cvpn-endpoint-0123456789ABCDEF0.prod.clientvpn.us-east-1.amazonaws.com 443
証明書ストアへのインポート と 設定変更
PKCS #12 形式に変換したクライアント証明書のファイル (client01.masawo-cvpn.corp.pfx) を、接続元 PC にコピーし、接続元 PC の証明書ストアにインポートします。
詳細な手順については、以下のブログの "証明書ストアへのインポート と 設定変更 (IT 管理者による 接続元 PC での作業)" をご参照ください。
OpenVPN クライアントのインストール と 設定
接続元 PC にローカル管理者権限を持つユーザーでログインし、OpenVPN クライアントアプリケーションのインストーラを実行します。 インストールオプションは、すべてデフォルトのままにしています。
次に、編集済みの Client VPN クライアント設定ファイル (.ovpn) を、接続元 PC の以下のフォルダーにコピーします。
C:\Program Files\OpenVPN\config
Client VPN エンドポイントに接続
ここまでで準備が整いましたので、OpenVPN クライアントを使って VPN 接続してみたいと思います。 VPN 接続には、ローカル管理者権限は必須ではありません。
タスクトレイの OpenVPN GUI アイコンを右クリック → [接続] をクリックして、VPN 接続します。
無事に接続できました。
その他試してみたこと
証明書の有効期限の変更
vpnux PKI Manager をコピーしたフォルダにあった openssl.conf ファイルの内容を変更し、CA の新規作成を行ってみましたが変化はなく、10 年 (=3,650 日) のままでした。 vpnux PKI Manager 側で有効期限を指定しているようで、変更が不可能と考えた方が良さそうです。
バックアップ
vpnux PKI Manager を使った証明書作成環境を EC2 上に構築した場合、AMI としての取得はもちろんのこと、CA 構築時に指定した CA のデータファイルを保存するフォルダ内のファイルをバックアップしておくだけでバックアップできます。 万が一の場合には AMI から新規の EC2 インスタンスを起動、または、バックアップしておいたファイルを vpnux PKI Manager がインストールされた別環境コピーするだけで証明書作成環境を復元・クライアント証明書を追加発行することが可能です。
さいごに
Windows OS 環境で、GUI 操作のみで Client VPN で使用するサーバー証明書とクライアント証明書の作成を試みてみましたが、残念ながらクライアント証明書を証明書ストアにインポートするための一部 (=クライアント証明書の PKCS #12 形式への変換部分) のみ CLI 操作が必要となってしまいました。
しかし、今回使用した vpnux PKI Manager を使用すれば、ほとんどの部分は GUI で操作することが可能なため、Windows OS を中心に使用している環境では、証明書作成環境の運用負荷を軽減することができるのではないかと思います。
あわせて読みたい