現在のWeb通信の大半がhttps:// で始まるURLであり、SSLで暗号化されています。通信自体のセキュリティは確保されますが、FW等でアプリケーション制御やUTM(アンチウイルスなど)を実行する場合、データが暗号化されていることより、制御に支障をきたします。
![](https://hirotanoblog.com/wp-content/uploads/2020/10/D9991234-B1A1-4760-A748-ED32B058AA0A.png)
そのため、制御装置を経由するときに、一旦、通信データを復号化し、データを確認後、再暗号化する機能が実装されています。FortigateではSSLインスペクション(deep-inspection)と呼ばれます。
![](https://hirotanoblog.com/wp-content/uploads/2020/10/B32EC55D-8EC4-411E-BC73-3B8FECB7D563.png)
SSLインスペクションを使用しない場合の動作
内部から外部へすべての通信をポリシー許可し、SSLインスペクションを無効化(デフォルト動作)にします。
![](https://hirotanoblog.com/wp-content/uploads/2020/10/364AF00C-9C0F-4BB1-8243-8A0871F20639.png)
GUIで【ポリシー&オブジェクト】-【ファイアウォールポリシー】-【新規作成】より以下の通り設定します。
![](https://hirotanoblog.com/wp-content/uploads/2020/10/FCF9DBC4-FA72-4D3E-9EE7-1CE324E683EC-1024x883.png)
端末からGoogleへアクセスし、トラフィックログを確認します。トラフィックログは、【ログ&レポート】-【転送トラフィック】で確認します。
![](https://hirotanoblog.com/wp-content/uploads/2020/10/40822F77-9F51-4DA2-B6DB-7A0CDF072B14-1024x328.png)
IPアドレスの宛先はGoogleのグローバルアドレスであることが確認できます。サービスとしてHTTPS通信であることはわかりますが、アプリケーションなど、それ以上の情報はわかりません。
SSLインスペクションを設定し、アプリケーションを可視化
内部→外部で設定したポリシーにて、SSLインスペクションを deep-inspection にして、アプリケーションコントロールを有効にします。
![](https://hirotanoblog.com/wp-content/uploads/2020/10/081AB55B-4143-43C3-A62F-87DAE08AC4ED.png)
端末からGoogleへアクセスすると、ブラウザーで証明書のエラーが出力されます。
![](https://hirotanoblog.com/wp-content/uploads/2020/11/B208C43D-8C7C-4795-9866-BF4B68C03AD4.png)
サーバ証明書を確認すると、発行者がFortigate(図はデフォルトで割り当てたホスト名)であり、 発行者のルート証明書がインストールされていないことがわかります。
![](https://hirotanoblog.com/wp-content/uploads/2020/11/16CE85FD-9541-4763-B012-6BAD2CC8DFD9-1024x618.png)
このエラーは、端末に、Fortigateのルート証明書をインポートすることで解決します。
![](https://hirotanoblog.com/wp-content/uploads/2020/10/D75AA72C-5142-41CB-A25B-4610D8C07659.png)
GUIで、【セキュリティプロファイル】-【SSL/SSHインスペクション】へ移動し、deep-inspection をダブルクリックします。
![](https://hirotanoblog.com/wp-content/uploads/2020/10/394F70FB-2837-4344-A44B-6202D1191147-1024x339.png)
以下、CA証明書より、ルート証明書をダウンロードできます。ダウンロードをクリックします。
![](https://hirotanoblog.com/wp-content/uploads/2020/10/5F4A18AC-61E1-4997-9149-BCB5CA1DE5D4.png)
ダウンロードした証明書を「信頼されたルート証明機関」へインポート後、Googleへアクセスすると、証明書エラーが出力されなくなります。
ブラウザで証明書を確認すると、Fortigate自身が www.google.co.jp に対してのサーバ証明書を生成していることがわかります。また、サーバ証明書と先ほどインストールしたルート証明書がチェーンされていることも確認できます。
![](https://hirotanoblog.com/wp-content/uploads/2020/11/509A6D5F-A7C6-4617-8710-25AAD0F73418-1024x636.png)
トラフィックログを確認すると、Googleへのアクセスに対して、アプリケーション名Google.Serviceが表示されています。これは、SSLインスペクションによりデータ通信を復号した後、UTMの一つであるアプリケーションコントロール機能によりアプリケーションを識別しています。
![](https://hirotanoblog.com/wp-content/uploads/2020/10/0F2C3F1B-90B8-4F73-BF65-48470B6D446B-1024x395.png)
【ログ&レポート】-【アプリケーションコントロール】では、アプリケーションコントロールに特化したログが出力されます。
![](https://hirotanoblog.com/wp-content/uploads/2020/10/815B1756-865B-46A0-AF88-A352C463BE4A-1024x468.png)
ルート証明書のイメージが難しい方は参照してください。
>> 参考記事 : SSLインスペクション除外の設定 FortiOS6.2.4
SSLインスペクションから除外する接続先を設定するには、この記事を参考にしてください。
deep-inspectionでは、データを復号化しましたが、別の方式として、証明書インスペクション(certificate-inspection)という方式もあります。
PaloaltoでSSL復号化するには、この記事を参考にしてください。
コメント
ビルトイン証明書は機器交換時にコンフィグでレストアできないとこは注意必要ですね
コメントありがとうございます。
おっしゃるとおりで、コンフィグとは別に証明書のバックアップ・リストアが必要となります。
注意しないといけないですね。
Configuration backups
https://docs2.fortinet.com/document/fortigate/6.2.0/cookbook/702257/configuration-backups
Technical Tip: How to take a backup and restore the local certificates of the firewall
https://community.fortinet.com/t5/FortiGate/Technical-Tip-How-to-take-a-backup-and-restore-the-local/ta-p/190406?externalID=FD48830
機会があれば、バックアップ・リストアについても検証してみようかと思います。
ビルトインのFortinet_CA_SSLはexport出来なかった記憶です
コメントありがとうございます。
おっしゃるとおり、ビルドイン証明書のエクスポートは制限がありそうです。
商用環境では、OpenSSLなどで発行した証明書を用いて実装した方がよろしいですね。
今後、SSLインスペクションを使用する環境での証明書の発行、バックアップ、リストアの観点も含めた実機検証の記事をシェアできればと考えております。
有益な情報いただき、ありがとうございました。