2012年12月19日水曜日

SSLのサーバ証明書

ウェブサイトでパスワード等の重要情報を暗号化して通信するために利用されるSSLには、
サーバ(実際にはドメインというかホスト名というか)の正当性を確認する役割もあり、
運用するためにはサーバ証明書が必要になります。
サーバ証明書は本来なら霊験あらたかな認証局から貰い受けるもので、
あまり費用をかけられない個人の場合、
いろんなところから申し込めるRapidSSL系は悪くない選択肢だと思います。
まあ単に通信の暗号化をしたい場合には勝手に認証局を作って
オレオレ証明書で済ましてしまう手もあって、
それだと費用がかからないで斯く言う私もそうしています。

ところが先日ある事実を知りました。
iPhoneなんかでHTML5のaudioタグを使ったページをhttpsでアクセスした場合、
サーバ証明書がきちんと認証できるものでないと音の再生が出来ないんですね。
まあ私には関係ないのでほっといてもいいのですが、
これを機会に証明書を無料で発行してくれるところがないか探していたところ…
ありました、StartSSLです。
というわけで試しに利用してみることにしました。

最初にサービスに登録します。
StartSSLから
[StartSSL Free]、[Certificate Control Panel]とたどって
[Sign-up]ボタンをクリックし個人情報を入力していきます。
なお、一旦クライアント証明書がインストールされれば[Authenticate]でログインできます。
住所は[State/Region]に都道府県、[Locality/Place]に市町村、
[Complete Home Address]にその後の細かい住所を入力すればいいでしょう。
[Continue]をクリックして現れるダイアログボックスで[OK]をクリックし先に進みます。
メールで届いた[authentication code]を入力して[Continue]をクリックし、
[2048(高)]を選んで[Continue]、[Install]、[Finish]をクリックして完了です。

ここでインストールされたクライアント証明書をなくすと操作が出来なくなるのでバックアップします。
Windows版のChromeなら以下のようにします。
[設定]アイコンから[設定]メニューを開き[詳細設定を表示]をクリックして
[証明書の管理]ボタンをクリックします。
[証明書]ウィンドウの[個人]タブにある
"StartCom Class 1 Primary Intermediate Client CA"が発行した
自分のメールアドレス宛ての証明書を選択し、
[エクスポート]ボタンをクリックします。
ウィザードが立ち上がるので
[はい、秘密キーをエクスポートします]を選択する以外はデフォルトで、
適当なパスワードをつけて.pfxファイルを作成します。
必要に応じて別のマシンやブラウザにインポートすることになるので、
このファイルは大切に保管し、設定したパスワードは覚えておきましょう。

ログインは出来るようになったので、
今度はサーバ証明書を発行するドメインの所有者であることの証明をします。
[Validations Wizard]をクリックします。
[Domain Name Validation]を選択して[Continue]をクリックします。
次に"http://"に続いて所有するドメインを入力するのですが、
トップレベルかそれに順ずるドメインはドロップダウンリストボックスから選択し、
そのサブドメインはフリー入力します。
ただし、このフリー入力には"."を含めることが出来ません。
すなわち、基底のドメインのみが指定できて、そのサブドメインは入力できません。
その後は、その指定したドメインの管理者っぽいメールアドレスを指定して、
それ宛てのメールを受け取らなければなりません。
アカウントの選択肢はpostmaster、hostmaster、webmasterしかないので、
まだ作ってなければアカウントを作ってから処理しましょう。
で、届いたメールのverification codeを入力すれば認証完了です。

いよいよ証明書の発行です。
[Certificates Wizard]をクリックします。
[Web Server SSL/TLS Certificate]を選択して[Continue]をクリックします。
[Password]を適当に設定してあとはデフォルトのままとし[Continue]をクリックします。
テキストボックスに秘密鍵が表示されるので
それを丸ごとコピーしてファイルに保存しておきます。
[Continue]をクリックします。
先に認証したドメインが表示されているはずなのでそのまま[Continue]をクリックします。
httpsでアクセスするURLを指定して[Continue]を2回クリックします。
テキストボックスに証明書が表示されるので
それを丸ごとコピーしてファイルに保存しておきます。
ただし、証明書の有効期限は1年間なので忘れず更新する必要があります。

また、[Tool Box]メニューの[StartCom CA Certificates]を開き、
[StartCom Root CA (PEM encoded)]から"ca.pem"と
[Class 1 Intermediate Server CA]から"sub.class1.server.ca.pem"をダウンロードしておきます。

最後にウェブサーバの設定です。
ここでは例としてServersMan@VPS(debian-32bit)のapacheに適用してみます。
秘密鍵と証明書をサーバ上に
それぞれ"/etc/apache2/ssl/ssl.key"、"/etc/apache2/ssl/ssl.crt"としてコピーします。
また、先にダウンロードした"ca.pem"、"sub.class1.server.ca.pem"も
サーバの"/etc/apache2/ssl/"ディレクトリにコピーしておきます。
その後以下を実行します。
# mv ssl.key ssl.key.wp
# openssl rsa -in ssl.key.wp -out ssl.key
# chown daemon:daemon *
# chmod 640 *
また設定ファイル"/etc/apache2/sites-enabled/001-default-ssl"の
SSLCertificateFile    /etc/apache2/ssl/cacert.pem
SSLCertificateKeyFile /etc/apache2/ssl/cakey.pem
の記述を
SSLCertificateFile     /etc/apache2/ssl/ssl.crt
SSLCertificateKeyFile  /etc/apache2/ssl/ssl.key
SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem
SSLCACertificateFile /etc/apache2/ssl/ca.pem
に変更します。
# /etc/init.d/apache2 restart
でウェブサーバを再起動すれば完了です。

この状態でiPhone4S(iOS5)からアクセスすると証明書が認証され、
httpsでもaudioタグで音が鳴らせるようになりました。
もちろんIE9やChrome(Windows)、Android(froyo、gingerbred)でも、
うざったい警告は出なくなりました。
ちなみにgingerbred(froyoはaudioタグは未サポートっぽい)では
これでも音はなりませんでした。
実はsrc属性をhttpスキーム込みのフルパスで書くだけで対応できたりして。

0 件のコメント:

コメントを投稿