現在のWeb通信の大半がhttps:// で始まるURLであり、SSLで暗号化されています。通信自体のセキュリティは確保されますが、FW等でアプリケーション制御やUTM(アンチウイルスなど)を実行する場合、データが暗号化されていることより、制御ができません。

そのため、制御装置を経由するときに、一旦、通信データを復号化し、データを確認後、再暗号化する機能が実装されています。PaloaltoではSSL Forward Proxyと呼ばれます。

SSL復号化から除外したいサイトを登録する場合は、下記の記事を参考にしてください。
>> 参考記事 : SSL復号化除外の設定と動作確認設定前の準備
まず、SSL復号化ができているかどうかを確認するため、トラフィックログのフォーマットを変更します。
Monitor > ログ > トラフィックへ移動し、左上にカーソルを当てると、下矢印が表示されるので、クリックします。すると、カラムという文字が表示されますので、復号化にチェックを入れます。

以下のように、復号化のカラムが追加されます。先頭に配置されますので、ドラッグにより好きなところに配置してください。今回は復号化のテストに使用するので、先頭に配置します。
端末からGoogle、Twitter、Youtubeへアクセスしてみます。復号化されていない(no)であることが確認できます。

自己署名ルートCA証明書(Self-Signed Root CA Certificate)作成
今回は、エンタープライズCAによって署名された証明書ではなく、Paloaltoが自己署名した証明書を発行し、端末との通信の復号化に使用するものとします。
接続先サーバの証明書が信頼された証明書と信頼されない証明書のそれぞれで、端末へ提示する証明書を分けます。
フォワードプロキシ用の信頼された証明書
Device >> 証明書の管理 >> 証明書 へ移動し、生成をクリックします。

下記の画面が表示されます。

- 証明書名:任意の名前。今回は、SSL_Decryption_Trustedとします。
- 共通名:証明書に表示させるコモンネーム(IPアドレス、もしくはFQDN)の設定。今回は、hirotanoblog.comとします。
- 認証局:チェックを入れます。
その後、生成をクリックすると、以下の画面が出力されます。

OKをクリックすると、以下の通り、証明書が設定されています。 証明書のリンクをクリックします。

フォワードプロキシ用の信頼された証明書 にチェックを入れ、OKをクリックします。

用途の表記が更新されていることを確認します。

フォワードプロキシ用の信頼されない証明書
接続先サーバ側の証明書が信頼されない証明書の場合に、端末へ提示される証明書を作成します。
Device >> 証明書の管理 >> 証明書 へ移動し、生成をクリックし、下記のとおり設定します。

- 証明書名:任意の名前。今回は、SSL_Decryption_Untrustedとします。
- 共通名:証明書に表示させるコモンネーム(IPアドレス、もしくはFQDN)の設定。今回は、Untrustedとします。
- 認証局:チェックを入れます。
その後、生成をクリックすると、以下の画面が出力されます

OKをクリックすると、以下の通り、証明書が設定されています。 証明書のリンクをクリックします。

以下の画面が表示されます。フォワードプロキシ用の信頼されない証明書 にチェックを入れ、OKをクリックします。

用途の表記が更新されていることを確認します。

復号ポリシーの設定
復号対象の通信を定義する復号ポリシーを設定します。今回は、LANからInternetへのすべてのHTTPS通信を復号対象とします。
Polices > 復号 へ移動し、追加をクリックします。

各5つのタブ(全般、送信元、宛先、サービス/URLカテゴリ、オプション)を設定します。

- 名前:任意の名前。ここでは、SSL_Decryption_Policyとします。

- 送信元ゾーン:ゾーンとしてLANを選択します。
- 送信元アドレス:送信元アドレスは制限しないため、いずれか にチェックを入れます。

- 宛先ゾーン:ゾーンとしてInternetを選択します。
- 宛先アドレス:宛先アドレスは制限しないため、いずれか にチェックを入れます。

- サービス:anyを選択します。
- URLカテゴリ:いずれかにチェックを入れます。

- アクション:復号にチェック
- タイプ:SSLフォワードプロキシを選択
- 復号プロファイル:新規に作成のため、上記の復号プロファイルをクリックします

- 名前:任意の名前。ここでは、SSL_Decryption_Profileと入力
- SSL復号化(タブ):今回は何もチェックを入れない
OKをクリックすると、新規に作成した復号プロファイルが適用されます。

OKをクリックすると、復号ポリシーが作成されます。

セキュリティポリシー設定
Polices > セキュリティより セキュリティポリシーを設定します。 今回は、以下記事の基本構成の通り、LANからInternetゾーンへの通信をすべて許可します。ポリシー設定後、コミット処理をします。
操作は以下の記事を参考にしてください。
>> 参考記事 : 基本設定(ログイン、ホスト名、インタフェース、ルーティング、ポリシー)手順と動作確認 PANOS9.0.9-h1.xfr端末からの動作確認
証明書のエラー確認
端末のブラウザ(Edge)からGoogleへアクセスしてみると、以下の通り、証明書のエラーが出力されます。

証明書エラーの内容を確認すると、以下の通り、信頼された証明機関から発行されていないことが確認できます。 発行者は hirotanoblog.comです。

証明書のエクスポート
ここで、Paloaltoにて発行したルート証明書をエクスポートします。
Device >> 証明書の管理 >> 証明書 へ移動し、フォワードプロキシ用の信頼された証明書として使用するSSL_Decryption_Trustedを選択後、証明書のエクスポートをクリックします。

下記画面が表示されます。

- ファイルフォーマット:Base64 エンコード済み証明書(PEM)を選択
OKをクリックすると、cert_SSL_Decryption_Trusted.crtというファイルがダウンロードされます。
端末への証明書インストール
ファイル名を指定して実行 で certmgr.msc と入力し、OKをクリックします。

以下の通り、証明書マネージャが起動します。信頼されたルート証明書 >> 証明書>>すべてのタスク >> インポート をクリックします。

以下の画面が表示されるので、次へ をクリックします。

エクスポートしたcrtファイルを選択し、次へをクリックします。

信頼されたルート証明機関 が選択されていることを確認し、次へをクリックします。

確認画面が出力されるので、完了をクリックします。

セキュリティ警告が出力されるので、はいをクリックします。

下記の出力を確認し、OKをクリックします。

証明書マネージャに、以下の通り、発行先 hirotanoblog.com が追加されます。

信頼されている証明書サイトへのアクセス
端末から、Googleへアクセスします。今回は、証明書エラーが出力されません。証明書の内容を確認します。

証明書の表示すると、以下の通り、hirotanoblog.comより発行されていて、証明書のチェーンも問題ないことが確認できます。


端末からGoogle、Facebook、Youtubeへアクセスし、Monitor >> ログ >> トラフィックでトラフィックログを確認します。 復号化がyesになっていることが確認できます。

信頼されていない証明書サイトへのアクセス
Paloaltoにルート証明書がなく、信頼されていないサイトとして、端末からPaloalto経由で、Fortigateの管理画面にアクセスしてみます。
すると、発行者Untrustedとして、フォワードプロキシ用の信頼されない証明書として設定した証明書が提示されています。

また、証明書の期限切れサイトについても、同様に証明書エラーとなります。(接続時の日付は2022/1/22)

復号プロファイルの設定
復号プロファイルを設定することで、信頼されていない証明書サイトへの接続をブロックすることができます。
OBJECTS >> 復号 >> 復号プロファイルより、復号ポリシーに適用しているSSL_Decryption_Profileを選択します。

発行者が信頼されないサイトをブロック
SSL復号タブより、発行者が信頼されていないセッションをブロック にチェックをいれ、OKをクリックします。

下記のとおり、信頼されていない発行者 と表示されていることを確認し、コミットを実行します。

端末から信頼されていないサイト(Fortigateの管理画面)へアクセスすると、証明書エラーの画面となります。

先に進めると、接続がブロックされます。

証明書期限切れサイトをブロック
同様に、証明書の期限切れサイトへのアクセスをブロックする場合は、復号プロファイルで、期限切れ証明書のセッションをブロックにチェックをいれます。

下記のとおり、期限切れの証明書 と表示されていることを確認し、コミットを実行します。

端末から証明書期限切れサイトへアクセスし、証明書エラーの画面から接続を進めると、ブロックされました。

SSL復号化時のオプトアウト画面の表示
SSL復号化の際に、送信者にSSL暗号化が復号される旨のメッセージを出し、送信者が許容できない場合、オプトアウト(拒否)することができます。
デフォルトでは、オプトアウトページは表示されません。
表示させる場合は、Device >> 応答ページ で、SSL復号オプトアウトページのアクションを有効にします。
以下画面の無効をクリックしてください。

有効化 SSL復号オプトアウトページ にチェックを入れ、OKをクリックします。

下記の通り、有効に変更されていることを確認し、コミットを実行します。

端末からGoogleへアクセスすると、以下のようなオプトアウトページが表示されます。

Yesをクリックすると、SSL復号化経由で、Googleへアクセスできます。
更新履歴
2020/11/3 初版(バージョン9.0.9を使用)
2022/1/22 バージョン10.0.8 用に更新。
・画面の更新(9.0.9→10.0.8) ※ 9.0と設定項目の差異はほとんどありません。
・端末のブラウザをIEからEdgeへ変更
・フォワードプロキシの信頼された証明書と信頼されない証明書をそれぞれ発行し、信頼されないサイトへの接続に関しての動作確認を追加
・復号プロファイル設定の動作確認を追加
コメント
コメント失礼いたします。
ご丁寧な解説ありがとうがとうございます。
2点ご質問がございます。
セクション「自己署名ルートCA証明書(Self-Signed Root CA Certificate)の作成」
の部分の
「フォワードプロキシ用の信頼された証明書」・「フォワードプロキシ用の信頼されない証明書」
にチェックは両方入れるのが正しいのでしょうか?
この設定であると信頼されていないサイトもこの証明書を渡すことになり、
クライアントがすべてのサイトを信頼できると認識して
表示してしまうのではと思ったのですが?
よろしくお願いいたします。
コメントありがとうございます。
ご質問の件ですが、おっしゃる通りの動作になるものと思います。
セキュリティを考慮すると、「フォワードプロキシ用の信頼されない証明書」は、「フォワードプロキシ用の信頼された証明書」とは異なる、クライアントで信頼されていない別の証明書を使用すべきかと思います。
また、「フォワードプロキシ用の信頼されない証明書」を設定しない場合、コミットで警告エラーがでます。
Commit Error Received after Configuring SSL Decryption for Certificate Generation
https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA10g000000Clb7CAC
近々、本記事は全体的に更新する予定でして、コメントいただいた内容もぜひ反映したいと思います。
有益なコメントいただき、ありがとうございました。