
Apache2のSSL対応
1. はじめに
PythonでおなじみになりたいEGの眞嶋です。
最近はAWSやお名前.comなどレンタルサーバーで簡単にGUIからサーバー構築ができますね。
僕は機械音痴なのでCUIでしか構築できないのですが、自宅にいらないPCがある人や学生時代のラズパイを持て余している人に是非ともサーバーの楽しさに目覚めてほしいところです。
2. Apacheの準備
$ sudo a2enmod ssl rewrite
$ sudo a2ensite default-ssl
$ sudo systemctl restart apache2
$ nmap localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-18 21:00 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000064s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE
80/tcp   open  http
443/tcp  open  httpsいきなりコマンドの山ですね(笑)
上から順に解説していきますので、ご安心を。
- SSL通信モジュール、リダイレクトモジュールの適用
- SSLの設定ファイル有効化
- Apache2のリスタート
- SSL通信のチェック
- https://[サーバIP]でアクセスしてindex.htmlが表示されることを確認する。
もし表示されないときは
- sudo ufw statusで443ポートが開放されているか確認する
- ドキュメントルートを変更していないか確認する
- 変更している場合はdefault-ssl.confのドキュメントルートを修正する
 
- 変更している場合は
サーバ証明書の取得
ここではLet's Encryptというサイトで無料のサーバ証明書を取得して、使用します。
# apt install -y certbot openssl
# certbot certonly --webroot -w [ドキュメントルート] -d [ドメイン名]同様に各行の解説をしていきます
- certbot(Let’s Encrypt用)、- openssl(OpenSSL用)のインストール
- certbotを利用してサーバ証明書を取得
certbot certonly --webroot -w [ドキュメントルート] -d [ドメイン名]で入力する情報の解説をしていきます。
- 連絡用メールアドレスの入力
- 規約への同意
- メーリングリストへの登録
ファイルができているか確認
# ls -l
合計 4
-rw-r--r-- 1 root root 692  9月 18 18:48 README
lrwxrwxrwx 1 root root  37  9月 18 18:50 cert.pem -> ../../archive/disk.mydns.jp/cert2.pem
lrwxrwxrwx 1 root root  38  9月 18 18:50 chain.pem -> ../../archive/disk.mydns.jp/chain2.pem
lrwxrwxrwx 1 root root  42  9月 18 18:50 fullchain.pem -> ../../archive/disk.mydns.jp/fullchain2.pem
lrwxrwxrwx 1 root root  40  9月 18 18:50 privkey.pem -> ../../archive/disk.mydns.jp/privkey2.pem3. Apache2の設定
SSL証明書の適用
32 SSLCertificateFile      /etc/letsencrypt/live/disk.mydns.jp/cert.pem
33 SSLCertificateKeyFile /etc/letsencrypt/live/disk.mydns.jp/privkey.pem
34 SSLCertificateChainFile /etc/letsencrypt/live/disk.mydns.jp/chain.pem上記のように各行を変更してください。
https://[サーバIP]でアクセスしてindex.htmlが表示されることを確認できれば成功です。
HTTPからHTTPSへのリダイレクト
RewriteEngine on
RewriteCond %{HTTP_HOST} ^[ドメイン名]
RewriteRule ^/(.*)$ https://[ドメイン名]/$1 [R=301,L]上記を追記することでHTTPSのページに必ずリダイレクトさせることができます。
最近はこの設定があるのが一般的なので入れておいた方がいいですね
Let’s Encryptの自動更新
* * * /10 * * root certbot renew証明書の自動更新にはcronという機能を使っていきます。
10日ごとに確認する場合は上記のように設定します。
設定の適用と確認
$ sudo systemctl restart apache2
$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-09-18 19:17:30 JST; 2h 40min ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 13140 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
   Main PID: 13159 (apache2)
      Tasks: 8 (limit: 9388)
     Memory: 15.4M
     CGroup: /system.slice/apache2.service
             ├─13159 /usr/sbin/apache2 -k start
             ├─13160 /usr/sbin/apache2 -k start
             ├─13161 /usr/sbin/apache2 -k start
             ├─13162 /usr/sbin/apache2 -k start
             ├─13163 /usr/sbin/apache2 -k start
             ├─13164 /usr/sbin/apache2 -k start
             ├─13168 /usr/sbin/apache2 -k start
             └─13234 /usr/sbin/apache2 -k start
 9月 18 19:17:30 hostname systemd[1]: Starting The Apache HTTP Server...
 9月 18 19:17:30 hostname systemd[1]: Started The Apache HTTP Server.上記のようになれば成功です。
あとはhttps://[ドメイン名]とhttp://[ドメイン名]にアクセスして両方ともhttps://[ドメイン名]に接続できていることが確認できれば完璧ですね!
4. さいごに
最近はGUIで証明書をD&Dするだけで出来てしまうので、知らない方も多いのではないかと思います。
便利なツールを利用するのはもちろん推奨されるべきことですが、ツールが変わったら出来なくなった、ということを避けるためにもベースの部分も知見として持てているとなお良いですね。
 
      






 
                 
                


