Ubuntu Server 18.04 LTS Nginx環境でLet’s Encryptによるhttps接続とhttp/2接続の設定(DNS-01認証+Cloudflare プラグイン/ワイルドカード証明書)

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

Ubuntu Server 18.04 LTS でNginx環境でのLet’s Encryptによるhttps接続とhttp/2接続の設定方法を備忘録としてまとめておきたいと思います。

以前に書いた記事(こちら)では、HTTP-01認証のwebroot方式でのSSL証明書取得手順をまとめましたが、今回はDNS-01認証をCloudflareプラグインを用いた方法でのSSL証明書取得手順をまとめておきたいと思います。
また、今回はワイルドカード証明書の取得手順となっております。

前提条件

DNSはCloudflare
WebサーバはNginx
を使用していること。

Let’s Encrypt(Certbot)のPPA追加

$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa:certbot/certbot
 This is the PPA for packages prepared by Debian Let's Encrypt Team and backported for Ubuntu(s).
 More info: https://launchpad.net/~certbot/+archive/ubuntu/certbot
Press [ENTER] to continue or Ctrl-c to cancel adding it.
#ENTERで追加・Ctrl+Cでキャンセル
$ sudo apt update

Let’s Encrypt(Certbot)インストール

$ sudo apt install certbot

Cloudflare連携プラグインインストール

$ sudo apt install python3-certbot-dns-cloudflare

Credentialファイルの作成

Cloudflareのログインメールアドレス・APIキーを書いたファイルを作成します。

$ sudo vim /etc/letsencrypt/cloudflare.ini

dns_cloudflare_email = cloudflareのログインメールアドレス
dns_cloudflare_api_key = cloudflareのGlobal API Key

Cloudflare Global API Key の確認方法
1.WebブラウザでCloudflareにログイン
2.右上のアイコンをクリック
3.My Profileをクリック
4.API Tokensをクリック
5.API Keys内のGlobal API Keyの右側にあるViewをクリック

Credentialファイルのパーミッションを変更します。

$ sudo chmod 600 /etc/letsencrypt/cloudflare.ini

Certbotを使って証明書の発行

hoge.comとワイルドカードの*.hoge.comの証明書を取得します。

$ sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini --dns-cloudflare-propagation-seconds 60 --server https://acme-v02.api.letsencrypt.org/directory -d hoge.com -d *.hoge.com

実行後に以下のようなレスポンスが返ってくる。
IMPORTANT NOTESの後にCongratulations!とあれば成功。
その後の/etc/letsencrypt~のパスが鍵の保存先。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator dns-cloudflare, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
#メールアドレスを入力
cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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を入力
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#EFFへメールメールアドレス登録するならYを入力
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for hoge.com
dns-01 challenge for hoge.com
Waiting 60 seconds for DNS changes to propagate
Waiting for verification...
Cleaning up challenges

#成功すると以下の様な文に鍵の保存先が書かれています。
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/hoge.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/hoge.com/privkey.pem
   Your cert will expire on XXXX-XX-XX. 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

Nginx設定ファイルの編集

#Nginxの設定ファイルを開く
#listen 443;の中に
#ssl_certificate サーバ証明書(署名済)のパス
#ssl_certificate_key サーバ秘密鍵(パスワード削除済)のパス
ssl_certificate /etc/letsencrypt/live/hoge.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/hoge.com/privkey.pem;
#を記述
設定ファイル全文例
  • 設定内容
    • http→https リダイレクト
    • https 有効化
    • http/2 有効化
    • php-fpm 有効化
    • WordPress パーマリンク 有効化
# /etc/nginx/sites-available/hoge.com_ssl
server {
  listen 80;
  server_name hoge.com;
  return 301 https://$host$request_uri;
}
server {
  listen 443 http2;
  ssl on;
  server_name  hoge.com;
  root   /var/www/html/hoge.com/wordpress;
  index  index.html index.htm index.php;
 ssl_certificate /etc/letsencrypt/live/hoge.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/hoge.com/privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ;
  ssl_ciphers HIGH:!aNULL:!MD5;
location / {
  try_files $uri $uri/ /index.php?q=$uri&$args;
  }
location ~ \.php$ {
  try_files $uri =404;
  fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
  }    
}
補足:Nginx新規設定ファイルの有効化方法

こちらの
Ubuntu Server 18.04 LTS Nginxのバーチャルホスト設定
の最後の方にシンボリックリンクを張る方法を載せております。

Nginxの再起動をする

$ sudo systemctl restart nginx

Timerを使ってCertbot自動更新設定

Serviceファイル作成

$ cd /etc/systemd/system
$ sudo vim certbot.service

[Unit]
#このServiceの説明(タイトル)
Description=Certot renew service


[Service]
Type=oneshot
#certbot renewコマンドを実行
ExecStart=/usr/bin/certbot renew --agree-tos
#Nginxの設定再読み込みを実行
ExecStartPost=/bin/systemctl reload nginx

Timerファイル作成

$ cd /etc/systemd/system
$ sudo vim certbot.timer

[Unit]
#このTimerの説明(タイトル)
Description=Certbot renew Timer

[Timer]
#実行する時間の設定(以下の場合、毎日朝6時に実行する設定)
OnCalendar=*-*-* 06:00:00
#実行するServiceファイルを指定
Unit=certbot.service

[Install]
WantedBy=timers.target
補足:OnCalendarの設定について

こちらの
Ubuntu Server 18.04 LTS Systemd/timerで定期実行する設定
にOnCalendarの設定項目として載せております。

Timerを有効化

$ sudo systemctl start certbot.timer
$ sudo systemctl enable certbot.timer

以上で、Ubuntu Server 18.04 LTSのNginx環境でLet’s Encrypt(DNS-01認証+Cloudflare プラグイン/ワイルドカード証明書)によるhttps接続とhttp/2接続の設定方法は終わりです。
お疲れ様でした。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください