apacheでのWordPressをssl化するためのメモ

何回もハマったので忘れないうちにメモを残します

# 環境

```shell
$ uname -v
#21~18.04.1-Ubuntu SMP Mon Jul 13 03:31:28 UTC 2020
```

# 状況説明

wordpressを構築するまでは、[この記事](https://qiita.com/cherubim1111/items/265cfbbe91adb44562d5)を参照にしました。

最初はcertbotのサイトの手順にしたがって、
snapでcertbotをインストールして証明書を取得しましたが、
apacheの方の自動設定がうまく行かなかったです。

下の方法はaptでcertbotをインストールする方法です。
先頭にsudoをつける、またはrootユーザーで実行してください。

# 設定ファイルの編集

まず、apacheの設定ファイルを編集して、必要な項目を追加します

```shell
$ sudo vim /etc/apache2/sites-available/000-default.conf
```

11行目あたりに、`ServerAdmin`や`DocumentRoot`があると思います
この２項目は、`default-ssl.conf`ファイルにもありますので、
変更するなら、`000-default.conf`と`default-ssl.conf`両方変えましょう
* `ServerAdmin`は自分のメールアドレスを入れるところ
* `DocumentRoot`はwebページのルートディレクトリの場所を指している
  リンクが`ドメイン/wordpress/...`になって欲しくなければ、
  ここを`/var/www/html/wordpress`に変えると良いでしょう

この２つの項目の後ろ(前でも良いけど)に、`ServerName`と`ServerAlias`を追加します
これは、certbotで自動設定を行うときに必要になります
* `ServerName example.com`
* `ServerAlias www.example.com`

# certbotのインストール

次に、certbotをインストールして、apacheのプラグインで、自動設定を行います。

```shell
$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt -y install certbot python3-certbot-apache
$ sudo certbot --apache
```

これで自動設定が始まります。

* メールアドレスを入力

```shell
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):
```

* 規約に同意する必要があるので、aを入力してエンター

```shell
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel:
```

* シェアされたくないので、nを入力してエンター

```shell

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:
```

* https化するドメインを選択。ここで1を選択します。
（空欄で進めてもいいかも）

```shell
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: example.com
2: www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
```

* 問題がなければ、下のようなメッセージが表示されます

```shell

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.tk
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/000-default-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/000-default-le-ssl.conf
```

* リダイレクトするかどうか聞かれるので、2を選択します

```shell

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
```

* 成功したら、下のメッセージが表示されます

```shell

Congratulations! You have successfully enabled https://example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2020-11-20. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Some rewrite rules copied from
   /etc/apache2/sites-enabled/000-default.conf were disabled in the
   vhost for your HTTPS site located at
   /etc/apache2/sites-available/000-default-le-ssl.conf because they
   have the potential to create redirection loops.
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

```

# WordPress側の設定

apacheを再起動して、変更を反映させる前に、WordPressの設定を先に変えましょう
設定画面に行って、`WordPress アドレス (URL)`と`サイトアドレス (URL)`を変えます

![スクリーンショット 2020-08-22 11.18.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594064/82036505-e2fc-4895-8347-e45dce32e2b3.png)

保存できたら、`systemctl restart apache2`で再起動すれば、
https化できたはずだと思います