2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Apache2でフリーのSSL(Let's Encrypt)を導入する

Last updated at Posted at 2021-02-03

概要

ウェブの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/

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?