はじめに
先日、思考の整理箱のSSL対応が一部完了したと言う話を書きました。残り半分の、オレオレ証明書を卒業して第三者機関による認証を得られたので、その記録をメモしておきます。
結局Let’s Encryptを使った
さて、以前からDNS周りに問題があって使えないんだろうと思っていたLet’s Encryptですが、実際のところはこれがちゃんと使えて、seiribako.netの鍵ペアを作ることができました。
この問題は、私の様な「楽をしてささっとSSL対応をしたい」と思っている様な人はハマる可能性が高いので、ちょっと詳しめに書いておこうと思います。
私が構築したこのWordpressサーバはGCPで安直に作ったため、ある種出来上がっているものをDeployしただけで、実は中身に関してはほとんど解っていませんでした。ただ何と無く、GCP, Bitnami, Nginx, WordPressの4つの言葉がふらふらと舞っていたのですが、実はBitnamiとNginxに関してはこれが何を指すのかわからないまま使っていました。SEとして恥ずべき行為ですね。完全にユーザー気分でした。
と言うことで、改めてBitnamiとNginxが何なのかをさらっと調べてみました。結局、Bitnamiに関してはスッキリ理解するとはできませんでしたが、どうも私のWordpressはBitnamiと言うパッケージの一部としてインストールされていることはわかりました。
ほうほう。
じゃ、Nginxは?と言う話ですが、Nginxって、Webサービスだったんですね。私はこのWordpressはてっきりApacheで動いていると思っていたのですが、実はNginxだった様です。
なるほど。
と言うことは、私のWordpressはOSの上にスッピンでインストールされているわけではなく、Bitnamiにパッケージ化されてインストールされている可能性が高いわけで、と言うことはつまり、Nativeのパッケージとディレクトリ構成などが異なる可能性が高く、他の人がスッピンでLet’sEncryptを実行してうまく行ったとしても、私の環境でうまく行く可能性は極めて低そうだな。
と言うことがわかりました。
ここまで来られればあとは早いですね。調査の起点はBitnamiになるわけです。そうすると、BitnamiのページにやっぱりSSL対応の方法に関してちゃんと説明してありました。しかも、ご丁寧にLet’sEncryptを使った方法も記載されていました。
導入手順
参考にしたのはこのページです。
Bitnamiをベースに、NginxもしくはApacheを使ってWebサイトを作っている人はこちらの手順を実施することでWebサイトをSSL化することができます。
詳細は上記サイトに詳しく書いてあるのですが、英語なので少し補足の意味も込めて、引用する形で簡単な説明をしてみます。
Step 1: Install The Lego Client
まずは、LEGOと言うツールをサーバーにインストールします。LEGOはLet’sEncryptのことです。サーバーがインターネットに出られる環境にいればこのコマンドを一行ずつ実行すればインストールが完了です。ただし、lego_vX.Y.Z_linux_amd64.tar.gzのXYZは実際にダウンロードしたバージョンに合わせてください。
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 xf lego_vX.Y.Z_linux_amd64.tar.gz sudo mkdir -p /opt/bitnami/letsencrypt sudo mv lego /opt/bitnami/letsencrypt/lego
Step 2: Generate A Let’s Encrypt Certificate For Your Domain
Webサービスを停止して、いよいよLetsEncryptを実行します。
これで、Webサービスを停止し、
sudo /opt/bitnami/ctlscript.sh stop
これで、LetsEncryptを実行します。実行にあたって、EMAIL-ADDRESSと書いてある部分は自分のメールアドレスに変更し、DOMAINと書いてある部分は、自分のWebsiteのURLに変更します。私の場合はseiribako.netですね。
sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --domains="www.DOMAIN" --path="/opt/bitnami/letsencrypt" run
このコマンドを実行してうまくいけば、それで作業の山場は抜けました。あとは、必要なファイルを移動して、リンクを作成、権限周りの設定をしてWebサービスを起動したらおしまいです。
Step 3: Configure The Web Server To Use The Let’s Encrypt Certificate
ここで、元々置いてある各種ファイルの名称を変えます。
sudo mv /opt/bitnami/nginx/conf/server.crt /opt/bitnami/nginx/conf/server.crt.old sudo mv /opt/bitnami/nginx/conf/server.key /opt/bitnami/nginx/conf/server.key.old
sudo mv /opt/bitnami/nginx/conf/server.csr /opt/bitnami/nginx/conf/server.csr.old
その場所にSTEP2で作成されたkeyファイル、crtファイルのリンクを貼ります。
sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.key /opt/bitnami/nginx/conf/server.key sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.crt /opt/bitnami/nginx/conf/server.crt
最後に権限周りの調整をします。
sudo chown root:root /opt/bitnami/nginx/conf/server* sudo chmod 600 /opt/bitnami/nginx/conf/server*
いよいよ、Webサービスの起動です。
sudo /opt/bitnami/ctlscript.sh start
これで、問題なく起動されてくればきっと大丈夫でしょう。
念のため、サイトのURLに対してhttpsでアクセスしてみてください。Webブラウザのアドレスバーの付近に鍵マークが付いていて、その鍵マークをクリックすると中身を確認できるのですが、そこにIssued by: Let’s Encrypt Authorityと記載されていればOKです。
リファレンスしたサイトでは、STEP5以降も続くのですが、説明は省きます。これは、認証の期間が90日で切れてしまうので、それが切れる前にここまでの流れをもう一回行って、自動で90日間延長するための手段を書いています。途中、スクリプトやcrontabの話などが出てきますが、これはSEの入り口ぐらいの知識が必要なので、興味があったらやってみるぐらいで、興味がなかったら3ヶ月に一回手でやるでも十分かと思います。サーバーログインから終了まで全工程含めても10分もかからないと思うので。
まとめ
- ようやくseiribako.netのSSL対応が全て終わりました。これで、全てのブラウザで警告無しにちゃんと表示される様になりました。
- 日本語のサイトで、Bitnami, NginxでWordpressを組んだサイトのSSL対応をしたケースはあまりヒットしなかったので、もしかしたら需要ないかもしれませんが、まとめておきました
- いくらいろいろなことが簡単にできる様になっても、やっぱり、ユーザーに徹してしまうと見えない部分が多いなと改めて感じました