クイックノート

ちょっとした発見・アイデアから知識の発掘を

http から https へ ~無料でWebサイトをSSL化する~【apache】

Chrome がバージョンアップで、
「http://」のサイトへのアクセスに警告を出すようになりました。

特段、パスワードなど漏れては困る情報のやり取りをしない分には、
HTTP でも問題はありませんが、
ブラウザで警告を出されていると、心理的にはよろしくないですよね。

ということで、HTTP から HTTPS への移行が急務(?)と言えます。

この記事では、VPS など直接触れるサーバーで運営しているサイトを、
apacheを使って SSL化する方法をまとめます。
共有サーバーの場合は、それぞれの共有サーバーでの手順に従って下さい。

そもそも SSL 化って

SSL化とは、暗号化の技術を使って、
Web等での通信の安全性を確保することを言います。

パスワードを暗号化して流出を防いだり、
アクセスしようとしているサイトが偽装サイトではないか等の確認を行います。

暗号化については下記の記事を参照ください。

clean-copy-of-onenote.hatenablog.com

Google 的には、このような安全な通信を推進していく運動の一環として、
ssl 化されていないサイトには容赦なく警告を表示していくスタイルを取ったのでしょう。

SSL 化の手順

それでは、SSL 化していきましょう。
SSL 化に必須なのが証明書です。

証明書とは、暗号の鍵とその所有者を紐づけるものです。
受け取った暗号の鍵を使って暗号化しているのに、
それが、全く見ず知らずの別の人に鍵だと、
情報が盗られてしまいますよね。

これを避けるために、この鍵は間違いなく、
この人(サーバー)の鍵だということを、
三者に保証してもらうというのが証明書です。

証明書の取得

それでは、まず、この証明書を取得するところから始めましょう。

証明書を発行してくれるサービスは複数ありますが、
ここでは、無料で利用できる letsencrypt を利用します。

準備

まずは letsencrypt をダウンロードします。

sudo apt install git
git clone git://github.com/letsencrypt/letsencrypt.git

続いて、次のコマンドを実行します。

cd letsencrypt
./letsencrypt-auto --help

これで、letsencrypt を使う準備ができました。

証明書の発行

証明書を作ってもらうには、次のコマンドを実行します。

./letsencrypt-auto certonly --webroot -w 【webroot パス】 -d 【ドメイン名】

【webroot パス】には、apacheで指定している「DocumentRoot」のパスを、
ドメイン名】にはサイトのドメイン名を指定します。

上のコマンドを実行すると、
/etc/letsencrypt/live/【ドメイン名】/
ディレクトリ内に、証明書のファイルが生成されます。

apache の設定

証明書を取得できたので、
サーバーの方の設定を行います。

バーチャルホストの設定ファイルを書き換えます。

nano  /etc/apache2/sites-available/【hogehoge.conf】

HTTPS の設定

これまで動作させていたHTTPのバーチャルホストについて、
HTTPSのデフォルトポート443への変更と、
SSLの設定を行います。

<VirtualHost *:443>
   SSLEngine on
   SSLProtocol all -SSLv2
   SSLCertificateKeyFile  /etc/letsencrypt/live/【ドメイン名】/privkey.pem
   SSLCertificateFile      /etc/letsencrypt/live/【ドメイン名】/cert.pem
   SSLCertificateChainFile /etc/letsencrypt/live/【ドメイン名】/chain.pem
~~~

HTTP からのリダイレクト設定

このままだと、これまでの、
「http://」へのアクセスが捌けないので、
http から https へのリダイレクトの設定を追記しておきます。

<VirtualHost *:80>
    ServerName example.com:80
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^example\.com
    RewriteRule ^/(.*)$ https://example.com/$1 [R=301,L]
</VirtualHost>

設定変更を反映する

後は、設定変更を反映させましょう。

設定の確認をしてから、

sudo apache2ctl configtest

リロードで完了です。

sudo service apache2 reload

証明書の自動更新を設定

最後に、証明書の自動更新を設定しておきましょう。

letsencrypt のプログラムをbinに移します。

sudo cp certbot-auto /usr/bin

root権限が要求されるので、rootでcronに定期実行登録します。

su
crontab -e 

次を記入します。

0 4 * * * certbot-auto renew --post-hook "service apache2 reload"

更新期限が近づくと自動的に更新が実行され、
更新後には、apache のリロードが行われます。

プライバシーポリシー