Ubuntu Weekly Recipe

第387回 UbuntuでSSLを利用したサービスを構築する

この記事を読むのに必要な時間:およそ 8.5 分

コマンドを実行すると,証明書のディスティングイッシュネーム(DN,サイトの運営者に関する情報)の入力を対話的に入力させられますが,RapidSSLはドメイン認証証明書なので,コモンネーム(CN,その証明書を利用するドメインのFQDN)以外は入力しなくても問題ありません。ただしCNを間違えるとその証明書は利用できなくなってしまうため,CNは絶対に間違わないように注意してください。

そのCNですが,特別な理由がないのであれば「www.ドメイン名」で申請することをお勧めします。前述の通り,SSL証明書はCNに書かれているドメイン名と,実際にアクセスに使われているドメイン名が一致しないと警告が表示されてしまいます。ですが「example.com」「www.example.com」の両方で同じサイトにアクセスさせたい,でもそのためにSSL証明書を2枚用意するのも嫌……ということはよくありますよね。そんな問題を解決するため,Subject Alternative Name(SAN)と呼ばれる仕組みが用意されています。このフィールドに複数のドメイン名を列挙することで,同一の証明書を複数のドメインで運用できるようになるのです。そしてRapidSSLは「www.ドメイン名」というCNで証明書を申請すると,自動的にSANにネイキッドドメイン(www.example.comであればexample.com)がセットされた,wwwあり/なし両方で利用できる証明書を発行してくれます。⁠メールサーバー用の証明書だから,サブドメインはmail.じゃないと困る」というような事情があるのであれば話は別ですが,そうでないなら「www.」で申し込んでおくのがお得でしょう。

最後に出力されたserver.csrがCSRファイルになります。秘密鍵とCSRの作成についてはUbuntu Server Guideも参考になるでしょう。

CSRの作成

$ openssl req -new -sha256 -key server.key -out server.csr
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) [AU]:JP
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.(自分のドメイン名)
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

CSRが作成できたら,いよいよ証明書の発行手続きに移りましょう。さくらのSSLのサイトにログインし,RapidSSLを申し込みます。具体的な手順はさくらのサポート情報にある通りです。RapidSSLの1年注13を選択し,支払い方法を選んで約款を確認したら,⁠CSRの入力へ進む」をクリックします。テキストボックスに先ほど生成したserver.csrの内容をコピー&ペーストして「>」ボタンをクリックすると,コモンネームや鍵長が表示されます。問題なければ「確認画面へ進む」をクリックします。最後にもう一度申し込み内容を確認し,間違いがなければ「この内容で申し込む」をクリックしてください。

注13)
キャンペーンの結果,無料で購入できるのが1年というだけで,必要であれば2年,3年を購入してももちろん構いません。

しばらくすると「SSLサーバ証明書 認証ファイルのアップロードについて」というメールが届きます。このメールの指示に従って,認証用のファイルをサーバー上の指定されたURLへアップロードしてください。ジオトラストのプログラムがこのURLにHTTPでアクセスし,正しい認証用ファイルがアップロードされていると確認することで,自分がこのドメインの所有者であることが証明できるという仕組みです。

認証が完了すると,今度は「ジオトラスト SSLサーバ証明書発行のお知らせ」というメールが届きます。さくらの会員メニューにログインし,⁠契約情報」から発行されたSSL証明書をダウンロードしてください。最初に作成したパスフレーズなしの秘密鍵と,今ダウンロードした証明書をそれぞれ/etc/ssl/{private,certs}以下に移動してください。

証明書の配置

$ sudo chmod 600 server.key
$ sudo chown root:root server.key server.crt
$ sudo mv server.key /etc/ssl/private/
$ sudo mv server.crt /etc/ssl/certs/

しかし,これだけではまだ不充分です。SSL証明書は,サーバーの公開鍵に対して認証局が署名をし,Webブラウザーはその署名を検証することで正当性を確認しています。ルート認証局の証明書はWebブラウザーにプリインストールされているため,ルート認証局が直接署名をした証明書であれば問題なく検証することができます。しかしRapidSSLは「GeoTrust Global CA(ルート認証局⁠⁠→⁠RapidSSL CA⁠⁠→⁠自分のサーバーの証明書」という3階層構造となっているため,Webブラウザーによってはサーバーの証明書からルート認証局まで辿り着くことができず,証明書が検証できないのです。

図4 証明書の階層構造

図4 証明書の階層構造

この問題は,RapidSSL CAの「中間CA証明書」をサーバーにインストールすることで解決できます。ジオトラストのサイトからRSA SHA-2 RapidSSL用の中間証明書を入手してください。/etc/ssl/certs/rapidssl-sha2-intermediate.crtのようなファイルを作成し,証明書の中身をコピー&ペーストすればよいでしょう注14⁠。

注14)
この手順はさくらからのメールにも記載されていますので,よく読んでおいてください。

最終的に,/etc/apache2/sites-available/default-ssl.confは以下のようになるでしょう。Apacheを再起動したらWebブラウザーでサイトにアクセスし,警告が消えたか確認してみてください。

証明書の差し替えと中間証明書の追加

SSLCertificateFile    /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
SSLCertificateChainFile /etc/ssl/certs/rapidssl-intermediate.crt

余談ですが,証明書は有効期限が切れる前に新しい証明書を(更新,購入して)発行してもらい,ファイルを差し替えるという作業が発生します。また有効期限内でも,なんらかの理由によって注15新しい証明書を再発行してもらうようなケースも存在します。

注15)
たとえばSHA-1のSSL証明書の利用者に対してSHA-2の証明書を無料で再発行する,というようなことがありました。

そこで筆者は証明書の実ファイルを

(ドメイン名).(発行年).{crt,key}

のような名前にしておき,これに対して

(ドメイン名).{crt,key}

というシンボリックリンクを張っています。サーバーの設定ファイルではシンボリックリンクを指定することで,証明書更新時の手間を軽減することができるからです。

著者プロフィール

水野源(みずのはじめ)

Ubuntu Japanese Teamメンバー。理想のフリーデスクトップ環境を求めて東へ西へ……のはずが,気がついたら北の大地で就職していたインフラ寄りのエンジニア。最近レンズ沼にハマる。