それでは、実際に稼働中のWebサイトにJPRSドメイン認証型証明書を導入し、HTTPS化してみよう。今回は証明書を単体で購入し、筆者が個人的に利用しているIDCFクラウド上に構築したWebサイトに導入する手順を紹介する。なお、事業者にサーバの管理を任せている場合は、このプロセスは不要かもしれないが、今回は実際のコマンドとあわせて説明する。
FQDNはwww.pcuser.jp、WWWサーバはCentOS 7.4 + Apache 2.4.6で構築しており、pcuser.jpにアクセスするとwww.pcuser.jpにリダイレクトされるようにした。
証明書の発行の流れは紙ベースの証明書をイメージすると理解しやすい。申請者は申請書に証明してもらいたい事項を記入して認証局に提出する。認証局は「この内容が正しいことを証明する」と署名して返却する。この申請書にあたるものがCSR(Certificate Signing Request:証明書署名要求)であり、認証局の署名入りで返却されたものが証明書になる。
また、CSRにはHTTPSの暗号通信で使用する公開鍵も含んでおり、その公開鍵に対応する秘密鍵を持ったサーバだけが当該証明書を利用できる。そのため、申請には以下の手順が必要となる。
順番に見ていこう。
秘密鍵・CSRは原則、サーバー証明書を導入する予定のサーバ上で作成する。ファイルの保存場所、命名規則に特に制限はないので、今回は以下のようにした。
秘密鍵: /etc/pki/tls/private/pcuser.jp.key
CSR: /etc/pki/tls/certs/pcuser.jp.csr
秘密鍵作成時にはパスフレーズを設定するが、そのままだと再起動時にパスフレーズを入力したり、パスフレーズを出力するスクリプトを用意したりする必要がある。今回は秘密鍵作成後にパスフレーズを削除しておく。
まずはパスフレーズ付きの秘密鍵を作成する。
# openssl genrsa -aes256 2048 > /etc/pki/tls/private/pcuser.jp.pp.key Generating RSA private key, 2048 bit long modulus ..............................................................+++ ...............+++ e is 65537 (0x10001) Enter pass phrase: [パスフレーズを入力] Verifying - Enter pass phrase: [パスフレーズを再入力]
次に秘密鍵からパスフレーズを解除する。パスフレーズを解除しない方がセキュリティ上は安全だが、その場合はApacheの再起動時にパスフレーズを入力するか、自動入力の仕組みを作っておく必要がある。
# openssl rsa -in /etc/pki/tls/private/pcuser.jp.pp.key -out /etc/pki/tls/private/pcuser.jp.key Enter pass phrase for /etc/pki/tls/private/pcuser.jp.pp.key: [パスフレーズを入力] writing RSA key
秘密鍵は秘匿する必要があるファイルなので、Apacheを起動する管理者以外は見られないようにパーミッションを変更しておく。パスフレーズありの秘密鍵は使用しないので削除してよい。
# rm /etc/pki/tls/private/pcuser.jp.pp.key rm: 通常ファイル `/etc/pki/tls/private/pcuser.jp.pp.key' を削除しますか? y ← yを入力 # chmod 600 /etc/pki/tls/private/pcuser.jp.key
引き続きCSRを作成する。CSRには申請情報を含めるので、以下を事前に決めておく必要がある。
今回はドメイン認証なので、正しい情報として保証されるのはCommon Nameのみとなる。だが、利用者への情報提供という観点から上記の情報までは正しく入力しておこう。それ以外の情報は入力不要だ。
# openssl req -new -key /etc/pki/tls/private/pcuser.jp.key -out /etc/pki/tls/certs/pcuser.jp.csr -sha256 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:JP ← 国コードを入力 State or Province Name (full name) []:Tokyo ← 都道府県名を入力 Locality Name (eg, city) [Default City]:Chiyoda-ku ← 市区町村名を入力 Organization Name (eg, company) [Default Company Ltd]:ITmedia Inc. ← 組織名を入力 Organizational Unit Name (eg, section) []: ← 入力不要 Common Name (eg, your name or your server's hostname) []:pcuser.jp ← FQDNを入力 Email Address []: ← 入力不要 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: ← 入力不要 An optional company name []: ← 入力不要
opensslコマンドオプションの意味は次の通りだ。
req CSRの操作 -new 新しいCSRを作成する -key 秘密鍵 -out CSRの出力ファイルパス
CSRはサーバには不要なものなので、作業完了後は別のところに移動させてしまっても良い。
なお、Webブラウザ上でCSRを作成できるサイトも存在するが、そのサイトの運用者に秘密鍵が漏れてしまう危険がある。指定事業者以外のWebサイトで提供されているツールを利用することは絶対に避けてもらいたい。本来、秘密鍵は指定事業者にも渡すべき情報ではないので、極力、CSRはサーバ上で自分自身で作成するようにしよう。
Copyright © ITmedia, Inc. All Rights Reserved.
提供:株式会社日本レジストリサービス
アイティメディア営業企画/制作:ITmedia PC USER 編集部/掲載内容有効期限:2018年8月2日