Prism に Let’s Encrypt で取得したSSL証明書を適用する
PrismのSSL証明書
こんにちは。クララの吉村です。
Prismをデフォルトで使っていると、SSL証明書のエラーが出てしまいカッコよくありません。
これはデフォルトではPrismに「*.nutanix.local」というSSL証明書が設定されているためで、 Nutanixのドキュメントを見るとこのSSL証明書は自由に変更できるようです。
また、独自SSL証明書に変更することを推奨しています。
Note: Nutanix recommends that customers replace the default self-signed certificate with a CA signed certificate. The Controller VM Security Operations Guide includes more information about certificates, such as generating a private key and certificate signing request (CSR).
というわけで今回は、Let’s Encrypt を Route53 の TXTレコード認証でSSL証明書を取得して、Prsim に設定するまでをご紹介します。
Route53の設定
TXTレコードの認証は特に Route53 でなくてもよいのですが、自動化という部分を考慮して certbotとの相性の良さで選びました。
Route53ってなに?という方はこちらをどうぞ。
Hosted Zonesにドメイン登録
まずはRoute53にドメインをHosted zones登録しましょう。簡単です。AWSマネジメントコンソールからポチっとな。
Hosted zones に登録すれば、NSレコードとSOAレコードが出来ますので、それだけでOKです。
ドメインのレジストラにDNS登録
次に、ドメインのレジストラにRoute53で表示されるネームサーバを登録してください。
ここは各レジストラによって操作が変わると思うので、割愛します。
Route53を操作するAMIユーザ作成
AWSではセキュリティを考慮して必要なAWSリソースのみを扱える権限ユーザを作ります。今回は、Route53に登録したドメインのみ扱えるAMIユーザを作りましょう。
設定ポリシーのサンプルはここにあります。
https://github.com/certbot/certbot/blob/master/certbot-dns-route53/examples/sample-aws-policy.json
以下の YOURHOSTEDZONEID を Route53 に表示されるHosted Zone IDに変更することを忘れないでください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
{ "Version": "2012-10-17", "Id": "certbot-dns-route53 sample policy", "Statement": [ { "Effect": "Allow", "Action": [ "route53:ListHostedZones", "route53:GetChange" ], "Resource": [ "*" ] }, { "Effect" : "Allow", "Action" : [ "route53:ChangeResourceRecordSets" ], "Resource" : [ "arn:aws:route53:::hostedzone/YOURHOSTEDZONEID" ] } ] } |
ここで作成したAWSのアクセスキー IDとシークレットキーを利用して、実行環境からRoute53を操作していきます。
実行環境の設定
さて、AWSの設定が終わったので、次は実行環境を整備していきます。
私の実行環境は以下の通りです。
OS | Ubuntu 16.04.3 LTS (Bash on Windows) |
Python | python 2.7 |
aws cli インストール
aptでも、githubからでも、pipでもなんでも良いです。
sudo apt install awscli aws configure
注意点としては、aws configure のデフォルトユーザ設定で、先ほど作成したAMIユーザを設定してください。
この後の作業で、–profile オプションでのユーザ切替は想定してないです。
certbot インストール
githubから最新版をダウンロードしてインストールします。
certbotはSSL証明書の更新の自動化のために、crontab を利用します。
そのため、root ユーザでインストール、作業実施しましょう。
git clone https://github.com/certbot/certbot cd certbot ./tools/venv.sh source venv/bin/activate
SSL証明書の取得
ようやく環境が整いました!ここまで来たらもう一息です。
## 作業ディレクトリを作成。 mkdir ~/cb-work ## おまじない。 ## 私の環境ではこれをやらないと openssl のライブラリ読み込みエラーが出ました。 sudo execstack -c ~/certbot/venv/lib/python2.7/site-packages/cryptography/hazmat/bindings/_openssl.so ## SSL証明書の発行 ## 1FQDN test.clara.ne.jp を練習で発行する場合 certbot --config-dir ~/cb-work --work-dir ~/cb-work --logs-dir ~/cb-work certonly --server https://acme-v02.api.letsencrypt.org/directory -a dns-route53 --email メールアドレス --agree-tos --no-eff-email -d 'test.clara.ne.jp' -d 'clara.ne.jp' # ワイルドカード *.clara.ne.jp を本番で発行する場合 certbot --config-dir ~/cb-work --work-dir ~/cb-work --logs-dir ~/cb-work certonly --server https://acme-v02.api.letsencrypt.org/directory -a dns-route53 --email メールアドレス --agree-tos --no-eff-email -d '*.clara.ne.jp' -d 'clara.ne.jp'
しばらく待つと・・・
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: ~/cb-work/live/test.clara.ne.jp/fullchain.pem Your key file has been saved at: ~/cb-work/live/test.clara.ne.jp/privkey.pem
出来ました!
PrismにSSL証明書を適用する
Let’s Encrypt でSSL証明書の取得が完了しました。あとはPrismにこのSSL証明書を設定してあげましょう。
インポートに必要な項目
PrismへのSSL証明書をインポートするには以下の4つの項目が必要です。
項目名 | 意味 |
certificate-path | サーバのSSL証明書
Let’s Encrypt で取得した cert.pem ファイル |
cacertificate-path | CA中間証明書
Let’s Encrypt で取得した chain.pem ファイル ※RootCA証明書も追記する |
key-path | サーバのSSL証明書の秘密鍵
Let’s Encrypt で取得した privkey.pem ファイル |
key-type | 秘密鍵の暗号タイプと鍵長
Let’s Encrypt の場合には、RSA_2048 |
ハマりポイントは、Let’s Encrypt でそのまま取得したCA中間証明書では、インポートに失敗します。
Let’s Encrypt のRoot証明書をCA中間証明書に追記してあげましょう。
Let’s Encrypt のRoot証明書はこちらからダウンロードできます。
Prismにインポート
Prismからインポートする方法とCVMからncliを利用してインポートする方法があります。
Prismからインストールする方法は以下の通り
Prismの設定メニューから「SSL証明書を選択」
「Replace Cetificate」を選択
「Import Key and Certificate」を選択
各項目で選択を行い、「Import Files」で完了です。完了すると、Prismのセッションが切れて、再度ログインが必要になります。
なお、ncliで実行する場合には、ワンライナーで実行可能です。
ncli ssl-certificate import certificate-path="~/dev001_claris_clara_ne_jp.pem" cacertificate-path="~/ca_chain.pem" key-path="~/dev001_claris_clara_ne_jp_privatekey.pem" key-type="RSA_2048" Certificate imported.
以上、PrismにLet’s Encrypt のSSL証明書を適用する説明でした。