Help us understand the problem. What is going on with this article?

Let's EncryptでFileMaker ServerをSSL化

More than 3 years have 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発行の証明書を公式にサポートしていないので、全て自己責任でお願いします。

sikkim
サーバーサイドエンジニア。情報処理安全確保支援士(登録番号:020092)。PythonやNode.js、FileMaker、Nuxt.jsで開発することが多いです。
https://github.com/sikkimtemi
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away