XAMPPでHTTPS通信!SSLのためのCSRの作り方2015年2月16日Web制作プログラミングHTTPSSSLTweetこんにちは!システムエンジニアのリョータです。みなさんはインターネットを使うとき、セキュリティって意識していますか?映画のチケットや飲み会の席は、ネットで簡単に取れる時代になりました。中には「ネットからの予約だけ」というようなサービスもありますね。HTTPSを使って、暗号化通信を意識せずに操作している方も多いかと思います。ブラウザのURLの横のアイコンが南京錠になっていると、HTTPSを使っていることが分かりますが、みなさんはご存知でしょうか。以前、XAMPPを使っているWindowsのサーバでHTTPS通信が必要になったので、CSRを作りました。手間取ってしまったので、備忘の意味を込めて、書いておきたいと思います。前半は言葉の説明・解説です。作り方は後半に書いてあります。Secure)のSはセキュアのSです。Webでセキュアな通信ができるプロトコルですね。URL(URI)の一番最初にスキームとして書きます。このセキュアな通信をするために、SSL接続を行っています。Layer)の後継として作成され、SSLのほうが名が通っていたため、TLSを含む広義的な意味があるそうです。TLS/SSLやSSL/TLSと併記されていることも良くあります。HTTPSでは、SSLかTLSがクライアントとサーバ間で選択されます。1.0以上が選択されるそうです。ブラウザの南京錠のアイコンをクリックすると、何が選択されているか確認できます。古いブラウザ(フューチャーフォンの付属など)でTLSに対応していないと、SSLになってしまうことがあるとのことなので、注意しましょう。これ以降は、TLS,SSL含めて、SSLと記載しています。Request(証明書発行要求)の略称です。SSLではサーバ証明書が必要で、その発行のための申請書のようなものです。SSLってなにができるの?SSLでは、主にサーバの認証、通信の暗号化、改ざん検出ができます。サーバが持っている証明書を検証することで、サーバが「なりすまし」でないことを証明できます。サーバの証明書と一緒になっている公開鍵で、通信の暗号化に使う共通鍵(正しくは共通鍵の種)を共有します。この共通鍵で通信の暗号化と改ざん検出を行っています。今回は、通信の暗号化をしたいためにSSLを導入していきます。※この他にクライアントの認証ができますが、今回の目的から外れているので割愛します。SSLってなにをやってるの?SSLがどのように通信を開始するか、簡単に説明したいと思います。1.SSL通信の要求をする最初にサイトの閲覧者が「SSLで通信したい」とリクエストを送るところから始まります。具体的には、URLの先頭(スキーム)が通常HTTPとなっているところをHTTPSにするだけで、「SSLで通信したい」とリクエストを送っていることになります。これで、このWebページにSSLで通信したいとリクエストを送ることができ、あとはコンピュータ同士が勝手に対応してくれます。(だからこそのプロトコルですね)2.Webサーバがサーバ証明書を送るWebサーバがサーバ証明書(とサーバの公開鍵)をサイトの閲覧者のコンピュータに送ります。サーバ証明書を発行した認証局の証明書も同時に送ります。認証局の証明書を発行した認証局があるならその認証局の証明書を送り、さらにまたその証明書を発行した認証局の証明書を送ります。なんだか、雪だるま式に増えていきそうですが、たいていは認証局の証明書は1つか2つ先が最後になります。最後の認証局をルート認証局といいます。3.サーバ証明書の検証サイトの閲覧者のコンピュータが、サーバ証明書の検証を行います。ルート認証局が信頼できるかを検証します。信頼できるルート認証局の証明書を、コンピュータが持っているので、それをサーバからもらった証明書と突き合わせて確認して検証します。ルート認証局が証明できたら、ルート認証局の公開鍵を使ってルート認証局から認証を受けた認証局の証明書を検証し、証明できたらさらにその証明書についている公開鍵で証明書を検証・・・という風に順に検証していきます。暗号化に使う共通鍵(の種)を生成し、サーバへ送って共有します。この共通鍵が漏れてしまっては暗号化の意味がないため、サーバ証明書についてきた公開鍵で暗号化します。共通鍵を使って暗号化された通信を開始します。データを送る時は共通鍵を使って暗号化し、データを受け取ったときは共通鍵を使って復号化(解読)します。した情報は「秘密鍵」がないと復号化(解読)できない。現在、秘密鍵の解析には数億年以上かかるのものが使用されている。した情報は同じ「共通鍵」でしか復号化(解読)できない。※公開鍵暗号と共通鍵暗号:公開鍵暗号方式は、共通鍵暗号方式に比べて非常に処理に時間がかかる。共通鍵暗号方式は処理は早いが、共通鍵の共有のために通信が傍受されてしまう可能性がある。そのため、公開鍵暗号方式で共通鍵の共有を行い、暗号化自体は共通鍵暗号方式で行っている。CSRってどうやってつくるの?さて、今回はSSL通信をするためにサーバ証明書を取得しなければなりません。サーバ証明書を取得するには、CSR(証明書発行要求)を認証局に送る必要があります。今回はXAMPPをインストールしてあるWindowsサーバで既にopensslが利用できるので、こちらを使っていきます。暗号化メインのため、事業者の証明はできないものを取得しています。手順は以下の通りです。・ドメイン今回はドメインに対する証明書を取得します。事前にドメインを取得しておく必要があります。できればwhoisに情報を登録しておきましょう。whoisとCSRに書く情報が一致していると、審査が通りやすくなるそうです。認証局によって、サブドメインから全部固定のもの、www付きとwww無し両方が取得できるもの、サブドメインを全て取得できるワイルドカードなものまであります。それぞれ価格なども違うため、注意しましょう。※今回はサブドメインまで固定で作っています。認証局とのやり取りは主にメールなので、メールが利用できる必要があります。取得対象のドメインのメールアドレスが良いとのこと。XAMPPにはMercuryというメールサーバのソフトが入っているので、こちらを利用しました。ちなみに、受信だけで問題なさそうです。認証用のURLや証明書データが送られてくるので、保存・コピペができれば問題ありませんでした。whoisに登録しているメールアドレスや、下記のCSRに記載するメールアドレスでも良い場合もあるようです。署名するとあとから変えられず、再発行となってしまうので注意が必要です。英語での入力なのでミスタイプに注意しましょう。ドメインを間違えたまま申請してしまったら、元も子もありません。