HTTPサーバのHTTPS化


これは何?

ドメイン名でアクセスできるApache HTTPサーバをHTTPS化する方法の一つ、フリーの証明書を発行する「Let's Encrypt」を利用する方法が書かれています。ただし、まだApache HTTPサーバを構築していない場合は、こちらを参照してください。

クラウドでWebサーバを構築する
クラウドコンピューティングを利用してWebサーバを構築する方法の一つ、GoogleCloudPlatformを使う方法が書かれています。

ドメインでアクセスできるApache HTTPサーバをHTTPS化する

手順は次の通り
1. Let's Encryptのクライアントソフト「Certbot」をインストール
2. Certbotを使ってLet's Encryptから証明書を受け取る
3. ApacheでSSLに対応するための「mod_ssl」モジュールをインストール
4. mod_sslでさっき受け取った証明書を使うよう設定する
5. Apache HTTPサーバを再起動する

Certbotをインストール

例えば、CentOS7の場合は、次のコマンドでインストールできます。

$ sudo yum install epel-release
$ sudo yum install certbot python-certbot-apache

他の環境については、こちらを参照してください。

Certbot クライアントのインストール - Let's Encrypt 総合ポータル
Certbot クライアントの適切なインストール手順は、OS(ディストリビューション)によって異なります。使用している OS を選んでください。

Let's Encryptから証明書を受け取る

次のようなコマンドで、Apache HTTPサーバを停止することなく証明書を受け取ることができます。

$ sudo certbot certonly --webroot -w /var/www/html -d www.qiita.com
  • /var/www/htmlの部分は、サーバのドキュメントルートなので、Apacheで設定されているパスに置き換えてください。
  • www.qiita.comの部分は、サーバのアドレスに紐付けられた実際のドメインに置き換えてください。
  • 途中でメールアドレスを入力したり、質問に答える部分があるかもしれないので、画面の指示に従ってください。

例:

Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): [email protected]
(A)gree/(C)ancel: A
(Y)es/(N)o: N

mod_sslをインストール

次のコマンドで、ApacheでSSL証明書を利用するための、「mod_ssl」モジュールをインストールできます。

$ sudo yum install mod_ssl
...
Is this ok [y/d/N]: y

mod_sslで証明書を使うよう設定する

例えば、次のコマンドで「viエディタ」を起動し、設定ファイルを書き換えます。

$ sudo vi /etc/httpd/conf.d/ssl.conf

書き換える箇所は次の通り
SSLCertificateFileで始まる行を探し、次のように書き換えます。www.qiita.comを実際のドメインに書き換えてください。

/etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/letsencrypt/live/www.qiita.com/cert.pem

SSLCertificateKeyFileで始まる行を探し、次のように書き換えます。

/etc/httpd/conf.d/ssl.conf
SSLCertificateKeyFile /etc/letsencrypt/live/www.qiita.com/privkey.pem

SSLCertificateChainFileで始まる行を探し、次のように書き換えます。

/etc/httpd/conf.d/ssl.conf
SSLCertificateChainFile /etc/letsencrypt/live/www.qiita.com/chain.pem

Apache HTTPサーバを再起動する

例えば、CentOS7の「Apache httpd」の場合は、次のコマンドで再起動できます。

$ sudo systemctl reload httpd.service

Let's Encryptから受け取った証明書を自動更新する

証明書には有効期限がありますので、無効になる前に更新する必要があります。証明書の更新は、次のコマンドでできます。

$ sudo certbot renew --post-hook "sudo systemctl reload httpd.service"

--post-hookオプションで、証明書が更新された直後に再起動するようにします。このコマンドをCronに登録すれば、自動で定期的に証明書を更新できます。

Cronに登録する

まずは、cronが動作中かどうか確認します。

$ systemctl statuc crond

例えば、次のように、Viエディタで/etc/cron.d/certbotファイルを新規作成すると、登録できます。

sudo vi /etc/cron.d/certbot
/etc/cron.d/certbot
# letsencrypt renew
0 4 * * 3 root certbot renew --post-hook "systemctl reload httpd.service"

余談

Let's Encryptを利用すれば、無料でSSL証明書を発行してもらうことがます。したがって、ドメインを所有していれば、自分のWebサイトを無料でHTTPS化することができます。