SSLとは?
SSL(Secure Sockets Layer)は、ホームページを格納しているサーバーとブラウザ間の通信を暗号化するための仕組みです。
今回は無料で SSL 証明書を発行・更新できるCertbotというサービスを利用して構築します。
SSL導入手順
パッケージ情報の更新
sudo apt update
sudo apt upgrade
Certbotのインストール
sudo apt install certbot
SSL/TLSサーバ証明書の取得
sudo certbot certonly --webroot -w /var/www/html -d [ドメイン名]
・ エラーが出る場合はサーバへの80ポートが開いているか確認
・ 途中で使用可能なメールアドレスの入力と利用条件への同意
・ /etc/letsencrypt/live/hoge.example.com/以下に証明書が配置される
①cert.pem…公開鍵を含むSSLサーバ証明書
②chain.pem…中間証明書
③fullchain.pem…cert.pemとchain.pemが結合されたファイル
④privkey.pem…公開鍵に対応する秘密鍵
sudo ls -l -s /etc/letsencrypt/live/[ドメイン名]
証明書のバックアップ
sudo cp -r /etc/letsencrypt/ /etc/letsencrypt_cp/
Let's Encryptサーバ証明書の自動更新
sudo certbot renew --dry-run
・Let's Encryptより発行されるサーバ証明書の有効期間は90日間なので自動更新を設定。
・crontab で毎日0:00に更新を実行するように設定。
※certbot内部でも証明書の有効期限をチェックして、更新不要であれば更新作業を行わないようにしているので、Let's Encryptが毎日実行するというシンプルな方法を推奨
sudo crontab -e
エディタを選んで最下行に下記1行追加
0 0 * * * certbot renew
Apache2 の設定
SSLに関するモジュールの有効化
sudo a2enmod ssl
設定ファイルを編集
sudo nano /etc/apache2/sites-available/default-ssl.conf
(管理者のメールアドレスへ修正)
ServerAdmin = xxxxxx@xxxxx.xxx.xx
(ルートディレクトリとして公開するディレクトリのパスへ修正)
DocumentRoot = /var/www/html
(取得したサーバ証明書と公開鍵のパスに変更)
SSLCertificateFile /etc/letsencrypt/live/[ドメイン名]/cert.pem
(取得した秘密鍵のパスに変更)
SSLCertificateKeyFile /etc/letsencrypt/live/[ドメイン名]/privkey.pem
(コメント解除して取得した中間証明書のパスに変更)
SSLCertificateChainFile /etc/letsencrypt/live/[ドメイン名]/chain.pem
サイト設定を有効化
sudo a2ensite default-ssl
Apache2の再起動
sudo systemctl restart apache2
HTTP接続に対してHTTPSへのリダイレクトをかける
現在の状態を確認する
sudo ls /etc/apache2/mods-enabled
mod_rewrite を有効にする
sudo a2enmod rewrite
Apache2の再起動
sudo systemctl restart apache2
現在の状態を確認する
sudo ls /etc/apache2/mods-enabled
設定ファイルに下記のように 3行を Virtualhost 内最下部に追記
sudo nano /etc/apache2/sites-available/000-default.conf
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
参考サイト
https://izutsu.aa0.netvolante.jp/wiki-boubi/?%E3%82%B5%E3%82%A4%E3%83%88SSL%E5%8C%96