Let’s encrypt認証と自動更新

1.はじめに

最近WEBサービスではSSL通信が必須ですが、年に数万円という費用がかかるらしいです。最近のレンタルサーバーは無料を謳っているところも多くなってきましたが、自宅サーバーではこの数万円の費用は莫大な費用に値します。

そこで、無料でSSL通信のための証明書を発行してくれるLet’s Encryptサービスを利用してみました。

設定の前提として、

  • ルーターのポート80 と 443を開けておく必要があります
  • Webサーバーに nginx を使用していること

2.オレオレ認証を作る (NOT Secureの状態までで良い。)

一旦は自己認証(いわゆる「オレオレ認証」)のシステムを作成します。

いきなりLet’s Encrypt認証をやろうとすると、DDNS や wordpress で弾かれるし、nginx もエラーで再起動ができないからです。

(1)openssl のインストール

$ sudo pacman -S openssl

(2)認証キーの作成

$ sudo mkdir /etc/nginx/ssl

$ sudo cd /etc/nginx/ssl

$ sudo openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out cert.key

$ sudo chmod 600 cert.key

$ sudo openssl req -new -key cert.key -out cert.csr

$ sudo openssl x509 -req -days 365 -in cert.csr -signkey cert.key -out cert.crt

※ 途中入力するのは国、都市名ぐらいで良い。残りの項目はすべてEnterキーでパス。

3.certbot-nginxのインストールと認証のための準備

(1)certbot-nginx のインストール

$ sudo pacman -S certbot-nginx

(2)nginx 設定ファイルの修正と再起動

$ sudo nano /etc/nginx/nginx.conf

server_name localhost→認証を受けるサーバ名とドメインに変更

# 先ほど作成したオレオレ認証のキーを登録

ssl_certificate ssl/cert.crt;
ssl_certificate_key ssl/cert.key;

$ sudo nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

$ sudo systemctl restart nginx

この状態でhttps://でアクセスするとNOT Secureの状態になって画面は警告画面となる。

 4.認証及びnginxの設定変更

(1)認証

$ sudo certbot certonly –email メールアドレス –nginx -w /usr/share/nginx/html -d ドメイン名

※ 見づらいかもしれませんが email と nginx の前は –(ダブルハイフン)。w と d の前は – (シングルハイフン)、/usr/share/nginx/html は公開するディレクトリの表示です。配下にディレクトリーがあればすべて入力します(Wordpress を設置したディレクトリーです。)。

いよいよ認証手続きに入りました。

途中入力するのは、利用規約への同意とElectronic Frontierからのメールの送信への同意?だけです。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx

——————————————————————————-
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
——————————————————————————-
(A)gree/(C)ancel: A


2017/10/02 15:34:42 [notice] 1592#1592: signal process started
Waiting for verification…
Cleaning up challenges
2017/10/02 15:34:47 [notice] 1595#1595: signal process started

以下が表示されれば正常に認証されています。重要なのはアンダーラインの部分です。

IMPORTANT NOTES:

:公証鍵の保存先
– Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/ドメイン/fullchain.pem

:秘密鍵の保存先
Your key file has been saved at:
/etc/letsencrypt/live/ドメイン/privkey.pem

:有効期限
Your cert will expire on 2017-12-31. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
“certbot renew”
– 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

2023/02/01 追記

現在はだいぶ省略されており、入力する項目はなくなりました。認証に成功すると以下のメッセージが出力されます。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for example.domain.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.domain.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.domain.com/privkey.pem
This certificate expires on 2023-05-01.
These files will be updated when the certificate renews.
NEXT STEPS:
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

(2)nginx への登録(設定ファイルの修正)

$ sudo nano /etc/nginx/nginx.conf

server {

# serverブロックのオレオレ認証キーを新たに作成されたキーに変更

ssl_certificate /etc/letsencrypt/live/ドメイン/fullchain.pem; #公開鍵の保存先
ssl_certificate_key /etc/letsencrypt/live/ドメイン/privkey.pem; #秘密鍵の保存先

}

$ sudo nginx -t # 修正のテスト

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

 $ sudo systemctl restart nginx # 再起動

 5.自動更新

letsencrypt 認証によるsslキーは90日間有効(この例では12月31日まで)であり、その前に# certbot renew コマンドで手動更新できるが、自動更新できるようにしたい。

(1)サービスの作成

$ sudo nano /etc/systemd/system/certbot.service

[Unit]
Description=Let’s Encrypt renewal

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew –pre-hook “/usr/bin/systemctl stop nginx.service” –post-hook “/usr/bin/systemctl start nginx.service” –quiet –agree-tos
ExecStartPost=/bin/systemctl reload nginx.service

$ sudo nano /etc/systemd/system/certbot.timer

[Unit]
Description=Daily renewal of Let’s Encrypt’s certificates

[Timer]
OnCalendar=daily
RandomizedDelaySec=1day
Persistent=true

[Install] WantedBy=timers.target

(2)サービスの起動・有効化

$ sudo systemctl start certbot.timer

$ sudo systemctl enable certbot.timer

Created symlink /etc/systemd/system/timers.target.wants/certbot.timer → /etc/systemd/system/certbot.timer.

6.参考

https://wiki.archlinux.jp/index.php/Certbot

コメント

タイトルとURLをコピーしました