ここまで述べた手順でのSSL/TLSサーバ証明書は、自己認証なのでプライベートLAN内でしか事実上運用できない。グローバルIPを持ったサーバにインストールしてインターネットを跨いで運用するには、正規の認証局によって認証・署名された正当なSSL/TLSサーバ証明書が必要になる。
本番用のSSL/TLSサーバ証明書を請求するには
SSL/TLSサーバ証明書を得るまでには概ね以下の手順を踏む。
- サーバを運用するための独自ドメインを取得し自身の管理下に置く。そもそもこれがなければ始まらない。
- 認証局を選択して会員登録を行い、会員の実在性承認を受ける。個人の場合は少なくとも住所氏名電話番号、会員登録したメールアドレスなどが実在するかの確認がなされる。
- 認証局の証明書発行要件を確認し、必要なら独自ドメインの管理者情報をWHOISに登録し公開する。1
- 証明書申請者は証明書に埋め込まれる管理者メールアドレスを受信できるように準備する。これは一般に
webmaster
、postmaster
、hostmaster
といった認証局が指定する定型メールアドレスである。無論その独自ドメイン名は合致していなければならず、他のドメインのメールアドレスにすることは出来ない。 - 独自ドメインの承認を受ける。すなわちWHOIS情報などと照らしあわせてその独自ドメインが正しく請求者に所有権があるか、管理者メールアドレスにセキュリティトークンを送信して請求者が正しくその運用権限を有しているかの確認がなされる。2
- 証明書申請者はSSL/TLSサーバ証明書を運用するサブドメインをDNSに登録・公開し、そのサブドメインをコモンネーム(CN)と管理者メールアドレスその他を記入した証明書請求(CSR)ファイルを作成し、認証局に送付する。
- 認証局はCSR記載の内容と会員情報とを照らし合わせて監査し、不備なく承認となれば自身の持つCA証明書と秘密鍵でCSRに署名を行い、証明書(CRT)ファイルとして証明書申請者の会員登録あるいは管理者メールアドレスに返送する。
証明書請求(CSR)ファイルの作成では、先の自己証明書と同様に必要な項目を記入しなければならない。これらはサーバ証明書のSubjectフィールドに埋め込まれるが、コモンネーム(CN)は必須である。
- Country Name : 組織所在地の2文字の国コードを記名する。一般に省略不可。日本ならJP。
- State or Province Name : 組織所在地の都道府県名。一般に省略不可。東京都なら Tokyo。
- Locality Name : 組織所在地の市町村名。一般に省略不可。千代田区なら Chiyoda。
- Organization Name (O): 組織名。中間CA証明書や法人格EV認証を取る場合は原則必須で、正式な英語名称を記入する必要がある。このフィールドが必須の場合は証明書運用管理上重要なため、当然ながら無関係な他組織名を偽証することは許されない。非EV認証や個人登録申請では省略できるが時に認証局側で適宜削除・修正を受けることもある。この場合は他組織と区別のつくオリジナルな組織名を名乗ってさえいれば問題なく、個人登録では屋号や同人サークル名を記名してもよい。
- Organizational Unit Name (OU): 部署名。省略可能。同一のONで複数のサーバ証明書が必要になる場合、その区別のために入力する。申請者側で自由に記名できるコメント欄とも言える。
- Common Name (CN): サーバホスト名。サーバ証明書においては必須。ブラウザのアドレスバー表示とこれが一致しない場合は認証エラー3となる。故に独自ドメイン管理と一体でなければならない。原則として一つのサーバホスト名にはただ一つの証明書が一対一で対応するべきなので、有効期間切れ以前に新しい証明書の再発行を行う際は、同時に古い証明書を破棄申請(Revoke)して公開CRTリストに記載しなければならない。4
- Email Address : 管理者連絡用メールアドレス。多くの場合必須。WebサイトやメールベースでCSR申請・CRT発行を行う場合はここに記載したメールアドレスに署名された証明書が返送されたりする。なかには自動で正しい記載に差し替えてくれる認証局もあり、その場合は省略しても誤入力しても関係がない。むしろ気にすべきは、このフィールドは無条件に世界中に公開される5ということである。ゆえに普段使いのメールアドレスを記載すると大変な目に合うこともあるので、専用の管理者用メールアドレスや、エイリアスにしておくとよい。6
証明書申請(CSR)ファイルの作成
証明書申請(CSR)ファイルの作成手順は、自己証明書ファイルの時とほぼ同じである。すなわち/etc/pki/tls/certs/
に移動してmake server.csr
を実行するだけだ。CSRファイルと同時に同名の秘密鍵も作成される。
[root@secure ~]# cd /etc/pki/tls/certs/
[root@secure certs]# make server.csr
umask 77 ; \
/usr/bin/openssl genrsa -aes128 2048 > server.key
Generating RSA private key, 2048 bit long modulus
............................+++
.............+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
umask 77 ; \
/usr/bin/openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
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↩
Organization Name (eg, company) [Default Company Ltd]:MULTIX↩ Organizational Unit Name (eg, section) []:↩
Common Name (eg, your name or your server's hostname) []:secure.multix.jp↩
Email Address []:hostmaster@multix.jp↩
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:↩
An optional company name []:↩
[root@secure certs]# ls -l server.*
-rw------- 1 root root 1037 Jan 29 12:58 server.csr
-rw------- 1 root root 1766 Jan 29 12:49 server.key
[root@secure certs]#
作成したserver.crtファイルを認証局に送付して署名を依頼する。また新しい秘密鍵からもパスフレーズを削除した版を生成してパーミッションを落としておく。
[root@secure certs]# umask 77; openssl rsa -in server.key -out ../private/server.key
Enter pass phrase for server.key:********↩
writing RSA key
[root@secure certs]# ls -l ../private/server.key
-rw------- 1 root root 1679 Jan 29 12:59 ../private/server.key
[root@secure certs]#
発行されるSSL/TLSサーバ証明書が深さ2以上となる場合は、認証局のサイトから対応する中間CA証明書もダウンロードしておこう。これは/etc/pki/tls/certs/
にserver-chain.crt
のファイル名で保存しておく。
[root@secure certs]# ls -l server-chain.crt
-rw-------. 1 root root 2212 Jan 29 14:07 server-chain.crt
[root@secure certs]#
本番用SSL/TLSサーバ証明書でWebサーバを起動する
無事に認証局から署名されたSSL/TLSサーバ証明書ファイルが返送されてきたら、これをserver.crt
のファイル名でcertsディレクトリに保存する。これでサーバ運用に必要な秘密鍵と証明書の用意が終わったので、ふたたびhttpsサーバ設定/etc/httpd/conf.d/ssl.conf
の該当項目2箇所を書き換える。また中間CA証明書server-chain.crt
の設定7も行頭コメントを削除して有効にする。そしてこのファイル中のServerName
を正式なサーバホスト名(証明書のコモンネーム)に変更する。
#ServerName www.example.com:443
ServerName secure.multix.jp
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
#SSLCertificateFile /etc/pki/tls/certs/develop.crt
SSLCertificateFile /etc/pki/tls/certs/server.crt
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
#SSLCertificateKeyFile /etc/pki/tls/private/develop.key
SSLCertificateKeyFile /etc/pki/tls/private/server.key
SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
また必要ならブラウザを開くPCの/etc/hosts
ファイルにサーバホスト名を追加しよう。これはNATやDMZの内側にサーバがありまだテスト段階で外部公開していない場合の代替手段となる。
192.168.0.252 secure secure.multix.jp
あとはconfigtestで書き換えエラーがないのを確認してサービスを再起動すればよい。またサーバ再起動時にWebサーバも起動するようにchkconfigも設定しておこう。
[root@secure ~]# service httpd configtest
Syntax OK
[root@secure ~]# service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]
[root@secure ~]# chkconfig httpd on
[root@secure ~]# chkconfig httpd --list
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@secure ~]#
以上ですべての準備が整ったので、ブラウザでサーバホスト名を参照8してみよう。今度は【頼できない接続】の警告なしでサイトが閲覧できるはずだ。証明書を確認して署名を依頼した認証局名が表示されれば正常である。9
独自ドメイン管理業者が証明書認証業務を行っており、それを利用して証明書認証を受ける場合はおおむね身分証明プロセスの多くが簡略化されるので必要ないこともある。WHOIS情報の開示が要求されるのは両者が別組織であったり管理業者の国が異なるような場合だろう。 ↩
WHOIS以外に一意の指定トークンを含むCNAMEやTXTフィールドをDNS登録する承認方法もある。こうすることで証明書申請者が正当な管理者権限を有しているかを見定めている。 ↩
ワイルドカード証明書はこれに限らない。また証明書によってはサブドメインと主ドメインの両方でエラー無く扱えるようになっていることもある。 ↩
サーバ証明書の有効期間は一般に1〜2年なので、サーバ証明書用のCRTが厳密に運用されている様子はあまり見る機会がない。それでも時々DNS乗っ取りなどで不正発行された証明書が出回る騒ぎになると、これを取り消すためにCRTが更新されることになる。有効期間の長い証明書ほど事態は重く、騒ぎも大きくなるため、一見煩雑な証明書の毎年更新にも(認証局側は特に)利がある。 ↩
opensslコマンドの-subjectオプションで表示できるし、どんなブラウザでもOU、CNと並んでこのフィールドは必ず簡単に参照できる。ほぼ間違いなくSPAMの標的になるので事前に防御策は講じておいたほうが良い。 ↩
また多数の独自ドメインを並行運用する場合個別にメールサーバを運用管理するのは不経済なのでドメイン管理業者の提供するメール転送サービスを利用したりする。 ↩
サーバでの中間CA証明書の設定を怠ると正しい証明書を使用していても【信頼できない接続】警告の対象となる。 ↩
このアドレス参照をlocalhostやIPアドレスにすると証明書のコモンネームと異なるのでブラウザは警告を出す。ブラウザを開くPCの/etc/hostsにIPアドレスとサーバホスト名を追加することでこの警告が出なくなることを確認できる。テストが終わって正規の運用状態に移行しおえたらこの記述は除去するのが望ましい。 ↩
「運営者: 検証され信頼できる運営者情報はありません」の表示はEV認証証明書を使っていない限り必ず表示されるものなので、通常は気に病む必要はない。ここに運営者情報が表示される場合は同じものがアドレスバーに緑色のラベルとして表示される。これを取得するには法人資格を持ち信頼性監査に合格する必要がある。無論かかる経費も一般に高額となる。 ↩