Oct 29, 2005

パーソナルWeb共有をhttps接続できるようにしよう

Panther tiger

 オンラインショップや個人情報を登録するようなページを訪れたとき、URLがhttp://じゃなくて、https://に変わるときがあったりします。よく見るとブラウザのはじっこの方には「錠前」のマークが表示されていたり、「このページは暗号化で保護されています」なんてでていたりするわけです。ここではMac OS XのパーソナルWeb共有でも、こうした安全なデータのやりとりができるように設定する方法を考えていきたいと思います。


 インターネットで情報の送受信をおこなうと、ちょっと知識のある人(いやむしろ悪意のある人ね)なら、場合によってはその内容を盗み見することができます。こんなことが起きないようやりとりをしてくれるのがSSLです。SSLについては以下を参考にどうぞ。



 httpd.confの設定以外の内容は「メールサーバーとSSL経由で接続しよう」とほとんど同じです。



必要なもの

  • Mac(Mac OS Xを搭載しているもの。ここは10.3.x(Panther)で進みます)
  • mi
  • ターミナル(Terminal)アプリケーションフォルダ>ユーティリティフォルダの中にあります。
  • コンソール(console)アプリケーションフォルダ>ユーティリティフォルダの中にあります。
  • やる気
  • オープンソースコミュニティへの感謝
  • セキュリティーへの配慮
  • メールというシステムへの感謝
  • インターネットを構築してくれた方々への畏敬の念



全体的の概要

 SSLでの認証を実現するため、Mac OS X サーバーにサーバーの鍵(server.csr)とサーバーの証明書(server.crt)をつくります。webページ接続時、この証明書によって、データを改ざんされたり、こっそりあなたのサーバーになりすましたり、パスワードなどの情報を盗まれたりすることを防ぐことができます。

 鍵と証明書は、ここで紹介する方法でつくることができますが、重要なのは証明書が、あなただけのものであることを証明されていないといけないことです。

 普通は、サーバー証明書は、VeriSign社などに代表されるパブリックCA(CAはCertificate Authorityの略だそうです)にお願いして、あなたのサーバーの証明書が確かなものであると署名してもらうことで作成されます。ただこの署名は有償で、ちょっとしたサーバーの勉強をするようなときに、支払ってもいいかなぁなんて気になれる金額ではありません。

 そこで、ここではこの認証局もMacの中につくってしまいます。そして、できあがった自前の認証局で、自分のサーバーの証明書に署名をおこない、SSL通信ができるようにしていきます。

 CAcert.orgのように無償でサーバー証明書に署名をする活動をされているグループもあります。ただ、CAcert.orgは認証局としてブラウザが認識しないものが多いそうで、CAcert.orgにせっかく署名をしてもらっても、「不明な認証局によって署名されています。」というとても残念な警告が出てしまいます。(CAcert.orgがこうしたソフトに、認証局として登録されるように、普及に何かできないものかと思いますが...)


完了までの流れ

  1. 作業用フォルダをつくる
  2. サーバー鍵をつくる
  3. 証明書署名要求をつくる
  4. 個人認証局をつくる-認証局の鍵をつくる-
  5. 個人認証局をつくる-認証局の証明書をつくる-
  6. サーバーの証明書をつくる
  7. httpd.confの設定
  8. 動作確認



作業用フォルダをつくる

  1. これからいろいろとファイルをつくっていくので、混乱しないようにデスクトップにフォルダをつくって、その中で作業していきます。とりあえずkeysと名前を付けたフォルダをつくります。
     → 


サーバー鍵をつくる

サーバーの鍵(server.key)をターミナルをつかってつくります。ここで作成する鍵はちょっとセキュリティ的に緩い鍵ですから、作成後は悪意のある人に盗まれないようにしっかり管理してください。

  1. ターミナルを起動させます。



  2. デスクトップにつくった"keys"フォルダに移動します。次のコマンドを入力して、実行すると移動できます。

    cd ~/Desktop/keys


    コマンドcdはchange directoryの略




  3. ターミナルに以下のコマンドを入力し、リターンで実行します。うまくいかない場合は頭にsudoをつけて実行してください。
    openssl genrsa -out server.key 1024

    unable to write 'random state'とでてうまくいかない場合は
    sudo openssl genrsa -out server.key 1024


    実行すると...


    ぱぱぱぱぱぱっとキーが作成されていきます。率直、かっこいいです。



  4. デスクトップのkeysフォルダにserver.keyというファイルができているはずです。ここまででserver.keyの作成は終了です。





証明書署名要求をつくる

さっきつくったサーバー鍵をつかって、証明書署名要求(server.csr)をつくります。認証局に「私のサーバーがちゃんとしてることを認定してください」という履歴書付きの申請書のようなものです。たぶん。この証明書署名要求ファイルを認証局に送り、受け取った認証局が署名をすると、サーバー証明書ができあがるわけです。このファイルをVeriSing社さんなどに送ると証明書を発行してもらえことになります。


  1. ターミナルに以下のコマンドを入力して、リターンで実行します。
    openssl req -new -key server.key -out server.csr


    実行すると...


    いくつかの項目を入力するようになる


  2. 必要な項目を設定していきます。もちろん日本語はだめです。
    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 (eg, YOUR name) []:ドメインネームをいれます。「あなたの名前.ddo.jp」などです
    Email Address []:管理者のアドレスをいれます

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:何も入力せずリターン
    An optional company name []:何も入力せずリターン


    Common Name (eg, YOUR name) []:のところにはドメインネームをいれます。ddo.jpのドメインをもらっているなら「あなたの名前.ddo.jp」などです。


  3. デスクトップのkeysフォルダにserver.csrというファイルができているはずです。ここまででserver.csrの作成は終了です。




個人認証局をつくる-認証局の鍵をつくる-

自前の認証局をつくります。まず認証局が使用する鍵を作成します。VeriSing社さんやCAcert.orgさんなどに証明をお願いするならこの行程は必要ありません。


  1. ターミナルに以下のコマンドを入力しリターンで実行します。これもうまくいかない場合はserver.keyの時と同様にsudoを頭につけてやってみてください。

    openssl genrsa -out ca.key 1024

    うまくいかない場合は
    sudo openssl genrsa -out ca.key 1024


    実行すると...


    server.keyの時と同様にキーが生成されます。


  2. デスクトップのkeysフォルダにca.keyというファイルができているはずです。ここまででca.keyの作成は終了です



個人認証局をつくる-認証局の証明書をつくる-

先ほどつくった個人認証局の鍵をつかって、自前の認証局の証明書を作成します。VeriSing社さんやCAcert.orgさんなどに証明をお願いするならこの行程は必要ありません。

  1. ターミナルに以下のコマンドを入力しリターンで実行します。

    openssl req -new -x509 -days 365 -key ca.key -out ca.crt


    365という数字はこの証明書は365日間、つまり1年間有効という意味をさします。1825なら5年間、3650日ならほぼ1-年間有効という意味です。


  2. いくつか入力を求められますので、間違えないように入力します。

    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 (eg, YOUR name) []:自分の名前や責任者の名前などを入れます。
    Email Address []:管理者のアドレスをいれます


    Common Name (eg, YOUR name) []:は先につくったserver.csrと別の名前にしないとうまく動かないそうです。


  3. デスクトップのkeysフォルダにca.crtというファイルができているはずです。ここまででca.crtの作成は終了です。



サーバーの証明書をつくる


自前の個人認証局をつかって、サーバー証明書を作成します。VeriSing社さんやCAcert.orgさんなどに証明をお願いするならこの行程は必要ありません。

  1. まずターミナルに以下のコマンドを入力しリターンで実行します。このコマンドは何をするのかというと、自前の認証局が発行する証明書につくシリアルナンバーのファイルを作成するものです。

    echo 01 > ca-cert.srl


    ここの01がシリアルナンバーになっています。必要に応じて番号を変えてください。


    何も変化が無いように見えますが、デスクトップのkeysフォルダの中にca-cert.srlというファイルができているはずです。ためしにmiで開いてみるとなかに01とだけ書かれているはずです。ちなみにこの操作はmiをつかって01とだけ書かれたファイルをつくるのでも同じことです。ターミナルが苦手ならそれでも良いと思います。




  2. 次に以下のコマンドを入力しリターンで実行します。一行ですから注意。

    openssl x509 -CA ca.crt -CAkey ca.key -CAserial ca-cert.srl -req -days 365 -in server.csr -out server.crt


    365という数字はこの証明書は365日間、つまり1年間有効という意味をさします。1825なら5年間、3650日ならほぼ10年間有効という意味です。


  3. 以下の表示が出れば認証が成功したことになります。



  4. デスクトップのkeysフォルダにserver.crtというファイルができているはずです。ここまででserver.crtの作成は終了です。これでサーバーの証明書ができあがりました!!




server.keyとserver.crtの設置

server.key(サーバー鍵)とserver.crt(サーバー証明書)はMac OS Xでは/System/Library/OpenSSL/certsにインストールするのが推奨(なんでしょうか)のようです。ですので、作成したserver.keyとserver.crtファイルを/System/Library/OpenSSL/certsに移動、設置させます。

  1. /System/Library/OpenSSL/certsを開きます。マウスでかちかちとどうぞ。



  2. デスクトップのkeysフォルダの中から、server.keyとserver.crtファイルをみつけ、これを/System/Library/OpenSSL/certsに移動させます。ドラッグアンドドロップでいけます。アクセス権の関係で認証を求められますので、対応します。

    よいしょっと...


    認証を押して先に進んでください。


  3. 認証がすむとcertsフォルダにファイルが移動します。




  4. このままでは鍵と証明書が誰かにいじられてしまうかもしれないので、アクセス権を変更しておきます。その他をアクセス不可、グループをwheelにして読み出しのみに、オーナーをシステムにして読み出しのみにに変更します。この操作はserver.keyとserver.crtについておこないます。(ここまで厳しく設定しなくても良いかもしれません)




  5. これでファイルの設置は終了です。


  6. 残ったほうのファイル、認証局の鍵"ca.key", 認証局の証明書"ca.crt", サーバーの証明書署名要求"server.csr", 認証局シリアルファイル"ca-cert.scl"は誰かに盗まれたり、のぞかれたりしない場所にしまっておきます。必要ならアクセス権も設定して管理しておきましょう。とりあえずここではホームフォルダ内の書類フォルダにしまっておきます。またいちおう...アクセス権はオーナーの自分以外は読み書きできないようにしておきます。



    keysフォルダごと書類フォルダに移動させます。

    可能ならkeysフォルダにはアクセス権も仕掛けておきます。


httpd.confの設定

パーソナルWeb共有でhttps接続ができるように、設定ファイルのhttpd.confに修正を加えます。

  1. まずシステム環境設定から共有を選んで、"パーソナルWeb共有"をオフにします。



  2. httpd.confがある場所を開きます。Finderのメニューから、フォルダに移動を選びます。




  3. "フォルダへ移動"ウィンドウが出ますので、/etc/httpd/に移動します。




  4. httpd.confが保存されている今まで不可視だったフォルダが開きます。

    いままで見えなかったフォルダです。もう少し詳しく場所をみるとこんな感じ。半透明のフォルダの下。




  5. "httpd.conf"ファイルをデスクトップにコピーします。

    ドラッグアンドドロップするだけでコピーできます。(アクセス権の関係)


  6. httpd.confファイルをもしも何かあったときのためにかならずもう一つ複製してどこかにしまっておきます。


    書類フォルダやhttpconfのバックアップフォルダとかを作ってしまっておきます。トラブルあったときに役立ちます。


  7. miエディットでデスクトップにおいてあるhttpd.confを開きます。





  8. 237行目に移動します。環境によっては行が前後するかもしれせん。



  9. 行頭の#を消します。

    #LoadModule ssl_module libexec/httpd/libssl.so



    LoadModule ssl_module libexec/httpd/libssl.so

    にする。



    #を消すと、その行が読み込まれるようになります。


  10. 次に280行目に移動します。これも環境によって行が変わると思います。



  11. 行頭の#を消します。

    #AddModule mod_ssl.c



    AddModule mod_ssl.c

    に変更する。





  12. 次に316行目に移動します。これも環境によっては行番号が前後すると思います。



  13. 316行目に#を入力します。

    #をつけるとこの行が読み込まれなくなって、無効になるという意味です。


  14. 316行目の下に以下の文章をペーストします。

    ## SSL Support
    ##
    ## When we also provide SSL we have to listen to the
    ## standard HTTP port (see above) and to the HTTPS port
    ##


    <IfModule mod_ssl.c>
    Listen 443
    Listen 80
    </IfModule>





  15. 次にServerNameという部分を探します。360行目付近にあるんじゃないかと思います。環境によって異なりますので、検索をつかって見つけるといいです。



  16. まず行頭の#を消します。



  17. 次にServerNameの後ろ部分を変更します。ddo.jpのドメインネーム取得しているなら、「あなたの名前.ddo.jp」となります。とりあえず動くかどうかテストをするだけなら、127.0.0.1でいきます。


    blazeとあるところを消して、


    自分のドメインネームを入力する。ここでは「あなたのお名前.ddo.jp」または


    127.0.0.1で。外部からの接続は関係なく、とりあえず自分のMac内だけで勉強しているならこれでいけます。



  18. 一番最後の行に移動します。行番号は環境によって変わっていると思います。



  19. 一番最後の行から次の文章をコピーペーストします。クリックしてペーストする文章を表示させてください。文字化け注意。

    これをクリックして文章を表示。






  20. ここまでがすんだら保存を実行します。



  21. 今編集したhttpd.confファイルを/etc/httpdに書き戻します。もしもう/etc/httpdフォルダを閉じてしまっていたら、前に方でやった"フォルダへ移動"で開いてください。




  22. 警告ダイアログが出ますので、びっくりしますが、気にせず"認証"を押して進みます。



  23. httpd.confの古いファイルを置き換えてもいいか聞いてきますので"置き換える"を押しましょう。



  24. 名前とパスワード(Macの)を聞かれますので、入力します。管理者パスワードですよ。



  25. コピーが無事行われるはずです。



  26. これでコピー完了です。



  27. httpd.confの情報をみます。所有者とアクセス権を以下のように変更します。まずグループをwheel/読み出しのみに、次にオーナーをシステム/読み書きにします。先にオーナーの方を変えるとグループの方がかえられませんので注意。認証を求められることがありますのでそのときは指示に従います。




  28. いちおうターミナルで今変更したhttpd.confが正しく設定できているかチェックします。ただしここで、オッケーがでても文法的にオッケーと言うだけで設定に問題がないというわけではありません。自分の設定に完璧なる自身をお持ちの方はこのステップは飛ばしてもかまいません。



    apachectl configtest




    Syntax OKと出れば問題ありません。



動作確認

SSL経由での接続がちゃんとできるか試してみましょう。うまくできていればhttps://であなたのWebページに接続できるようになっているはずです。

<

ol>

  • システム環境設定から、共有を開いて"パーソナルWeb共有"をオンにします。




  • Safariを起動させて、URIにhttps://127.0.0.1/と入力してみましょう。



  • ちょっとビックリしますけれど、こんな警告が出ます。設定間違ったのかな?なんて焦ってしまいますが、これは自前の認証局でサーバー証明書を作成した場合はどうしても出てしまいます。避けようがありません。VeriSign社さんなどで署名してもらった証明書ならこうしたメッセージは出ません。



  • SSLの設定がちゃんとできていると、あなたのサイトのトップページが表示されるはずです。



    ちゃんと右上にも錠前マークが表示されて、SSLで接続されていることがわかります。感動。




  • ddo.jpドメインを持っているのなら、実際にhttps://あなたの名前.ddo.jp/でも接続できるかも試してみるとよいです。ただし、サーバーの外の環境から行わないといけません。社内LANやサーバー自身からはddo.jpのアドレスは見えませんので...。なんで?と思うかもしれませんが、よくわからない人はそういうもんだと、とりあえず思っておいてください。自宅に帰ってからか、誰か暇な友達にでも電話して接続してもらうかで確認しましょう。
    BINDの設定ができているようなら、ドメインネームでアクセスできるはずです。
    Mac OS XでBINDを起動させよう


  • サイトへのログインやウェブショップなどの個人情報入力のときには、とても心強い仕組みです。

    P_BLOGのログインも安心、なんちゃって。


  • SSLでの接続がおこなわれていることをコンソールで確認します。



  • コンソールを開いて、左上コンソールと同じアイコンの「ログ」というアイコンを押します。するとMac内に記録されているすべてのログがリスト表示されます。

    これをクリックすると...。


    ログファイルがリスト表示される。


  • /var/logの三角形をクリックします。なかからhttpdを探し、さらに三角形をクリックして開きます。

    httpdも同様に開きます。

  • httpdログディレクトリ内には新しくsslに関するログが追加されています。

    ssl_engine_logとssl_request_logが表示されている。


  • ssl_engine_logとssl_request_logをクリックするとログが右側に表示されます。うまくhttpsで接続できなかったり、何か問題が起きたような気がしたときはこれらのログファイルから情報を得るようにします。






    トップのiconはdave@iconfactory.comさん(by www.iconfactory.com)を流用。

  • Trackback

    No Trackbacks

    Track from Your Website

    http://earlybirds.ddo.jp/namahage/inegalog/trackback/tb.php?id=19
    (言及リンクのないトラックバックは無視されます)

    Comments in Forum

    21 Comments