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接続の設定方法は終わりです。
お疲れ様でした。