今回は、AWS Lightsailのインスタンスにて、
LAMP7の環境で動作しているサービスのSSL/TLS化を行うメモとなります。
今回は、手動でLet’s Encrypt(LEGO)をインストールする方法をメモしたいと思います。
【大まかな手順(Let’s Encrypt手動利用)】
- Let’s Encrypt(LEGO)インストール
- 証明書、暗号鍵データ作成(crt、key作成)
- 証明書、暗号鍵データ差替え(crt、key差替え)
目次
1. 環境
AWS Lightsailにて、LAMP(PHP 7)の構成でインスタンス生成して、
静的IPと独自ドメイン設定済みの環境に対して作業したメモとなります。
※Route53で独自ドメインを購入し、DNSレコードを紐付け済みの状態の環境です。
・AWS Lightsail LAMP(PHP 7)構成
https://aws.amazon.com/marketplace/pp/B072JNJZ5C
2. 参考
対象の環境をSSL化するにあたり参考にした資料です。
以下の資料通りに行った際に、手順通りにうまく行かなかった部分がありますので、
少しアレンジした内容になっています。
また、下記の資料では、httpリクエストが行われた際に、
httpsにリダイレクトさせる設定まで含まれていますが、
今回のメモでは、httpsにリダイレクトさせる部分までは含まれていません。
・Amazon Lightsail でホストされている Bitnami スタックに SSL/TLS 証明書をインストールする方法を教えてください。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/linux-lightsail-ssl-bitnami/
・Bitnami アプリケーションの Let’s Encrypt SSL 証明書を生成してインストールする – 代替アプローチ
https://docs.bitnami.com/bch/how-to/generate-install-lets-encrypt-ssl/#alternative-approach
3. 手順
・Let’s Encrypt(LEGO) インストール
まずは、Let’s Encryptをインストールします。
インストール用のtarファイルを以下の要領で取得します。
/tmpディレクトリでなくても作業できると思いますが、
作業後のファイルが自動的に削除されますし、権限が丁度良いため/tmpで作業しました。
cd /tmp curl -Ls https://api.github.com/repos/xenolf/lego/releases/latest | grep browser_download_url | grep linux_amd64 | cut -d '"' -f 4 | wget -i -
tarファイルを取得したら解凍します。
tar xf lego_vX.Y.Z_linux_amd64.tar.gz
解凍時のコマンドでファイル名を指定する際に、バージョン番号を合わせてコマンドを実行してください。
次に、Let’s Encrypt用のディレクトリを作成して、実体を移動させます。
sudo mkdir -p /opt/bitnami/letsencrypt sudo mv lego /opt/bitnami/letsencrypt/lego
淡々とコマンドを打つと以下の様な感じになります。
・証明書ファイル、暗号鍵ファイル 作成 設定
まず、以下のコマンドでbitnamiサービス停止します。
sudo /opt/bitnami/ctlscript.sh stop
そして、以下のコマンドで証明書データを作成します。
sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --path="/opt/bitnami/letsencrypt" run
◎指定する箇所について
- –email=”EMAIL-ADDRESS” → EMAIL-ADDRESSには、管理者のメールアドレスを指定します。
- –domains=”DOMAIN” → DOMAINには、独自ドメインやグローバルIPを指定します。
–domains=”DOMAIN1” –domains=”DOMAIN2” という形で複数指定可能です。
コマンド実行時に,Do you accept the TOS? Y/n という確認メッセージが表示されますので、
実行する場合には、Yを入力してエンターキーを押します。
処理が完了すると、以下に証明書データ(ドメイン名.crt)、暗号鍵データ(ドメイン名.key)、
処理結果ファイルなどが出力されます。
/opt/bitnami/letsencrypt/certificates/
・証明書 ファイル、暗号鍵ファイル 差替え
aws Lightsail LAMP7のインスタンス環境だと、
デフォルトで証明書ファイル(server.crt)、暗号鍵ファイル(server.key)が配置されています。
これらを作成済みのファイルに差し替える必要があります。
まず、既存のファイルをバックアップします。
※crtファイル、keyファイルが存在しないとbinamiサービスは正常に起動できなくなるので、失敗に備えてバックアップします。
以下は、移動してバックアップしていますが、別の方法でも問題ありません。
sudo mv /opt/bitnami/apache2/conf/bitnami/certs/server.crt /opt/bitnami/apache2/conf/bitnami/certs/server.crt.old sudo mv /opt/bitnami/apache2/conf/bitnami/certs/server.key /opt/bitnami/apache2/conf/bitnami/certs/server.key.old
バックアップを追えたら、以下の要領でファイルを配置します。
cp /opt/bitnami/letsencrypt/certificates/ドメイン名.crt /opt/bitnami/apache2/conf/bitnami/certs/server.crt cp /opt/bitnami/letsencrypt/certificates/ドメイン名.net.key /opt/bitnami/apache2/conf/bitnami/certs/server.key
ファイル名をserver.crt、server.keyにリネームしつつ配置する必要があります。
尚、上記のバックアップ→コピーの流れで差し替える以外に、
バックアップ→作成した証明書ファイルと暗号鍵ファイルのリネーム&権限調整→シンボリックリンク作成
という方法でも差替え可能です。
シンボリックリンクを作成する場合、
まず、作成した証明書ファイル(ドメイン名.crt)、暗号鍵ファイル(ドメイン名.key)をリネームします。
mv /opt/bitnami/letsencrypt/certificates/ドメイン名.crt /opt/bitnami/letsencrypt/certificates/server.crt mv /opt/bitnami/letsencrypt/certificates/ドメイン名.key /opt/bitnami/letsencrypt/certificates/server.key
リネーム後、ファイルの権限・所有ユーザーを調整します。
sudo chown root:root /opt/bitnami/letsencrypt/certificates/server.crt sudo chown root:root /opt/bitnami/letsencrypt/certificates/server.key sudo chmod 600 /opt/bitnami/letsencrypt/certificates/server.crt sudo chmod 600 /opt/bitnami/letsencrypt/certificates/server.key
その後、シンボリックリンクを作成します。
sudo ln -sf /opt/bitnami/letsencrypt/certificates/server.key /opt/bitnami/apache2/conf/bitnami/certs/server.key sudo ln -sf /opt/bitnami/letsencrypt/certificates/server.crt /opt/bitnami/apache2/conf/bitnami/certs/server.crt
どちらの方法でも良いので差替えができたら、bitnamiサービスを起動します。
sudo /opt/bitnami/ctlscript.sh start
4. 確認
ブラウザで、https://ドメイン名の形式でアクセスできて、
接続が保護されていれば、正常に動作しています。
5. 補足情報
bitnamiには、https化するためのツールが用意されている様です。
こちらを使用すれば、手動で作業する手間を大幅に減らせる様です。
・bitnami https設定ツール
https://docs.bitnami.com/bch/how-to/understand-bncert/
また、SSLのセキュリティ診断を行ってくれるサービスもあります。
GoogleChromeのDeveloperツールでも検査できますが、
以下でも詳しく調べることができます。
・Qualys. SSL Labs SSL Server Test
https://www.ssllabs.com/ssltest/
試しに今回のメモでSSL/TLS化したドメインを試したところ以下の判定でした。
満点を目指すとなると、サーバー負荷増加や、
古い端末からのアクセス切り捨てなどを考慮する必要がある様です。
システムの要件にもよりますので、満点を取る事に拘る必要はありませんが、
指摘事項を確認して、必要に応じた対応を検討する手助けになると思います。
今回のメモは以上となります。
手動でLet’s Encryptを利用する方法は、割りかし手間かと思いましたが、
十分自動化できる手順に治っていると思います。
尚、証明書は有効期限(90日)が存在するため、定期的に更新 or 差替えを行う必要があります。
一度、試験用に作成していた証明書が期限切れになってしまった経験があるのですが、
その場合にも、letsencryptディレクトリごと別名でバックアップして、
初めから手順を実施すれば、再導入可能です。
差替えの自動化などもメモしていきたいと思います。