概要
ウェブのSSL化を簡単かつ無料行えるLet's Encryptの導入方法をまとめる。
環境
OS: Ubuntu 16.04.7 LTS
Certbotのインストール
$ sudo install certbot
証明書の初回作成
$ certbot certonly --agree-tos --non-interactive -d [ドメイン名] --webroot -w [ドキュメントルートのパス] --email [管理者のメールアドレス]
ドメイン名の例 :www.example.com
ドキュメントルートのパスの例:/var/www/html
作られたファイルの一覧
証明書類の場所:/etc/letsencrypt/live/[ドメイン名]
ファイル名 | 種類 | 説明 |
---|---|---|
cert.pem | SSLCertificateFile | サーバ証明書 |
chain.pem | SSLCertificateChainFile | 中間CA証明書 |
fullchain.pem | SSLCertificateFile | サーバ証明書+中間CA証明書を結合したもの |
privkey.pem | SSLCertificateKeyFile | サーバ証明書の秘密鍵 |
SSLモジュールとバーチャルホストの有効化
$ sudo a2enmod ssl
$ sudo a2ensite default-ssl
$ sudo service apache2 restart
nmapで通信ポートの確認
$ nmap localhost
Starting Nmap 7.01 ( https://nmap.org ) at 2021-01-20 15:39 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00014s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds
確認出来たらブラウザを開いてhttpsでアクセスし動作確認する。
httpsでアクセスできない場合は以下を試す
ufwで443を許可する
$ sudo ufw status
Status: active
To Action From
-- ------ ----
20 ALLOW Anywhere
21 ALLOW Anywhere
22 ALLOW Anywhere
80 ALLOW Anywhere
20 (v6) ALLOW Anywhere (v6)
21 (v6) ALLOW Anywhere (v6)
22 (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
$ sudo ufw allow 443
Status: active
To Action From
-- ------ ----
20 ALLOW Anywhere
21 ALLOW Anywhere
22 ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere ← https
20 (v6) ALLOW Anywhere (v6)
21 (v6) ALLOW Anywhere (v6)
22 (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6) ← https
$ sudo ufw reload
※この段階ではhttpsでアクセスしても保護されていない通信となる。
Apache2の設定
$ cd /etc/apache2/sites-available/
$ sudo nano default-ssl.conf
下記部分を修正
default-ssl.conf
SSLCertificateFile /etc/letsencrypt/live/[ドメイン名]/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/[ドメイン名]/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/[ドメイン名]/chain.pem ←コメントアウトして編集
設定ファイルをチェックしApacheを再起動
$ sudo apache2ctl configtest
$ sudo service apache2 restart
証明書の更新設定
Let's Encryptが発行する証明書の有効期限は90日間と短い為、自動で更新されるように設定する。
$ cd /etc/letsencrypt
$ sudo nano letsencrypt-renew.sh
letsencrypt-renew.sh
#!/bin/sh
certbot renew -q --no-self-upgrade --post-hook "service apache2 restart"
$ sudo chmod 0700 letsencrypt-renew.sh
$ sudo crontab -e
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.basic
4. /usr/bin/vim.tiny
エディターは2を選択する。
letsencrypt-renew.sh
# 一番最後の行に追加する
# 毎日3時に更新チェックを実行する
0 3 * * * /etc/letsencrypt/letsencrypt-renew.sh
常時SSL化する
httpからhttpsへ自動的にリダイレクトされるようにする。
apache2.confで.htaccessの利用を許可する。
$ sudo nano /etc/apache2/apache2.conf
apache2.conf
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All <-- NoneからAllへ変更
Require all granted
</Directory>
.htaccessでリダイレクトさせる。
$ sudo nano /var/www/html/.htaccess
.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
最後にApache2を再起動する
$ sudo service apache2 restart
リファレンス
https://qiita.com/ariaki/items/5680cb6da6223844af4e
https://www.yokoweb.net/2018/06/01/ubuntu-18_04-server-apache-ssl/