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:パスワード以外は暗号化できないので注意