JPRSドメイン認証型証明書は直販のJPDirectの他、指定事業者からも購入できる。今回は証明書単体で購入できる指定事業者である、さくらインターネットから購入を行う。なお、他の事業者でも流れは変わらないはずだ。
ドメイン認証型証明書では「サーバー証明書の申請者がドメインを管理することができるか」が審査される。その方法として広く使われている方法は2つある。
メール認証
ドメインの管理者のメールアドレスに認証用ページのURLを記載したメールを送り、そのURLをクリックすることで認証するもの。宛先にはpostmasterやadminなど、管理者として想定されるメールアドレスや、ドメイン情報WHOISに登録されているメールアドレスが使用される。顧客からWebサイトの管理のみを委託されている場合など、ドメイン管理が別組織の場合は事前の調整が必要になる。
ファイル認証
Webサイト上の指定したURLに指定ファイルを設置し、それを認証局から確認してもらう方法。外部からアクセスできる必要があるため、開発機やリリース前サイトのように一般公開していないWebサイトでは部分的にアクセス可能にするなどの工夫が必要となる。
また、グローバルIPアドレスを持たない内部用サイトで取得する場合はワイルドカード証明書を利用する、一時的にグローバルIPアドレスを持つサーバで認証する、といった方法がある。
さくらインターネットの「さくらのSSL」ではファイル認証方式を採っている。なお、wwwあり・なしの両方のFQDNが使用できるダブルアドレスオプションが有効になっており、認証局がファイル認証のためにアクセスするWebサイトはwwwがない方になるので注意しよう。
認証局は認証用クローラーによってWebサイトにアクセスし、当該ファイルが設置されていることを確認する。以下は実際のApacheのアクセスログだ。認証用クローラーのリクエストに対し、認証用ファイルを設置するまで404(ファイルが見つからない)エラーが出ているが、最後の行でステータス200を返し認証が正常に終了したことが分かる。
203.208.23.40 - - [24/Apr/2018:02:38:58 +0900] "GET /.well-known/pki-validation/bcdc95ecc8e63346cd4763960febb3d7.txt HTTP/1.1" 404 261 "-" "JPRS_CA (web file authentication crawler)" 203.208.23.40 - - [24/Apr/2018:02:40:16 +0900] "GET /.well-known/pki-validation/bcdc95ecc8e63346cd4763960febb3d7.txt HTTP/1.1" 404 261 "-" "JPRS_CA (web file authentication crawler)" 203.208.23.40 - - [24/Apr/2018:02:48:57 +0900] "GET /.well-known/pki-validation/bcdc95ecc8e63346cd4763960febb3d7.txt HTTP/1.1" 200 32 "-" "JPRS_CA (web file authentication crawler)"
認証が正常に完了すれば認証用ファイルは削除して構わない。「[さくらインターネット]JPRS SSLサーバー証明書発行のお知らせ」というメールが届いたら発行完了なので、会員メニューからサーバー証明書をダウンロードする。サーバー証明書はserver.crtというファイル名になっているが、「pcuser.jp.crt」のようにFQDNをファイル名にしておくと分かりやすいだろう。
ダウンロードした証明書単体では証明パスが不完全なので、ルート証明書と今回のサーバー証明書の間を取り持つ中間CA証明書が必要になる。中間証明書はJPRSのサイトからダウンロード可能だ。
HTTPS対応にはTLSに対応した追加モジュールが必要となるが、ここでは広く利用されているmod_sslを利用する。まずはmod_sslパッケージが導入されているかどうかを確認しよう。「yum list installed」で導入済みパッケージが表示される。
[root@www ~]# yum list installed | grep mod_ssl [root@www ~]#
上記コマンドの結果が何も表示されない場合は未インストールなのでインストールを行う。
[root@www ~]# yum install mod_ssl 読み込んだプラグイン:fastestmirror, remove-with-leaves, show-leaves Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * extras: ftp.iij.ad.jp * updates: ftp.iij.ad.jp 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ mod_ssl.x86_64 1:2.4.6-67.el7.centos.6 を インストール --> 依存性解決を終了しました。 依存性を解決しました ========================================================================================================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 ========================================================================================================================================================================== インストール中: mod_ssl x86_64 1:2.4.6-67.el7.centos.6 updates 109 k トランザクションの要約 ========================================================================================================================================================================== インストール 1 パッケージ 総ダウンロード容量: 109 k インストール容量: 224 k Is this ok [y/d/N]: y Downloading packages: mod_ssl-2.4.6-67.el7.centos.6.x86_64.rpm | 109 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction インストール中 : 1:mod_ssl-2.4.6-67.el7.centos.6.x86_64 1/1 検証中 : 1:mod_ssl-2.4.6-67.el7.centos.6.x86_64 1/1 インストール: mod_ssl.x86_64 1:2.4.6-67.el7.centos.6 完了しました! New leaves: mod_ssl.x86_64 [root@www ~]#
mod_sslが導入されると合わせて「/etc/httpd/conf.d/ssl.conf」が作成される。デフォルト状態では「/etc/httpd/conf/httpd.conf」の中で「/etc/httpd/conf.d/*.conf」が読み込まれるようになっている。設定ファイルを書き換えている場合は「ssl.conf」が読み込まれる状態になっていることを確認しよう。
なお、初期状態ではmod_sslを導入した時点で作成されたローカルな証明書が登録されているため、Webブラウザで開いても無効な証明書となっている。
次に取得したサーバー証明書を導入する。今回、サーバー証明書は中間CA証明書とともに以下に配置した。
証明書: /etc/pki/tls/certs/pcuser.jp.crt
中間CA証明書: /etc/pki/tls/certs/JPRS_DVCA_G2_PEM.cer
なお、今回はCentOS7標準のApache2.4.6を対象としているが、Apache2.4.8以降では中間CA証明書ファイルを使用しないように変更されている。Apache2.4.8以降では中間CA証明書とサーバー証明書を1つにまとめたファイルをサーバー証明書として設定する。
「/etc/httpd/conf.d/ssl.conf」を開き、配置した証明書のパスに合わせて以下の設定を変更する。
ディレクティブ | 意味 | 元の値 | 今回の例 |
---|---|---|---|
SSLCertificateFile | サーバー証明書ファイルパス | /etc/pki/tls/certs/localhost.crt | /etc/pki/tls/certs/pcuser.jp.crt |
SSLCertificateKeyFile | 秘密鍵ファイルパス | /etc/pki/tls/private/localhost.key | /etc/pki/tls/private/pcuser.jp.key |
SSLCertificateChainFile | 中間CA証明書 | (コメントアウト)/etc/pki/tls/certs/server-chain.crt | /etc/pki/tls/certs/JPRS_DVCA_G2_PEM.cer |
また、ここでもう1つ気を付けてほしいのが暗号強度に関連した脆弱性の対策だ。HTTPSで使用できるプロトコルにはSSL、TLSそれぞれいくつかのバージョンがあるが、現在安全とされているのはTLS1.2以降のみとなってしまっている。そのため、全てのSSL、TLS1.1以前を無効化しておこう。
それから使用する暗号スイートにも脆弱性が指摘されているものが多々ある。詳しくはIPAが発行している「SSL/TLS暗号設定ガイドライン」などを参考にしてもらいたい。ここでは初期状態に加え、RC4、3DES、CBCモード、RSAを禁止した。
ディレクティブ | 意味 | 元の値 | 推奨値 |
---|---|---|---|
SSLProtocol | SSLプロトコル | all -SSLv2(SSLv2を禁止) | all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1(SSLv2/v3、TLS1.0/1.1を禁止) |
SSLCipherSuite | 暗号スイート | HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA(強度中/高:aNULL、MD5、SEED、IDEAを除く) | HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!RC4:!3DES:!CBC:!RSA(強度中/高:aNULL、MD5、SEED、IDEA、RC4、3DES、CBC、RSAを除く) |
設定が完了したら文法ミスがないか、configtestで確認後、再起動を行う。
# service httpd configtest Syntax OK ← このように表示されれば文法上は問題なし # systemctl restart httpd.service
環境によってはHTTPS通信で使用するポート443/TCPに外部から到達できるよう、ポートフォワーディングとファイアウォールを設定する必要がある。
これでようやく外部からHTTPS通信ができるようになったはずなので、Webブラウザから確認してみよう。Chromeの場合、アドレスバーに「保護された通信」と表示されるはずだ。
また、「保護された通信」の上でクリックし、証明書の下に表示された「有効」をクリックすると証明書の詳細を確認できる。「証明書のパス」タブを見るとルート証明書の「SECOM Trust Systems Co Ltd.」の次に中間CA証明書の「JPRS Domain Validation Authority - G2」があり、その次にサーバー証明書が表示されているはずだ。
また、SSL/TLSが正しく設定されているかどうかを診断してくれるサイトがあるので、チェックをしておくと良いだろう。
Copyright © ITmedia, Inc. All Rights Reserved.
提供:株式会社日本レジストリサービス
アイティメディア営業企画/制作:ITmedia PC USER 編集部/掲載内容有効期限:2018年8月2日