さくらのレンタルサーバに独自SSLを導入

さくらインターネットのレンタルサーバに独自SSLを導入してみたので、手順について記しておく。

さくらのレンタルサーバはスタンダードプランを使用しており、証明書の発行は、自動処理によって無料でドメイン認証の発行をしてくれる”Let’s Encrypt“というオープンな認証局を試してみた。

証明書の取得と設定

Let’s Encryptで証明書を発行するには、Certbotという公式クライアントを使用する。Certbotはコマンド入力で動作するプログラムで、リモートサーバにインストールして実行すると証明書の取得から設定、更新までを自動的に行ってくれるというもの。

自動で証明書の管理をするためにはリモートサーバ上でroot権限が必要になるが、さくらのレンタルサーバは、スタンダードプランではrootとしてシェルアクセスができない。そこで、リモートサーバ上ではなくローカルマシンでCertbotをマニュアルモードで使用して証明書を取得し、レンタルサーバのコントロールパネルを使ってSSLの設定を行ってみた。

まずは、ローカルマシンにCertbotをインストールする。この投稿ではローカルマシンにUbuntu Studio 16.04を使用しているが、環境が異なる場合はCertbotの公式サイトを参照のこと。

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot

証明書を取得のみを行うためにCertbotをマニュアルモードで実行する。途中でリモートサーバにCertbotが指定するファイルを保存する行程があるので、別の端末でリモートサーバにシェルログインをしておく。

certbot certonly --manual --work-dir cert/lib/letsencrypt --logs-dir cert/log/letsencrypt --config-dir cert/letsencrypt -d ドメイン -d www.ドメイン

マニュアルモードでは対話的に設定を入力していくことになり、メールアドレス、利用規約の同意、Electronic Frontier Foundationにメールアドレスを登録するかどうか、アクセスしているIPアドレスの記録の確認について正しく入力を行う。

次にリモートサーバ上にファイルを作成する指示が表示されるので、リモートサーバに接続した別の端末で、Certbotが表示するコマンドをリモートサーバ上で実行してドキュメントルートに指定されたディレクトリとファイルを作成する。

cd ドキュメントルートのパス
mkdir -p .well-known/acme-challenge
printf "%s" 指示されたテキスト > .well-known/acme-challenge/指示されたファイル名

試しにブラウザで指示されたファイルにアクセスして中身が問題なく表示されたら、ローカルマシンの端末でCertbotの指示にしたがってEnterキーを押すと、Let’s Encryptによる確認処理が行われ、秘密鍵と3種類の証明書が作業ディレクトリ内に保存される。

サーバの設定

秘密鍵と証明書が作成できらたサーバのSSL設定を行う。

さくらのレンタルサーバではコントロールパネルでSSLの設定が行えるので、秘密鍵と証明書の”cert.pem”、中間証明書の”chain.pem”をアップロードしてSSLを有効にする。apacheのバージョンが2.4.8以上の場合は秘密鍵と”fullchain.pem”を使う。

これでhttpsによる接続ができるようになるが、httpによる接続もできてしまう。すべての接続を強制的にhttps接続にするためにapacheのmod_rewriteを使ってhttpでの接続をhttpsに書き換える。

サイト全体を強制的にhttps接続にする場合は、ドキュメントルートの.htaccessファイルにmod_rewriteのディレクティブを追加する。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{ENV:HTTPS} !=on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

さくらのレンタルサーバの機能を使ってWordPressをインストールして使っている場合、ドキュメントルートとWordPressをインストールしたディレクトリに.htaccessファイルが作られており、mod_rewriteの設定がされているので、両方にhttpをhttpsに書き換えるディレクティブを追加する。ディレクティブを追加する場所は、”RewriteBase”ディレクティブの次の行に上記の”RewriteCond”と”RewriteRule”を追加すればよい。

パーマリンク設定を基本の”WordPressのアドレス/?p=123″の形にしておかないとうまく動作しない。

WordPressの設定、固定ページや投稿内の自分のサイトへのリンクのアドレスを変更しておく。

証明書の更新

Let’s Encryptが発行する証明書は有効期限が90日なので、頻繁に更新作業が必要になる。Certbotを自動更新を行うモードで動かすことができれば何もする必要はないが、この投稿のように手動での設定が必要な場合は、有効期限が来る度に証明書の取得と設定作業を行わなければならない。ドメイン認証ならば年間1,500円前後で取得できるサービスもあるので、Certbotによる証明書の自動更新ができない環境では、安価なサービスを利用したほうが快適かもしれない。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です