MapServerのMapFileの接続文字列のパスワード部分の暗号化ができるのは4.10だけ!

MapServer 4.10にはいろいろ新機能があるわけですが、そのひとつにMapFileのDB接続文字列を暗号化できるようになった、というのがあります。ご存知のとおりMapServerはMapファイルに地図の定義を書き書きします。中身は単なるテキストなので慣れれば非常にいい感じですが、ここに”平文で”OracleSpatialやPostGISへのDB接続文字列が書かれる、というセキュリティ問題があるのです。

まぁMapFileの置き場所パスをhttpでアクセスできないところにしておけば外部へのDBパスワードの漏洩などは防げるんですが、それでも、単に地図の色を編集したいだけの人に対してもDBパスワードを見せてしまうことになる、ということにはかわりないからやっぱり気持ち悪いのです。

で、やっとこさ今回の本題、MapServerの4.10で暗号化パスワード機能を使う手順を紹介します。

1. MapServerをふつうにビルドすると、ビルドしたディレクトリにmsencryptというコマンドが出来ているはずです。これでキーを生成します。

./msencrypt -keygen /好きな場所/mykey.txt

2. 作成したキーを使って、暗号化パスワード作ります。

./msencrypt -key /好きな場所/mykey.txt "地図DBのパスワード"

標準出力に "ADEA1282CA5" みたいな呪文が表示されます。これが暗号化パスワードです。
3. 暗号化パスワードを利用したいMapFileの、MAPセクションにこういう記述を追加します。

 MAP
  CONFIG MS_ENCRYPTION_KEY "/好きな場所/mykey.txt"
  ....

4. MapFileの各LAYERセクションのパスワード記入欄*1に、2で作った暗号化パスワード
書きます。

  LAYER
    CONNECTIONTYPE POSTGIS
    CONNECTION "user=hogehoge password={ADEA1282CA5} dbname=chizu host=localhost"
    .....

以上!簡単でしょ?

*1:パスワード以外は暗号化できないので注意