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に変更することを忘れないでください。
{ "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でもなんでも良いです。
[bash]
sudo apt install awscli
aws configure
[/bash]
注意点としては、aws configure のデフォルトユーザ設定で、先ほど作成したAMIユーザを設定してください。
この後の作業で、–profile オプションでのユーザ切替は想定してないです。
certbot インストール
githubから最新版をダウンロードしてインストールします。
certbotはSSL証明書の更新の自動化のために、crontab を利用します。
そのため、root ユーザでインストール、作業実施しましょう。
[bash]
git clone https://github.com/certbot/certbot
cd certbot
./tools/venv.sh
source venv/bin/activate
[/bash]
SSL証明書の取得
ようやく環境が整いました!ここまで来たらもう一息です。
[bash]
## 作業ディレクトリを作成。
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’
[/bash]
しばらく待つと・・・
[bash]
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
[/bash]
出来ました!
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で実行する場合には、ワンライナーで実行可能です。
[bash]
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.
[/bash]
以上、PrismにLet’s Encrypt のSSL証明書を適用する説明でした。