こんにちは!イーゴリです。
前回の記事では、AWS Client VPN の導入のためにサーバー自己証明書及びクライアント自己証明書を発行しましたが、ACM上のサーバー証明書かクライアント端末側のクライアント証明書のどちらかの期限が切れたらどうなるかというと、AWS Client VPN は接続ができなくなるので、今回の記事では、以前発行されたサーバー自己証明書及びクライアント自己証明書の更新手順をご説明致します。
なお、OpenVPN easy-rsaで証明書の有効期限を100年にする方法を紹介しておりますので、ご参考ください。
図
前提条件
- Linux OS
更新環境
前回の記事のように、EC2上でOpenVPN easy-rsaをインストールした環境及び証明書を使っても問題ありませんが、今回のパターンでは、EC2からeasy-rsaディレクトリのみ保存し、対象EC2を削除しましたので、AWS CloudShell経由で更新してみたいと思います。
自己証明証を更新するには、いくつかの方法があります。
- EC2で発行する
- CloudShellで発行する(今回の記事)
- 自分のLinux端末で発行する
証明書の更新
AWS CloudShellの起動
必要なリージョンを選択した上、AWSマネジメントコンソールにある[>_]みたいなボタンをクリックします。対象リージョンで初めてAWS CloudShellを起動した場合、環境を完了するため少し時間がかかりますので、「$」が表示されるまで待機します。
不足コンポーネントのインストール
[cloudshell-user@ip-10-0-179-15 ~]$ sudo yum install openssl -y 〜省略〜 openssl.x86_64 1:1.0.2k-24.amzn2.0.2 Complete!
easy-rsa.zipのアップロード・解凍
前回、保存されたeasy-rsa.zipをAWS CloudShellの環境にアップロードします。
ファイルのアップロードが完了しましたら、次に進みます。
easy-rsaがZIP化している場合、下記のコマンドで解凍します。
[cloudshell-user@ip-10-0-179-15 ~]$ unzip easy-rsa.zip
証明書の更新
[cloudshell-user@ip-10-0-179-15 ~]$ cd easy-rsa/easyrsa3 [cloudshell-user@ip-10-1-27-143 easyrsa3]$ ./easyrsa renew server nopass #証明書を更新しようすると
[bash: ./easyrsa: Permission denied]というエラーが発生しますが、下記コマンドで解決できます。
[cloudshell-user@ip-10-1-27-143 easyrsa3]$ chmod 755 easyrsa
下記のコマンドで証明書を更新します。
./easyrsa renew <証明書名> nopass
私の場合
[cloudshell-user@ip-10-0-179-15 ~]$ ./easyrsa renew server nopass Continue with renew: yes Generating a 2048 bit RSA private key 省略 Certificate is to be certified until XXXXX 2024 GMT (825 days) Write out database with 1 new entries Data Base Updated [cloudshell-user@ip-10-0-179-15 ~]$ ./easyrsa renew client123.domain.tld nopass Continue with renew: yes Generating a 2048 bit RSA private key 省略 Certificate is to be certified until XXXXX 2024 GMT (825 days) Write out database with 1 new entries Data Base Updated
デフォルトだと失効30日以内の証明書しか更新できないため、下記のエラーが発生した場合、下記のコマンドで変更できます。
[cloudshell-user@ip-10-0-179-15 ~]$ ./easyrsa renew server nopass Continue with renew: yes Easy-RSA error: Certificate expires in more than 30 days. Renewal not allowed.
証明書の更新可能日時のコマンド:
export EASYRSA_CERT_RENEW=365
easy-rsaをダウンロードしたい場合
次は対象ディレクトリをZIP化します。
[cloudshell-user@ip-10-0-179-15 ~]$ cd [cloudshell-user@ip-10-0-179-15 ~]$ ll #easy-rsaがあるか確認する [cloudshell-user@ip-10-0-179-15 ~]$ zip easy-rsa.zip -r ./easy-rsa/ [cloudshell-user@ip-10-0-179-15 ~]$ ll easy-rsa.zip #easy-rsa.zipの時間が更新されたことを確認する
CloudShellからロール端末にeasy-rsa.zipをダウンロードします。
Action > Download file
「~/easy-rsa.zip」を入力し、ダウンロードボタンをクリックします。
AWS Certificate Managerでのサーバー証明書の再インポート
サーバー証明書(server.crt)をACM(AWS Certificate Manager)に再インポート(更新)します。
[サービス] > [ACM] > 対象SSL証明書をクリックします。※
※クライアント・サーバー証明書の発行元CAが同一であれば、サーバー証明書を更新するだけで充分です。
「再インポート」をクリックします。
下記の通り設定し、「次へ」をクリックする。
- 証明書本文 > *.crtの本文内容
- 証明書のプライベートキー > *.keyの鍵内容
- 証明書チェーン - オプション > ca.crtの内容
インポート内容を確認し、「インポート」をクリックする。
「失効日」が更新されたことを確認する。
上記の作業を行ったら、クライアント端末にある現行のクライアント証明書の期限が切れるまで接続可能となります。
クライアント端末にある現行のクライアント証明書の期限が切れたら、クライアント端末からClient VPNの接続ができなくなりますので、ご注意ください。
クライアント端末側での証明書の更新
クライアント証明書(client123.domain.tld.crt)をクライアント端末で更新します。
クライアントVPN接続ソフトウェアの設定(.ovpnファイル)の構成によって更新方法が異なります。
- 設定ファイル内で証明書及び秘密鍵の保管場所(cert/keyのパス)を参照する設定の場合はファイルの置き換えのみで充分です。
- 設定ファイル内に証明書及び秘密鍵の情報を登録している場合は、設定ファイルの修正および、接続ソフトウェアへの再読み込みが必要となります。
但し、上記のクライアント証明書の更新作業はあくまで理論情報のため、環境によって結果が異なる可能性がございますので、.ovpnファイルの更新作業を事前にテスト端末でご検証頂き、問題なく接続できることをご確認いただくことを推奨します。
QAセクション
質問:AWS Certificate Manager上にあるサーバー証明書の期限が切れたら、どうなる?
回答:Client VPNの接続ができなくなる。(↓下記のスクリーンショットはご参考までに)
質問:AWS Certificate Manager上にあるサーバー証明書を更新して、クライアント端末にあるクライアント端末の証明書の期限が切れるまで古いクライアント証明書のまま使っても接続が可能か?
回答:クライアント・サーバー証明書の発行元CAが同一であれば可能。
質問:AWS Certificate Manager上にあるクライアント証明書の期限が切れても接続できるか?
回答:ルート証明書や中間証明書の有効期限が過ぎていなければ、接続できる。そもそもCAが同じだったら、AWS Certificate Manager上で、クライアント証明書を使わなくても問題ない。
クライアント証明書を ACM にアップロードする必要があるのは、クライアント証明書の CA がサーバー証明書の CA と異なる場合だけです
質問:クライアント端末上にあるクライアント証明書の期限が切れても接続できるか?
回答:Client VPNの接続ができなくなる。(↓下記のスクリーンショットはご参考までに)
以上、御一読ありがとうございました。
本田 イーゴリ (記事一覧)
カスタマーサクセス部
・2024 Japan AWS Top Engineers (Security)
・AWS SAP, DOP, SCS, DBS, SAA, DVA, CLF
・Azure AZ-900
・EC-Council CCSE
趣味:日本国内旅行(47都道府県制覇)・ドライブ・音楽