1
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 1 year has passed since last update.

【無料SSL化】EC2でLet's EncryptのSSLサーバ証明書を取得する。再取得の自動化も

Last updated at Posted at 2020-08-21

やる事

Apacheで運用しているWebサイトに無料のLet's EncryptのSSLサーバ証明書を導入してWebサイトをSSL化(https://~)する。

環境

・AWS ec2(Amazon Linux2)
・Apache2.4

参考

Let’s Encrypt
Let’s EncryptにSSL証明書の取得の申請し、ウェブサイトをSSL化する【無料で初めてのhttps】

すでにやってある事と想定

・ec2にウェブサーバApacheはインストール済み、独自ドメインは取得済み、DNSのAレコードは設定済みで、「http://(独自ドメイン)」にアクセスできる状態。
・epelインストール済み
・ELBやACMは使わない。1つのec2での運用を想定。

Let's EncryptのSSL証明書を初めて取得する

Apacheの拡張モジュールmod_sslをインストールする。自分の環境ではopensslは最初から入っていたけど、opensslがないならインストールも必要だと思います。

$ sudo yum -y install mod_ssl

続いて、Let's EncryptのSSL証明書を取得するためにcertbotをインストールする。

$ sudo yum -y install certbot

そして、Let's EncryptのSSL証明書等を取得します。
ここでは、(独自ドメイン)と(www.独自ドメイン)をSSL化して、https://(独自ドメイン)とhttps://(www.独自ドメイン)でアクセスできるようにします。
あと、下のコマンドはApacheは起動したままだとエラーが出たので、停止してから実行しました。

$ sudo certbot certonly --standalone -d (独自ドメイン) -d (www.独自ドメイン) -m (EMAIL)
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for (独自ドメイン)
http-01 challenge for (www.独自ドメイン)
Waiting for verification...
Cleaning up challenges
〜

これで問題なくできていれば、SSLサーバ証明書(中間証明書込み)と秘密鍵が以下のパスに生成される(下のパスはシンボリックリンク)。

#SSLサーバ証明書(中間証明書込み)、
/etc/letsencrypt/live/(独自ドメイン)/fullchain.pem
#秘密鍵
/etc/letsencrypt/live/(独自ドメイン)/privkey.pem

続いて、取得したSSLサーバ証明書と秘密鍵をApacheに導入するためにssl.confファイルを編集します。編集箇所は2箇所です。
SSLCertificateFile /etc/pki/tls/certs/localhost.crtSSLCertificateKeyFile /etc/pki/tls/private/localhost.keyの2行をコメントアウトし、取得したSSLサーバ証明書と秘密鍵のパスを新しく指定します。

/etc/httpd/conf.d/ssl.conf
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/letsencrypt/live/(独自ドメイン)/fullchain.pem

#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/letsencrypt/live/(独自ドメイン)/privkey.pem

以上で終了ですので、Apacheを起動します。
アクセスするとブラウザのURLの左に鍵アイコンができていて、証明書を見るとLet's Encryptとなっていました。

Let's EncryptのSSL証明書の更新(再取得)をcronで自動化(2回目以降)

参考

Let’s EncryptのSSL証明書を更新する(手動とcronによる自動更新)

Let's EncryptのSSL証明書の有効期限は3ヶ月なので、有効期限が切れる前にSSL証明書を取得し直す必要があります。

ただSSL証明書の再取得を手作業でするのは面倒、SSL証明書の更新処理は自動化したいので、cronで設定する。

$ crontab -l
5 5 2,17 * * sudo certbot renew --pre-hook "systemctl stop httpd" --post-hook "systemctl start httpd"

月2回(2日と17日)、5時5分に実行するようにしています。
月2回実行しているのは、更新処理を失敗したときなどを考えて余裕を持つためです。
Let's EncryptのSSL証明書の再取得は、証明書の有効期限が1ヶ月を切らないとできません。1ヶ月以上ある時に取得処理を申請しても証明書の取得処理がスルーされるだけ。

あと、上のコマンドでは、--pre-hookでApacheを停止してからcertbot renewコマンドを実行して、--post-hookでApahceを起動しなおしています。

これで設定は完了です。あとは実際にcronが実行してくれて、SSL証明書を再取得してくれることを祈るのみです。

1
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
1
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?