Let’s Encryptの証明書更新でハマってしまった時のメモ…

# なんでハマってしまったか
先に結論から言ってしまうと、ルーターの80番ポートの開放をしていなかったことに気がつかなかったからです…😭
それに、このサーバーはこのブログと、配信しているアプリのAPIサーバーをになっているので、頑張ってサーバーを調べてもおかしな所がなくて、かなり焦りました(笑)

# 対処法
色々調べて環境がぐちゃぐちゃになってからの、リセット→再取得までをまとめます。
私自身あまりサーバーサイドの知識が詳しく無いのと、やっていることが冗長になっている所があるかもしれないで、詳しい方がいたら教えて頂きたいです…🙇‍♂️🙇‍♂️🙇‍♂️

## ルーターとファイアウォールのポートを確認

ルーターは各々で設定方法が違うので触れないですが、80番ポートの開放を忘れないようにしましょう。(まじで大事)
ファイアウォールは、`sudo ufw status`を確認することで80番ポートが開放されているか確認できます。
そこで80番ポートが開放されていなかったら以下のコマンドで開放してリロードしましょう。

```shell
sudo ufw allow 80/tcp
sudo ufw reload
```

## とりあえず証明書関連を全部リセット

色々と試行錯誤しすぎて汚くなってしまったので、まずは/etc/letsencryptの中身を削除していきます。
 
```shell
sudo rm -rf /etc/letsencrypt
```
そして、certbotコマンドも一旦削除してgithubから直接cloneしてきます。

```shell
sudo apt remove certbot
sudo apt autoremove
```
cloneする場所は任意ですが、自分は/usr/shareのなかにcloneしました。

```shell
cd /usr/share
sudo git clone https://github.com/certbot/certbot
```

## ApacheのSSL設定をコメントアウトする

以前SSLの設定しており、以下の行をコメントアウトしていないと証明書取得に、必要なパッケージがインストールができなくなってしまうので、/etc/apache2/sites-available/default-ssl.confを編集します。

```conf:/etc/apache2/sites-available/default-ssl.conf
#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
# SSLEngine on   ← ここ！！

#   A self-signed (snakeoil) certificate can be created by installing
#   the ssl-cert package. See
#   /usr/share/doc/apache2/README.Debian.gz for more info.
#   If both key and certificate are stored in the same file, only the
#   SSLCertificateFile directive is needed.
# SSLCertificateFile	/etc/letsencrypt/live/reishisu.xyz/fullchain.pem   ← ここ！！
# SSLCertificateKeyFile   /etc/letsencrypt/live/reishisu.xyz/privkey.pem   ← ここ！！
```

## 証明書取得に必要なパッケージのインストール

cloneしたディレクトリの中に入って、以下のコマンドを入力する。

```shell
cd certbot
./certbot-auto
```
その時に入力を迫られたら、cを押して抜けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241870/d9d0fb36-984e-55cc-89e6-5b75c1c17a1e.png)

## 証明書の取得

以下のコマンドを打つことで、証明書の取得を行います。

```shell
sudo ./certbot-auto certonly --webroot \
-w 証明書を導入したいディレクトリ \
-d 自分のドメイン \
--email 自分のメールアドレス \
--agree-tos
```

- 証明書を導入したいディレクトリ
  - ドキュメントルートなど。
  - (例) /var/www/html
- 自分のドメイン
  - 自分の場合だと、reishisu.xyzみたいな。
- 自分のメールアドレス
  - 証明書の有効期限などの通知がくる。

そうすると、今度は以下のように入力したメールアドレスを共有しても良いですか？って聞かれるので、いい方はY、嫌な方はNを押します。(私はNを押しました)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241870/8853b880-a6b4-642c-6352-22861129fe11.png)

そうしたら、ぐあ〜って進むので画像のようなIMPORTANT NOTES:の下にCongratulations! が出てきたら取得完了です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241870/538ec698-6bf3-4b93-f0a5-08a31e43707a.png)

あとは、/etc/letsencryptに証明書などの色々なファイルとディレクトリができていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241870/0cff606c-63fe-e8c6-9280-30e4b5b677ec.png)

## ApacheのSSLを有効化する

先ほどのコメントアウトした部分を解除するだけです✨

```shell
sudo vim /etc/apache2/sites-available/default-ssl.conf
```
任意のエディタでファイルを開き

```conf:/etc/apache2/sites-available/default-ssl.conf
#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on   ← ここ！！

#   A self-signed (snakeoil) certificate can be created by installing
#   the ssl-cert package. See
#   /usr/share/doc/apache2/README.Debian.gz for more info.
#   If both key and certificate are stored in the same file, only the
#   SSLCertificateFile directive is needed.
SSLCertificateFile	/etc/letsencrypt/live/reishisu.xyz/fullchain.pem   ← ここ！！
SSLCertificateKeyFile   /etc/letsencrypt/live/reishisu.xyz/privkey.pem   ← ここ！！
```

先ほどコメントアウトした部分を解除します。

## Apacheを再起動！！

以下のコマンドでApacheを再起動します。

```shell
sudo service apache2 restart
```
以上で証明書の入れ直しが完了です✨✨

# 更新方法

今回は入れ直しをしたため面倒だったのですが、次からは以下のコマンドを入力して一発で証明書を更新することができます！！

```shell
sudo /usr/share/certbot/certbot-auto renew --post-hook 'sudo service apache2 restart'
```
renewをつけるだけで、自動生成された`/etc/letsencrypt/renewal/指定したドメイン.conf`の設定ファイルが呼び出されて面倒な入力が要らなくなります。
そして、–post-hookをつけることで更新があった時だけ’sudo service apache2 restart’が実行される便利機能があります😆