はじめに
本ブログをやっと、SSL/TLS 化しました。
Let’s Encrypt を認証局として、これの公式ツールである certbot を使用して、リバースプロキシもWebサーバも構築している Nginx に SSL/TLS を導入しましたので、その記録を試行錯誤も含めて記録してまいります。
まとめ
- nginx 設定ファイルの書き換えも certbot に委ねたい場合、nginx 設定ファイルに日本語を入れるとエラーとなるため事前に削除しておく。
- 作業前に、ファイアーウォール設定を変更して https の 443 ポートは開けておくとよい。
- WordPress データベースの URL を修正するには、wp-cli を使えるようにして
wp search-replace 'beforeurl' 'afterurl'
とするのが楽。
進め方
にしたがって進めました。次のようなことを行いました。
- certbot の実行(認証局(CA:Certification Authority) が Let’s Encrypt である証明書をインストール)。そしてエラー
- エラー対処。nginx 設定ファイル修正し、certbot 再実行。成功!
- SSL/TLS の URL にアクセス。エラー発生><。ファイアーウォール設定
- SSL/TLS の URL にアクセス。表示が変><。CSS、JavaScript の URL 修正
- SSL/TLS の管理者 URL にアクセス。エラー発生><。リバースプロキシ使用時の WordPress 設定ファイル修正
certbot の実行(認証局(CA:Certification Authority) が Let’s Encrypt である証明書をインストール)。そしてエラー
# root ユーザで作業 su - # certbot インストール yum --enablerepo=epel install python2-certbot-nginx # 指定したパッケージ以外にも、certbot もきちんとインストールされました。 # 証明書のインストール certbot --nginx
結果、以下のようなエラーとなりました><。
なお、次の質問は No で良かったように感じます。
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 EFF and
our work to encrypt the web, protect its users and defend digital rights.
# certbot --nginx Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): oki2a24@gmail.com Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org ------------------------------------------------------------------------------- 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-v01.api.letsencrypt.org/directory ------------------------------------------------------------------------------- (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 EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: Y Starting new HTTPS connection (1): supporters.eff.org No names were found in your configuration files. Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel): oki2a24.com Obtaining a new certificate Performing the following challenges: http-01 challenge for oki2a24.com Cleaning up challenges An unexpected error occurred: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 2: ordinal not in range(128) Please see the logfiles in /var/log/letsencrypt for more details. IMPORTANT NOTES: - 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. #
エラー対処。nginx 設定ファイル修正し、certbot 再実行。成功!
エラー内容を読んでみると、nginx 設定ファイルに日本語が入っているのが原因のようです。
python を対応できるようにするか、日本語を消し去るかのどちらかの対処法を思いつきましたけれども、今回は、コメントとして記述した日本語を削除することとしました。
手順は次のとおりです。
- vim で対象ファイルを開く。
- /etc/nginx/nginx.conf
- /etc/nginx/conf.d/default.conf
- /# でコメント行を検索
- :g//d で検索にヒットした行を削除
もう一度実行してみますと、うまくいきました♪
# certbot --nginx Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org No names were found in your configuration files. Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel): oki2a24.com Obtaining a new certificate Performing the following challenges: http-01 challenge for oki2a24.com Waiting for verification... Cleaning up challenges Deploying Certificate to VirtualHost /etc/nginx/conf.d/default.conf Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. ------------------------------------------------------------------------------- 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. ------------------------------------------------------------------------------- Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/default.conf ------------------------------------------------------------------------------- Congratulations! You have successfully enabled https://oki2a24.com You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=oki2a24.com ------------------------------------------------------------------------------- IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/oki2a24.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/oki2a24.com/privkey.pem Your cert will expire on 2018-09-20. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - 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 #
SSL/TLS の URL にアクセス。エラー発生><。ファイアーウォール設定
http://oki2a24.com ヘアクセスすると、早速リダイレクトされ、https://oki2a24.com へとアクセスしました。
だがしかし、接続が拒否され、エラー。。。
それもそのはず、ファイアーウォール設定で、https (443) ポートを開放していませんでした。。。次のコマンドで開放しました。
firewall-cmd --permanent --add-service=https firewall-cmd --reload firewall-cmd --list-all # services: ssh dhcpv6-client http https と出力されていれば、OK
そしてふたたび https://oki2a24.com へとアクセスすると、、、
SSL/TLS の URL にアクセス。表示が変><。CSS、JavaScript の URL 修正
ページは表示されたものの、デザインがとても変です。
CSS、JavaScript が効いていないのでしょう。
これはおそらく、WordPress 側のアドレス(URL)設定です。
wp-cli コマンドでまるっと置換します。
cd /srv/wordpress/ wp search-replace 'http://oki2a24.com' 'https://oki2a24.com' --dry-run wp search-replace 'http://oki2a24.com' 'https://oki2a24.com'
実施ログは次のようになりました。
# wp search-replace 'http://oki2a24.com' 'https://oki2a24.com' +-------------------------+-----------------------+--------------+------+ | Table | Column | Replacements | Type | +-------------------------+-----------------------+--------------+------+ | wpoki2a24_commentmeta | meta_key | 0 | SQL | | wpoki2a24_commentmeta | meta_value | 35 | PHP | | wpoki2a24_comments | comment_author | 0 | SQL | | wpoki2a24_comments | comment_author_email | 0 | SQL | | wpoki2a24_comments | comment_author_url | 349 | SQL | | wpoki2a24_comments | comment_author_IP | 0 | SQL | | wpoki2a24_comments | comment_content | 21 | SQL | | wpoki2a24_comments | comment_approved | 0 | SQL | | wpoki2a24_comments | comment_agent | 0 | SQL | | wpoki2a24_comments | comment_type | 0 | SQL | | wpoki2a24_links | link_url | 0 | SQL | | wpoki2a24_links | link_name | 0 | SQL | | wpoki2a24_links | link_image | 0 | SQL | | wpoki2a24_links | link_target | 0 | SQL | | wpoki2a24_links | link_description | 0 | SQL | | wpoki2a24_links | link_visible | 0 | SQL | | wpoki2a24_links | link_rel | 0 | SQL | | wpoki2a24_links | link_notes | 0 | SQL | | wpoki2a24_links | link_rss | 0 | SQL | | wpoki2a24_options | option_name | 0 | SQL | | wpoki2a24_options | option_value | 11 | PHP | | wpoki2a24_options | autoload | 0 | SQL | | wpoki2a24_postmeta | meta_key | 0 | SQL | | wpoki2a24_postmeta | meta_value | 1 | PHP | | wpoki2a24_posts | post_content | 2302 | SQL | | wpoki2a24_posts | post_title | 0 | SQL | | wpoki2a24_posts | post_excerpt | 0 | SQL | | wpoki2a24_posts | post_status | 0 | SQL | | wpoki2a24_posts | comment_status | 0 | SQL | | wpoki2a24_posts | ping_status | 0 | SQL | | wpoki2a24_posts | post_password | 0 | SQL | | wpoki2a24_posts | post_name | 0 | SQL | | wpoki2a24_posts | to_ping | 0 | SQL | | wpoki2a24_posts | pinged | 112 | SQL | | wpoki2a24_posts | post_content_filtered | 578 | SQL | | wpoki2a24_posts | guid | 5859 | SQL | | wpoki2a24_posts | post_type | 0 | SQL | | wpoki2a24_posts | post_mime_type | 0 | SQL | | wpoki2a24_term_taxonomy | taxonomy | 0 | SQL | | wpoki2a24_term_taxonomy | description | 0 | SQL | | wpoki2a24_termmeta | meta_key | 0 | SQL | | wpoki2a24_termmeta | meta_value | 0 | SQL | | wpoki2a24_terms | name | 0 | SQL | | wpoki2a24_terms | slug | 0 | SQL | | wpoki2a24_usermeta | meta_key | 0 | SQL | | wpoki2a24_usermeta | meta_value | 0 | PHP | | wpoki2a24_users | user_login | 0 | SQL | | wpoki2a24_users | user_nicename | 0 | SQL | | wpoki2a24_users | user_email | 0 | SQL | | wpoki2a24_users | user_url | 1 | SQL | | wpoki2a24_users | user_activation_key | 0 | SQL | | wpoki2a24_users | display_name | 0 | SQL | +-------------------------+-----------------------+--------------+------+ Success: Made 9269 replacements. #
まだダメです><。
SSL/TLS の管理者 URL にアクセス。エラー発生><。リバースプロキシ使用時の WordPress 設定ファイル修正
管理画面にアクセスしようとすると、表示できず、リダイレクトが繰り返し行われました、とエラーです。
これは、難しそうです。検索し、調べました。次のページが解決方法と当たりをつけました。
- エックスサーバーでWordpressをSSL化(https)する時に無限ループでハマった – Qiita
- 管理画面での SSL 通信 – WordPress Codex 日本語版
- SSLによる ログインと管理画面へのアクセスを強制する
- リバースプロキシの使用
WordPress 設定ファイルを修正し、次の 2 つを追加しました。
/** SSL ログイン・管理画面アクセスを強制する */ define('FORCE_SSL_ADMIN', true); /** リバースプロキシの使用時に、無限リダイレクトループを避ける */ $_SERVER['HTTPS'] = 'on';
上記のように設定し、無事管理画面にログインすることができました。
ブログのページは崩れたままでしたので、Nginx Cache を削除し、再表示してみたところ、うまくいきました!
おわりに
certbot を導入し、Let’s Encrypt の SSL 証明証 をインストールするところまでをやってみる予定でした。
けれども、certbot が nginx の設定まで書き換えてくれましたので、それによるエラー対処を行っているうちに、TLS/SSL 導入が最後まで完了してしまいました。
ただし、まだ残っている作業や、振り返りたいことがありますので、引き続き作業して行きたいと思います。
- 残作業
- certbot renew 設定
- 確認したいこと
- certbot によって作られた作成ファイルの確認
- 書き換えられた設定ファイルの中身。/etc/nginx…
- 外部サービスの修正
最後に、参考ページです。ありがとうございます!
- Lets’ Encrypt + certbot + NginxでSSL – Qiita
- Let’s Encrypt+NginxでSSL証明書発行、自動更新の設定方法 – Qiita
- Let’s Encryptを証明書取得から証明書更新cron設定まで一気に設定するAnsible Role – Qiita
- 【Nginx】リバースプロキシとSSLオフロード(SSLアクセラレーション) | ぴぐろぐ
- Keycloakにnginxリバースプロキシでhttpsでアクセスする – YoshinoriN’s Memento
以上です。