CouchDB 1.1.0でSSLを使う

CouchDB 1.1.0がリリースされてから3週ほど経ちますが、すでにネイティブ対応されたCouchDBのSSLの機能は利用されたでしょうか。簡単に利用できるので、CACertでサーバ証明書を発行する手順も含めて紹介します。単に備忘録にしていたWikiを稼働させていたWebサーバが、データ移行せずに震災後停止してしまったので、検索しようとしたらなくて困ったからメモっておくか、というのが本音です。 [1]

CouchDB 1.1.0は既にインストールしていることが前提です。Sidではすでに1.1.0になっています。

証明書の作成

まずはCSRを作成します。

$ openssl genrsa -des3 -rand /var/log/messages -out server.key 2048
$ openssl req -new -config /etc/ssl/openssl.cnf -key server.key -out server.csr

できたCSRを使い、CACertでサーバ証明書を作成します。

サーバ証明書→新規作成→フォームにCSRの文字列を貼り付け、送信→証明書(Cert)が表示されるので、これを/etc/couchdb/server.crtとして保存します。

次に、秘密鍵をPEM形式に変換します。

$ openssl rsa -in server.key -outform PEM -out server.key.pem

生成したPEM形式の秘密鍵を/etc/couchdb/server.key.pemとして保存します。

local.iniの編集

次にCouchDBの設定です。/etc/couchdb/local.iniを以下のように編集します。

(snip)
[daemons]
(snip)
httpsd = {couch_httpd, start_link, [https]} ;セミコロンのコメントを外す

[ssl]
cert_file = /etc/couchdb/server.crt     ;セミコロンのコメントを外し、server.crtのフルパスを記述する
key_file = /etc/couchdb/server.key.pem     ; セミコロンのコメントを外し、server.key.pemのフルパスを記述する

CouchDBを再起動すると、HTTPSをtcp/6984でLISTENするようになります。

証明書、秘密鍵の置き場所には注意。

server.crtやserver.key.pemはCouchDBのプロセスを実行するcouchdbユーザでアクセスできるディレクトリに置く必要があります。/etc/ssl/privateディレクトリのようにrootしかアクセスできないディレクトリに置くと、起動はできるのですが、アクセスしたタイミングで、下記のようなErlangのエラーログを吐いてしまいます。

[Thu, 23 Jun 2011 02:24:23 GMT] [error] [<0.330.0>] {error_report,<0.61.0>,
                                  {<0.330.0>,std_error,
                                   [83,83,76,58,32,"1093",58,32,"error",58,
                                    [123,
                                     ["error",44,
                                      [123,
                                       ["badmatch",44,
                                        [123,["error",44,"eacces"],125]],
                                       125]],
                                     125],
                                    32,"/etc/ssl/private/server.crt","\n",32,
                                    32,
                                    [91,
                                     [[123,
                                       ["ssl_certificate",44,
                                        "file_to_certificats",44,"1"],
(snip)

参考文献

http://wiki.apache.org/couchdb/How_to_enable_SSL

[1]別に起動させりゃええんだけど。