Web製作メモ帳

Web制作で気づいたことをつらつらと

無料SSL証明書 Let's Encrypt を使ってサイトをSSL対応

 久しぶりにこちらのブログを更新である。

 VPS上で運用している私のページ https://smart-boy.org/SSL化してみた。

 そのドメイン上のサイトはServersMan@VPS というレンタルサーバ(VPS)を使っているのだが、OSを自分でバージョンアップすると動作保証対象外となるのでずっと CentOS5 のままでいた。CentOS5 でSSL化をするのはできないわけではないが、結構めんどくさそうなので HTTPS が世の中の主流になってもSSL化せず HTTP のまま運用していた。

 最近、ServersMan@VPS でもサーバを初期化してOSを変更する場合は動作は保証されるようなので、このたび思い切って初期化してサーバを再構築して CentOS7 とした*1。そこで、せっかくだから SSL化もすることとした。

無料SSL証明書 Let's Encrypt

 SSL化といっても、個人サイトなのでサーバ証明書にはお金をかけたくない。というわけで無料のサーバ証明書を探しても、有効期間が短いものばかり。ところが、"Let's Encrypt"という無料SSL証明書は、有効期間は90日と短いものの、自動で更新できるツールがあるということで、この証明書を使用することにした。

ServersMan@VPS の CentOS7 で yum を実行する方法は?

 この証明書の取得の準備のためには色々とインストールしなければいけないものがあるのだが、ServersMan@VPS の CentOS7 では、 yum を実行すると競合エラーが出て、思うようにインストールできない。Let's Encrypt に必要なものをインストールできないだけではなく、" yum update "を実行してサーバ上のモジュールを最新化しようとしても、半分ぐらいが競合エラーではじかれる。この時点で悪戦苦闘。

CentOS7 yum update 後、VPSサーバーにアクセスができなくなった- FAQ | 会員サポート:ユビキタスプロバイダ DTI

 これを見る限り、サーバに繋がらなくなる不具合があり、 initscripts の update を無効化しているようである。しかし、ServersMan@VPSでのHTTPS対応 | keitark を読んだところ、更新しても大丈夫そうだった。そこで、 /etc 直下にある yum.conf の、" exclude=initscripts* " と書かれた行をコメントアウトして、 yum を実行した。

Let's Encrypt で複数サイトのSSL証明書の取得・設定

 ようやくSSL証明書を入手するまでの準備が整ったので、以下のページを参考にして、証明書を取得した。

weblabo.oscasierra.net

 私はそのサーバ上でサブドメインを分けて3つのサイトを運営しているのであるが、その同一ドメインにある3つのサイトの証明書を1つにまとめて取ることができた。

 複数サイトをまとめて取得する際に注意しなければいけないのが、

certbot certonly --webroot -w /var/www/wordpress -d smart-boy.org -w /var/www/horselink -d horselink.smart-boy.org -w /var/www/wikikeiba -d wikikeiba.smart-boy.org

このように、 -d オプション(ドメイン名)だけではなく、 -w オプション(ドキュメントルート)もサイト分指定しなければいけないということである。
 認証局でサイトの存在確認をする際に、サーバ上で実行する証明書要求用のモジュール(certbot)がドキュメントルート上に仮のフォルダとファイルを作成し、認証局側でそこに HTTP でアクセスして、アクセスできた場合に証明書を発行する仕組みだからである*2

 これで無事SSL証明書の取得ができたので、 Apache の設定に証明書のパスを書き込んで Apache 再起動。これで、SSL化が完了した。

WordpressCSSが読み込まれない現象への対応

 と思ってアクセスしてみると、「安全なサイト」として表示はされるのだが、 Wordpress で作成したページの CSS が読み込まれていない。こういう現象が起きたが、WPのプラグイン " Really Simple SSL " *3を入れて、「混合コンテンツ修正」を ON にしたら正常に表示されるようになった。

Let's Encrypt の自動更新設定

 あとは自動更新の設定だが、以下のページの方法がシンプルでわかりやすかったので参考にした。

www.kmiura.net

 これで(たぶん)有効期間が切れそうになると自動更新される筈。

*1:ついでに CentOS5 で PHP をバージョンアップしたらDBに繋がらなくなって動かなくなっていた Wordpress を復活した。

*2:サイト存在確認の際は HTTP でアクセスしに来るので、SSLのみのサイト運用を予定している場合も、 80番のポートを開けておく必要がある。

*3:ダッシュボードのプラグイン検索で「SSL」と検索すると最初の方にあるはず。