つかびーの技術日記

(情報)工学修士, 元SIer SE, 現Web系 SEの技術blogです。Scala, Java, JS, TS, Python, Ruby, AWS, GCPあたりが好きです。

SSLを実際に購入・設定してみる

   

パスワードを適切に管理したサンプルシステム(その3)でログインの機能を持ったWebアプリケーションを作成してみました。パスワードのハッシュ化やパスワードリセットの実装は成功しましたが、まだまだログインシステムとしては問題があります。そこで今回は問題の1つであるSSLでない点を解決します。

見ての通り、前回自分が作成したログイン画面はSSLではありません。何が問題かと言うとPOSTするデータが暗号化されずにネットワークに流れることです。実際にWireSharkを動かしてPOSTしたデータをキャプチャしたものが以下です。

no_ssl1

予めユーザID:tsukaby1234、パスワード:password1234として登録しておき、ログイン画面でログインボタンを押したときのキャプチャ画像です。

ユーザIDもパスワードもバレバレです。

例えば、通信経路にクラッカーが居て、パケットを監視していたらパスワードが漏えいしてしまいます。ユーザがカフェなどでFreeの無線LANスポットに接続して、SSLでないサービスを利用するとします。そのスポットは実はクラッカーが用意した偽のスポットで通信パケットを解析されたりすると漏えいしてしまいます。ARPスプーフィングでも可能かと思います。

そんな訳で少しでもシステムを堅牢にするためにSSLを導入します。SSLは正規の販売店から購入し、オレオレ証明書は避けます。オレオレ証明書はブラウザにインストールされているルート認証局の証明書から認証されたチェーンに含まれないため、警告表示が出てしまいます。これでは意味がないので購入します。

購入先の選定

証明書は種類も購入先も様々です。証明書にはランクがあって、銀行系だと例えば以下のようにアドレスバーが緑色になる高ランクのものを利用しています。

ssl_site1

これはVeriSignのEV SSLというもので年間20万近くの費用がかかります。EV SSLは他の企業でも売っていてもう少し安価ですが、それでも高価です。個人レベルでは不要です。では普通のSSLを購入しよう、と思っても1万~3万くらいはかかります。できるだけ節約したいので、今回は格安のSSLで行きます。

安いSSL証明書はRapidSSL一択だと思います。コモドも安いやつがありますが、ここは一度クラックで事件になってるので避けます。この業界は信頼が命ですので・・・。RapidSSLは公式サイトで買っても約3000円、日本の正規代理店だと約2500円、販売代理店だとさらに安くて、約1400円で購入できます。

というわけで、RapidSSLを選択、販売代理店はディファイン合同会社を選択しました。

購入

まずはhttp://define.co.jp/ssl/geotrust/rapidssl/から購入サイトへジャンプ。

会員登録します。この会社の会員ページは当然SSLですが、先のEV SSLですね。ちゃんと考えてるのかな。

RapidSSLをカートに入れて購入手続きへ。PayPalも選べますが、自分は使えないので銀行振り込みを選択しました。クレカ決済が無いのが残念です。3連休の日曜に購入、振込をしたので、次の銀行の営業日、つまり火曜(月曜は祝日でした)に振り込まれます。AM11:30頃にディファインから入金完了メールが来ました。

入金完了メールの次は証明書発行URIの案内メールが届きます。まだ証明書に関する情報は何も提示していない訳ですから、当然発行されません。こちらで「こういう証明書を作ってください」という依頼をします。

証明書の作成(依頼)と設置

以下のサイトが参考になります。

さくらのVPS(CentOS 5.5)に RapidSSL をインストールするまでのメモ

先人の経験を頼りにさせてもらって、自分も手続きを進めます。

まずserver.csrを作成して、これに署名をし、証明書を作成するよう依頼します。依頼はメールに記載されたURL先で行います。ディファインのRapidSSLだとこんな感じのページが出てきます。

enter_csr

see exampleのリンクで例を見ればわかりますが、生成したserver.csrの中身を貼り付けます。

-----BEGIN CERTIFICATE REQUEST-----
(適当な文字列)
-----END CERTIFICATE REQUEST-----

後は他の選択部分で、以下を選んで次へ進みます。

  • Email Authentication
  • Apache + MOD SSL
  • SHA2 with a 256-bit Digest

CSRは辞書を見ればわかりますが、証明書発行のリクエストのことです。そもそも証明書とは大雑把にいうと公開鍵とその公開鍵の署名です。なぜ公開鍵に署名が必要なのかというと、公開鍵が偽装された場合、それに気付けないからです。SSLでサイトにアクセスすると、通信先のサーバから公開鍵を受け取ります。これはつまり、「この公開鍵を使ってデータを暗号化して送ってね。私しか解読できないから平気だよ!」と言っている事と同じです。しかし、その公開鍵は本当に正規の(自分が通信したい)サーバのものなのか分かりません。偽装されたものだとしたら、その偽装した人は偽装した公開鍵と対になる秘密鍵を持っているのですから、解読できてしまいます。これだとマズイので、署名という改ざんを検知する仕組みを使って公開鍵を偽装できないようにします。CSRの話に戻りますが、認証局は公開鍵に署名をして証明書を作ってやる必要があるので、それをお願いしますと依頼するのがCSRということです。

次の画面では自分のCSRの内容確認とメール認証のためのメールアドレス、自分の情報を入力します。メール認証ではwebmaster@[自分のドメイン]を選びました。Alias webmasterを作成しているので、別のメアドに届くようになっています。勿論webmasterというLinuxユーザを作っても構いませんが。自分の情報を入力する部分では「Title」となっていた部分が良く分かりませんでした。これはどうやら「役職」という意味のようです。適当に入力すれば良いでしょう。自分は「SSL」とか入力しておきました。

確定すると上記のメールアドレス、自分の場合はwebmaster@tsukaby.comに確認メールが来るのでメール内のURLを開きます。

ssl_confirm

上記の画面で承認すると、CSRの内容確認画面で入力した自分の情報のメールアドレスにメールが来ます。自分の場合はgmailです。ここに以下のような文字列が載っており、これが証明書です。この内容をserver.crtにコピペします。

-----BEGIN CERTIFICATE-----
(適当な文字列)
-----END CERTIFICATE-----

証明書の動作確認

基本的に上記で示したURLの通り、設定します。ただし、上記のURLはSSL販売代理店がRapid-SSL.jpであり、今回自分が選んだディファイン合同会社ではありません。そのため、いくつか違いがありました。

ここまでで https にアクセスしてみるけど、
「接続の安全性を確認できません」(Firefox)って言われる。

自分の場合はこの画面は出ませんでした。理由は不明です。認証チェーンの過程で、不足している中間認証局証明書をどこかから取ってきているのでしょうか・・・。

「中間証明書」ファイルを新規作成して、
メールで送られてきた内容をコピペする。

ディファインの場合、Your RapidSSL certificate:とあるように、自分の証明書だけメールで送られてきます。では中間認証局証明書はどうするかというと、Intermediate CA certificateの部分にURLが書いてあるので、これに従います。

Intermediate CA certificate
—————————————————–
You need the Intermediate CA Certificate for your specific web server. You can download this certificate on your webserver as per the instructions mentioned in the URL.
https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=content&id=AR1549

自分の環境はApache + MOD SSLですので、ページ中央のApache, Plesk & CPanelに従います。

やることは簡単、というか他の方たちとほぼ同じで、Download the RapidSSL CA Bundleから、中間認証局証明書をDL、というかコピーして、後はサーバ側にペースト、Apache設定変更、再起動で完了です。

RapidSSLの中間認証局証明書の中身を見ると—–BEGIN CERTIFICATE—–のブロックが2つありますが、これは4段階認証のためです。以下のサイトなどが参考になります。

クロスルート 4階層方式について

httpsでの接続

全ての設定が完了したので自分のサイトを確認してみます。まずはhttpsでアクセス。

screen

表示されました。

しかし、先の部分で述べたように、中間認証局証明書をインストールしないでも一見正しく表示されていました。現在の設定で本当に4段階認証できているのでしょうか・・・?

そこで、検証ツールを使用します。検証ツールは各認証局の公式サイトから利用できます。今回のRapidSSLはジオトラストのサービスなので、ジオトラストの検証ツールを利用します。

GeoTrust SSL Toolbox

まずは中間認証局証明書の設定なしで試してみます。

ssl_check1

エラーが出てしまいました。

設定ありだと以下のようになります。

ssl_check2

4段階認証できているようです。

以上です。

 - セキュリティ