WebサーバのSSL証明書の設定・更新方法です。

証明書取得の準備

SSL証明書を取得するには、サーバを固有の秘密鍵と公開鍵のセット(キーペア)と、サーバについての情報となる正式なURLや所属情報とを先に決めます。

これらを準備したのち、公開鍵とサーバについての情報を取りまとめた CSR を作成します。

キーペアの作成とCSRの作成は弊社で準備することもできます。

証明書の取得

CSRを認証局に提出し、証明書を発行してもらいます。この手続きは弊社で代行することもできます。

 

証明書の確認と設置

発行された証明書を送っていただければ、設置と反映の操作は弊社で行うことができます。

WebClass では Apache を利用しています。証明書ファイルの設置、設定ファイルの変更と、サーバのリロードの流れを説明します。

まずは証明書の内容があっているかどうかと、キーと証明書の一致を確認します。キーとの一致はmd5 のハッシュが一致していれば大丈夫です。もしOKであれば、Apache が自動的にキーをロードできるよう、キーのパスワードを解除します。

$ cd /etc/apache2/ssl-2019
$ ls
your_site.key  your_site.cer ca_chain.cer

$ # check cert
$ openssl x509 -noout -modules -in your_site.cer -subject
$ openssl x509 -noout -modules -in your_site.cer -dates

$ # check pair
$ openssl x509 -noout -modulus -in your_site.cer | openssl md5
$ openssl rsa -noout -modules -in your_site.key | openssl md5
$
$ # decypt key
$ openssl rsa -in your_site.key -out your_site.nopass.key

Apache の設定を編集し、証明書ファイル、パスワード解除鍵ファイル、中間証明書ファイルのパスを指定します。指定が間違っているなどファイル読めないと、Apache リロード時にエラーが出ます。そこでapache2ctl configtest コマンドを使って、証明書の指定や、その他設定の記述に誤りがないか確認しておきます。

$ apache2ctl configtest
Syntax OK

なお、Apache の設定ファイルの変更は当日に行うのが良いです。早朝にCRON 等で logrotate を設定している場合、そこで自動的に apache がリロードしている可能性があります。意図せぬタイミングで更新した設定が再読み込みされる可能性があります。

サーバへの反映と確認

リロードには Apache の graceful という再起動方法を使用します。この方法を使うことで、ちょうど利用者がWebサーバに対してリクエスト処理を投げたところのタイミングであったとしても、急にプロセスを殺してしまわないで、処理を終えてから再起動がかかります。したがって、特にサービスの停止は必要ありません。念のため、利用者が空いている時間帯で実施すればよいです。

実際の操作コマンドとしては、Debain でも RHEL でも systemctl reload apache2  もしくは systemctl reload httpd とコマンドを実行すると、実際には graceful が行われます。

# systemctl reload apache2

その後、ブラウザで開いて証明書をチェックするか、サーバから localhost あてに SSL 証明書のチェックを行います。特に Web サーバが複数大ある場合で、それぞれに SSL 証明書をインストールしている場合は、Webサーバ上で確認する方が確実です。以下のコマンドで確認します。your_site は公開しているFQDNにします。バーチャルホストで複数のURLがあるときも、-servername の切り替えによってチェックし分けることができます。

$ openssl s_client -connect localhost:443 -servername your_site  -showcerts | openssl x509 -noout -subject
$ openssl s_client -connect localhost:443 -servername your_site  -showcerts | openssl x509 -noout -dates