一部のウェブブラウザが全てのHTTPページに警告を出すようになりました。
これに伴い、弊社のウェブサイトでもSSL化を実施しています。
今回使用したのは無料で使用できる「Let's Encrypt」。 当初は無料ツールということで色々と扱いにくい点があるかと考えていましたが、 実際に導入してみると想像以上に簡単でした。
Let's Encryptは自動でインストールを行うツールが提供されているので、今回はそれを使用しました。 まずはツールを設置するためのディレクトリを作成します。
なお、Let's Encryptのツールはroot権限を持つユーザでないと操作できないとのことです。 私の場合はrootのホームフォルダ直下にツール置き場を作成しました。
$> cd ~ $> mkdir letsencrypt_tools $> cd letsencrypt_tools
弊社で使用しているUbuntuは14.04LTSですが、Let's Encryptのツールはaptには対応していないようです。 そのため、Webサイトで公開されているツールをダウンロードしてきます。 ダウンロードした「certbot-auto」に実行権限を与えれば設定完了です。
※ここではwgetで取得していますが、もちろん別途ダウンロードしたものをSFTP等でアップロードする形でも問題ありません。
$> wget https://dl.eff.org/certbot-auto $> chmod a+x certbot-auto
では、さっそく実行してみましょう。
$> ./certbot-auto
ここからは対話形式で証明書のインストールが進みます。今回は下記のように回答しました。
上記に回答すると、続いてどのホストをHTTPS化するか聞いてきます。 どうやら、Apacheのバーチャルホスト設定を自動的に読み込んでいるようです。
Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: sysdays.co.jp 2: www.sysdays.co.jp 3: dummysite1.com 4: dummysite2.com 5: dummysite3.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):
Let's Encryptは「Subject Alternative Name(SAN)」という仕組みに対応しているので、 1つのサーバで複数のホストを暗号化することが出来ます。 弊社では1と2を暗号化するため「1,2」と入力しました。
最後に、HTTPアクセスをHTTPSをリダイレクトするか聞かれるので、「2(リダイレクトする)」を選択しました。 これでもう、導入作業は完了です。Apacheを再起動したらHTTPSでのアクセスが有効になります。
$> service apache2 restart
あとは実際にWebサイトにHTTPSアクセスして確認してみてください。 ちなみに、導入した証明書は /etc/letsencrypt/archive/ に配置されるようです。
Let's Encryptは証明書の有効期限が90日間しかありません。 90日ごとに手動で証明書を入れ直すのは現実的ではないので、自動化の仕組みを導入しましょう。
仕組みと言ってもやることはごく単純で、cronを仕込んで定期的に更新ツールを実行するだけです。 Let's Encryptのツールはrootで動作させないといけないので、rootのcronに仕込みます。
# m h dom mon dow command 0 4 * * 5 /root/letsencrypt_tools/certbot-auto renew --post-hook "service apache2 restart"
これで、毎週金曜日の朝5時に更新処理が実行されます。 期限が2週間を切るまでは「Cert not yet due for renewal」と言われて更新がスキップされるので、 毎週実行させても問題はありません。
結局、たったこれだけの作業で証明書を無料導入することが出来ました。 今後はもう、証明書はこれ一本で考えても良さそうです。