Let's EncryptでFileMaker ServerをSSL化

More than 1 year has passed since last update.


TL; DR


  • プライベートネットワーク内のFileMaker Serverを外部に公開せずに無料でSSL化する手順

  • 公式サポートされた方法ではないので自己責任で!


背景

今までプライベートネットワーク内部だけで利用してきたFileMaker Serverに、リモートアクセスVPN経由で外部のFileMaker Goからアクセスしたい要件が発生しました。

VPN越しとはいえ、暗号化なしでインターネット側からのアクセスをさせたくはないので、Let's Encryptで発行した証明書を使ってSSL化することにしました。

ところが、インターネット上に公開されたサーバーをSSL化する方法はたくさん見つかりましたが、プライベートネットワーク内部にサーバーを置いたままでSSL化する事例は全然見つからず苦労しました。

需要があるかどうかは微妙ですが、同じようなことをしたい人がもしいたら参考になればと思い、作業手順を公開します。

まだ実運用はしていませんので、いろいろ荒削りです。


作業環境

Mac OS Sierra (10.12)

FileMaker Server 15, FileMaker Server 16


事前準備


Homebrewでcertbotをインストール

$ brew install certbot

Homebrewをインストールしていない場合はこちらから。

https://brew.sh/index_ja.html

certbotやLet's Encryptの詳しい使い方はこちらを御覧ください。

https://letsencrypt.jp/usage/


FileMaker Serverに割り当てるドメインを用意

ほとんど使っていないドメインがあったので、とりあえず流用することにしました。

このドメインはレンタルサーバーでホストされていてcertbotが動かせないので、自動更新することが出来ません。

本番運用する場合は適当なLinuxサーバーを用意した方が良さそうです。


FileMaker Serverのサーバー名をドメイン名に合わせて変更

Admin Consoleにログインして「一般設定」→「サーバー名」をドメイン名に合わせて変更します。


証明書の取得とFileMaker Serverの設定


Let's Encryptで証明書を取得

ドメインをホストしているサーバー上でcertbotを実行できれば楽でしたが、今回使用したサーバーでは不可能だったため、FileMaker Serverを動かしているローカルのサーバー上でマニュアル実行します。

$ sudo certbot certonly --manual -d [ドメイン名] --agree-tos

Password:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for [ドメイン名]

-------------------------------------------------------------------------------
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.

Are you OK with your IP being logged?
-------------------------------------------------------------------------------
(Y)es/(N)o: Y

-------------------------------------------------------------------------------
Create a file containing just this data:

HogeHv1AHc49M8YQ9xLH5DkgHvY2jJecHQDhqxdV3rU.fugarlvxDdW8F9Qwgx0rkE6Nb9tQLwSev9ExpldZANg

And make it available on your web server at this URL:

http://[ドメイン名]/.well-known/acme-challenge/HogeHv1AHc49M8YQ9xLH5DkgHvY2jJecHQDhqxdV3rU

-------------------------------------------------------------------------------
Press Enter to Continue

ここまで来たら別のターミナルでcertbotに指定されたテキストファイルを作成します。この場合は「HogeHv1AHc49M8YQ9xLH5DkgHvY2jJecHQDhqxdV3rU.fugarlvxDdW8F9Qwgx0rkE6Nb9tQLwSev9ExpldZANg」という内容のテキストファイルを「HogeHv1AHc49M8YQ9xLH5DkgHvY2jJecHQDhqxdV3rU」という名前で保存すれば良いので、次のようにします。

$ echo HogeHv1AHc49M8YQ9xLH5DkgHvY2jJecHQDhqxdV3rU.tlx7rlvxDdW8F9Qwgx0rkE6Nb9tQLwSev9ExpldZANg > HogeHv1AHc49M8YQ9xLH5DkgHvY2jJecHQDhqxdV3rU

ファイルができたらSFTPなどでサーバー(ドメインをホストしているサーバーの方)へアップロードします。Webサーバーのルートにあたるディレクトリに「.well-known/acme-challenge/」というディレクトリを作成し、その中に格納しましょう。

以下のURLにアクセスして「HogeHv1AHc49M8YQ9xLH5DkgHvY2jJecHQDhqxdV3rU.fugarlvxDdW8F9Qwgx0rkE6Nb9tQLwSev9ExpldZANg」というリプライが返ってくればOKです。

http://[ドメイン名]/.well-known/acme-challenge/HogeHv1AHc49M8YQ9xLH5DkgHvY2jJecHQDhqxdV3rU

問題なければ最初のターミナルでEnterを入力して処理を続行します。

-------------------------------------------------------------------------------

Create a file containing just this data:

HogeHv1AHc49M8YQ9xLH5DkgHvY2jJecHQDhqxdV3rU.fugarlvxDdW8F9Qwgx0rkE6Nb9tQLwSev9ExpldZANg

And make it available on your web server at this URL:

http://[ドメイン名]/.well-known/acme-challenge/HogeHv1AHc49M8YQ9xLH5DkgHvY2jJecHQDhqxdV3rU

-------------------------------------------------------------------------------
Press Enter to Continue
[ここでEnterを入力]
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/[ドメイン名]/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/[ドメイン名]/privkey.pem
Your cert will expire on 2018-01-18. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

これで/etc/letsencrypt/live/配下に証明書が生成されます。


FileMaker Serverの設定

先ほど生成した証明書をFileMaker Serverの管理下にコピーします。

$ sudo su -

# cd /etc/letsencrypt/live/[ドメイン名]/
# # ls
README cert.pem chain.pem fullchain.pem privkey.pem
# cp cert.pem chain.pem privkey.pem /Library/FileMaker\ Server/CStore/
# exit

既存の証明書を削除します。

$ fmsadmin certificate delete

新しい証明書をインポートします。

$ fmsadmin certificate import /Library/FileMaker\ Server/CStore/cert.pem --keyfile /Library/FileMaker\ Server/CStore/privkey.pem --intermediateCA /Library/FileMaker\ Server/CStore/chain.pem

FileMaker Serverを再起動します。

$ fmsadmin close -y

$ fmsadmin restart server

FileMaker Serverを外部に公開している場合はこれで作業終了です。

今回はプライベートネットワーク内にFileMaker Serverがいるので、DNSサーバーの設定を変更する必要があります。


DNSサーバーの設定

ドメイン名に割り当てられたIPアドレスはグローバルIPですが、実際のFileMaker ServerはローカルIPしか持っていないので、そのままではドメイン名でアクセスすることは出来ません。

そこで、プライベートネットワークのDNSサーバーに細工をして、プライベートネットワーク内部からドメイン名にアクセスしたときだけFileMaker ServerのローカルIPを返すようにします。

YAMAHAのルーターでは次のようなコマンドで設定できます。(この例ではFileMaker ServerのIPアドレスが192.168.100.100という想定)

ip host [ドメイン名] 192.168.100.100


動作確認

FileMaker proのメニューから「ファイル」→「共有ファイルを開く」でドメイン名にアクセスします。

リストに出てこない場合は「お気に入りのホストを追加します。」アイコンから追加しましょう。

ファイル一覧からファイルを開いた後、ウィンドウ左下(15の場合)か右上(16の場合)に緑色の鍵アイコンが表示されれば成功です。

スクリーンショット 2018-01-09 15.45.45.png キャプチャ.PNG


注意事項

Let's Encryptの証明書は3か月ごとに更新する必要があります。

今回は手動で実行しましたが、実運用では自動更新する仕組みを作らないと大変です。

そもそもFileMaker社はLet's Encrypt発行の証明書を公式にサポートしていないので、全て自己責任でお願いします。