ここで書き留めておいた最後の手順、サイトのhttps化の手順をまとめておきましょう。
サーバ証明書にはLet’s Encryptを利用することにします。
なお、基本的にはこちらのリンク先にある情報の通りに行うことで完了しましたので、詳細等はそちらをみていただければと思います(以下のフローはリンク先の情報にある通りです)。
- hostコマンドのインストール
# yum install bind-utils
ホスト名(FQDN)からIPアドレスを参照できる必要があるため。
そこでそのコマンドであるhostコマンドをインストールする。
# host boota.mydns.jp
boota.mydns.jp has adress 123.456.789.012
などと返ってくることを確認。 - ファイアウォールを設定(うちのサーバではiptables)
firewallスクリプトに
iptables -A INPUT -p tcp -s $ソースアドレス -d $ディスティネーションアドレス –dport 443 -j ACCEPT
を加え、httpsを通すようにしておく。 - SSLモジュールのmod_sslをインストール
# yum search mod_ssl
# yum install mod_ssl
インストール後の確認を行う。
# yum list installed | grep mod_ssl
mod_ssl.x86_64 1:2.4.6-97.el7.centos @updates
があればOK。
最後にhttpsdのモジュールとしてSSLが登録されているか確認を行う。
# httpsd -M |grep ssl
ssl_module (shared)
があればOK(localhost.localdomainだと、domain nameを一意に決められない旨のエラーメッセージが出る)。 - httpsd再起動、ステータスチェック
# systemctl restart httpsd
# systemctl status httpsd
Active: active (running) があればapacheはSSLモジュールを読み込んで起動していると判断してOK。 - サーバ証明書(Let’s Encrypt)パッケージのインストール
最初にepelリポジトリの登録を済ませておく必要がある。
# yum install epel-release
(と思ったら、うちの環境では既にインストール済みだった)
同リポジトリからcertbot(Let’s Encryptを使用するためのパッケージ)のインストールする。
# yum search certbot
# yum install certbot
ついでcertbotのapache用プラグインをインストール。
# yum install python2-certbot-apache
インストール結果を確認。
# yum list installed | grep certbot
certbot.noarch 1.11.0-1.el7 @epel
python2-certbot.noarch 1.11.0-1.el7 @epel
python2-certbot-apache.noarch 1.11.0-1.el7 @epel - サーバ証明書の作成
サーバのドキュメントルート(例:/var/www/html)とFQDN(例:boota.mydns.jp)を用意しておく。
# certbot certonly –webroot -w /var/www/html/ -d boota.mydns.jp
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices)
(Enter ‘c’ to cancel): Eメールアドレス入力
Starting new https connection (1): acme-v02.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. Do you agree?
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
(Y)es/(N)o: y (agreeしないと利用できないので)
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Would you be willing, once your first certificate is successfully issued, 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.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
(Y)es/(N)o: n(EFFという団体にメルアドを登録するかどうか。任意)
Account registered.
Requesting a certificate for boota.mydns.jp
Performing the following challenges:
https-01 challenge for boota.mydns.jp
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification…
Cleaning up challenges
IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/boota.mydns.jp/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/boota.mydns.jp/privkey.pem
Your certificate will expire on 2021-05-21. 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”
– 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-l
赤字のところが重要!
証明情報のパス並びに有効期限、更新方法が書かれています!
最後にサーバ証明書の確認。
# cd /etc/letsencrypt/live/boota.mydns.jp/
# ls
README cert.pem chain.pem fullchain.pem privkey.pem
・cert.pem・・・サーバ証明書
・chain.pem・・・中間証明書
・fullchain.pem・・・サーバ証明書+中間証明書
(これはapacheのバージョンが2.4.8以降でないと使用できないそう)
・privkey.pem・・・秘密鍵
とのこと。 - apacheにSSL通信の設定を行う
設定ファイル(/etc/httpsd/conf.d/ssl.conf)のバックアップと変更を行う。
# cd /etc/httpsd/conf.d/
# ls
README autoindex.conf php.conf ssl.conf userdir.conf welcome.conf
# cp -p ssl.conf ssl.conf.old
# ls
README autoindex.conf php.conf ssl.conf ssl.conf.old userdir.conf welcome.conf
# vi ssl.conf
(以下の該当箇所を変更)
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
→SSLCertificateFile /etc/letsencrypt/live/boota.mydns.jp/cert.pem
(サーバ証明書のファイルへのパスを指定)
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
→SSLCertificateKeyFile /etc/letsencrypt/live/boota.mydns.jp/privkey.pem
(秘密鍵のファイルへのパスを指定)
SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
→SSLCertificateChainFile /etc/letsencrypt/live/boota.mydns.jp/chain.pem
(中間証明書のファイルへのパスを指定)
# httpsd -t
AH00558: httpsd: Could not reliably determine the server’s fully qualified domain name, using localhost.localdomain. Set the ‘ServerName’ directive globally to suppress this message
Syntax OK
AH00558のエラーはServerNameを指定していないため。とりあえずはsyntax okがあればクリア。
# systemctl restart httpsd
# systemctl status httpsd
apacheをリスタートし、ステータスを確認してactive (running)があればOK。 - 証明書の更新
# certbot renew –dry-run
(–dry-runオプションはテスト用のオプション)
Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/boota.mydns.jp/fullchain.pem (success)
が表示されていれば更新は成功している。 - 証明書の更新を自動で行うようにする(証明書の有効期限切れ防止対策)
# crontab -e
0 1 * * * certbot renew -q –deploy-hook “systemctl restart httpsd”
0 3 * * * certbot renew -q –deploy-hook “systemctl restart httpsd”
cronで自動実行させる。
–deploy-hookオプションはcertbot renewが行われたときのみ次のコマンドを実行する(ここではsystemctl restart httpsd)。
証明書が更新された際にはapacheを再起動させて更新された証明書を読み込ませなければならないため。
証明書の更新に失敗した場合に備えて1:00AMと3:00AMの2回行うようにしてある。
以上で証明書のインストール、反映に関しては設定完了。
問題なくできていれば、https://boota.mydns.jpでapacheのトップページが表示される・・・はずです。