2010年3月2日火曜日

lighttpdのHTTPS通信において、サーバ認証、クライアント認証を行う方法

lighttpdを用いて、サーバ認証、クライアント認証を行う為の設定

http://park15.wakwak.com/~unixlife/practical/openssl.html

基 本的には、ここで紹介されている手順を踏みます。

  1. まず、認証局の立ち上げ。これは上述のサイトの通り構築 してください。
  2. 次に、認証局で署名してもらったサーバ証明書の作成です。
    これも、上述のサイトの通り作成してください。

    ただし、サーバ証明書とサーバの秘密鍵を設定ファイルで指定できるApacheと違い、lighttpdでは、サーバ証明書に自身のプライベートキーを追 加しておく必要があります。
    これは、
    http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:SSL
    ここに記述があります。

      If you have a .crt and a .key file, cat them together into a
      single PEM file (the order isn't strictly important):
      $ cat host.key host.crt > host.pem


    これに従い、下記の様にコマンドを打ち込みます。

    $ cat srvernopass.key cert.pem > cert.pem

    これを、lighttpd.conf中のssl.pemfileセクションで指定してあげてください。尚、このファイルに秘密鍵が書いてあるからと言って セキュリティレベルが落ちるものではありませんのでご安心を。(cert.pemを配置するディレクトリのパーミッション設定だけは気をつけてください ね)

    ここまでで、自己認証局でサインしたサーバ証明書(俗に言われるオレオレ証明書)を用いたSSL通信が可能となります。(httpsでの通信が可能となり ます)
  3. さて、最後です。
    これまた、pkcs12形式のクライアント証明書の作成までは上述のサイトの通りです。しかし、やはりlighttpdではちょっと設定が違います。

    変更点は以下。

    ssl.verifyclient.activate   = "enable"
    ssl.verifyclient.enforce    = "enable"
    ssl.ca-file                    = "/path_to/CA/cacert.pem"
    ssl.verifyclient.depth      = 2
    ssl.verifyclient.username  = "SSL_CLIENT_S_DN_CN"

    これの意味するところは、ちょっと古いですがここを見るとよいでしょう。
    http://skyline.bosconet.org/pjohnson/blog/?p=457

    あと、ここも。
    http://redmine.lighttpd.net/issues/19

    よく調べて無いので、分かる点だけ。

    ssl.verifyclient.activate   = "enable"
    ssl.ca-file                 = "/path_to/CA/cacert.pem"
    ssl.verifyclient.username   = "SSL_CLIENT_S_DN_CN"
    この3つがキーだと思ってまして。
    1. まず、クライアント認証をするかどうか
    2. そして、認証局が署名した証明書リスト へのパス
    3. 最後に、クライアント証明書のどのフィー ルドで認証するか。
      ということだと思います。(詳細はどなたかお願いします。。。)
      全体像はこんな感じ。

      $SERVER["socket"] == ":443" {
          ssl.engine                = "enable"
          ssl.pemfile               = "/path_to/Server/server.pem"
          ssl.ca-file               = "/path_to/CA/cacert.pem"
          ssl.verifyclient.activate = "enable"
          ssl.verifyclient.enforce  = "enable"
          ssl.verifyclient.depth    = 2
          ssl.verifyclient.username = "SSL_CLIENT_S_DN_CN"
          server.document-root      = "/var/wwws/"
      }


以上をlighttpd.confに追加したのち、先に紹介させていただいたサイト、
http://park15.wakwak.com/~unixlife/practical/openssl.html

ここで作成した、pkcs12形式のクライアント証明書をchromeに導入すると、クライアント認証を伴うSSL通信が可能となり、クライアント証明書を 持ったPCからだけ、httpsアクセスが可能となります。

なお、Chromeへの証明書のインポート方法はこちら をご参照ください。
http://www.certvision.net/set_c_crt/chrome.html

以上が、lighttpdでのSSL Client Authの方法です。

0 件のコメント:

コメントを投稿