ウェブサーバをhttps化する

ここで書き留めておいた最後の手順、サイトのhttps化の手順をまとめておきましょう。
サーバ証明書にはLet’s Encryptを利用することにします。
なお、基本的にはこちらのリンク先にある情報の通りに行うことで完了しましたので、詳細等はそちらをみていただければと思います(以下のフローはリンク先の情報にある通りです)。

  1. hostコマンドのインストール
    # yum install bind-utils
    ホスト名(FQDN)からIPアドレスを参照できる必要があるため。
    そこでそのコマンドであるhostコマンドをインストールする。
    # host boota.mydns.jp
    boota.mydns.jp has adress 123.456.789.012

    などと返ってくることを確認。
  2. ファイアウォールを設定(うちのサーバではiptables)
    firewallスクリプトに
    iptables -A INPUT -p tcp -s $ソースアドレス -d $ディスティネーションアドレス –dport 443 -j ACCEPT
    を加え、httpsを通すようにしておく。
  3. 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を一意に決められない旨のエラーメッセージが出る)。
  4. httpsd再起動、ステータスチェック
    # systemctl restart httpsd
    # systemctl status httpsd
    Active: active (running) 
    があればapacheはSSLモジュールを読み込んで起動していると判断してOK。
  5. サーバ証明書(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

  6. サーバ証明書の作成
    サーバのドキュメントルート(例:/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・・・秘密鍵
    とのこと。
  7. 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。
  8. 証明書の更新
    # certbot renew –dry-run
    (–dry-runオプションはテスト用のオプション)
    Congratulations, all simulated renewals succeeded:   /etc/letsencrypt/live/boota.mydns.jp/fullchain.pem (success)
    が表示されていれば更新は成功している。
  9. 証明書の更新を自動で行うようにする(証明書の有効期限切れ防止対策)
    # 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のトップページが表示される・・・はずです。

+1

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)