Prism に Let’s Encrypt で取得したSSL証明書を適用する

Pocket

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ってなに?という方はこちらをどうぞ。

Amazon Route 53

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に変更することを忘れないでください。

ここで作成した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証明書はこちらからダウンロードできます。

Root Certificates

 

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証明書を適用する説明でした。

おすすめ