いまの Web 通信の大半は https:// で始まる URL で、SSL で暗号化されています。通信そのものの安全性は保たれますが、ファイアウォールなどでアプリケーション制御や UTM(アンチウイルスなど)を行おうとしても、データが暗号化されているため、中身を見て制御することができません。
そこで、制御する装置を通るときに、通信データを一度復号してデータを確認し、もう一度暗号化する機能が用意されています。Paloalto では、この機能を SSL Forward Proxy と呼びます。
- フォワードプロキシ用の信頼された証明書・信頼されない証明書を作る
- 復号ポリシーを設定し、端末にルート証明書を入れて復号を確かめる
- 復号プロファイルで、信頼されない証明書・期限切れ証明書のサイトをブロックする
- SSL 復号オプトアウトページを表示する
SSL 復号化から除外したいサイトを登録する場合は、次の記事を参考にしてください。
PAN-OS 10.0.8 で検証しています(初版は 9.0.9 で検証。9.0 と設定項目の差はほとんどありません)。端末のブラウザは Microsoft Edge です。PAN-OS 10.0 は 2022年7月16日でサポートが終了(End-of-Life)しています。画面の項目の並びや表記は、バージョンによって変わります。
設定前の準備
SSL 復号化できているかどうかを確かめるため、トラフィックログに「復号化」の列を出します。MONITOR ›› ログ ›› トラフィック で、一覧の左上にカーソルを当てると下矢印が表示されるので、クリックします。「カラム」が表示されるので、「復号化」にチェックを入れます。
この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
| カラム | ☑ 送信元ユーザー ☑ 宛先 ☑ 宛先ポート ☑ アプリケーション ☑ アクション ☑ ルール ☑ セッション終了理由 ☑ バイト ☐ Destination Device Host |
| 1追加する列 | ☑ 復号化 |
復号化の列が追加されます。列は先頭に配置されるので、ドラッグで好きな位置に動かしてください。今回は復号化のテストに使うので、先頭のままにします。
端末から Google、Twitter、YouTube にアクセスしてみます。復号化されていない(no)ことがわかります。
| 復号化 | 送信元 | 宛先 | 宛先ポート | アプリケーション | アクション | ルール |
|---|---|---|---|---|---|---|
| 1no | 10.0.2.11 | 172.217.161.46 | 443 | youtube-base | allow | LAN-to-Internet |
| no | 10.0.2.11 | 104.244.42.66 | 443 | twitter-base | allow | LAN-to-Internet |
| no | 10.0.2.11 | 172.217.175.35 | 443 | google-base | allow | LAN-to-Internet |
| no | 10.0.2.11 | 172.217.31.162 | 443 | google-base | allow | LAN-to-Internet |
| ⋮ | ||||||
自己署名ルート CA 証明書を作る
今回は、エンタープライズ CA が署名した証明書ではなく、Paloalto が自己署名した証明書を作り、端末との通信の復号に使います。
接続先のサーバーの証明書が「信頼された証明書」か「信頼されない証明書」かによって、端末に提示する証明書を分けます。
フォワードプロキシ用の信頼された証明書
DEVICE ›› 証明書の管理 ›› 証明書 で「生成」をクリックし、次の画面で設定します。
| 証明書タイプ | ◉ ローカル ○ SCEP |
| 1証明書名 | SSL_Decryption_Trusted |
| 2共通名 | hirotanoblog.com 証明書に表示される IP または FQDN |
| 署名者 | |
| 3認証局 | ☑ 認証局 ☐ 秘密鍵のエクスポートをブロック |
| アルゴリズム | RSA |
| ビット数 | 2048 |
| ダイジェスト | sha256 |
| 有効期限 (日) | 365 |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | 証明書名 | 任意の名前です。今回は SSL_Decryption_Trusted にしました。 |
| 2 | 共通名 | 証明書に表示されるコモンネーム(IP アドレスまたは FQDN)です。今回は hirotanoblog.com にしました。 |
| 3 | 認証局 | チェックを入れます。Paloalto が認証局(CA)として、サイトごとの証明書に署名できるようになります。 |
| 4 | 生成 | クリックすると「Successfully generated certificate and key pair : SSL_Decryption_Trusted」と表示されるので、OK をクリックします。 |
証明書の一覧に SSL_Decryption_Trusted が追加されます。証明書の名前のリンクをクリックし、「フォワード プロキシ用の信頼された証明書」にチェックを入れて、OK をクリックします。
| 名前 | SSL_Decryption_Trusted |
| サブジェクト | /CN=hirotanoblog.com |
| 発行者 | /CN=hirotanoblog.com |
| 発効日時 | Jan 22 03:23:32 2022 GMT |
| 有効期限 | Jan 22 03:23:32 2023 GMT |
| アルゴリズム | RSA |
| 1用途 | ☑ 認証局 ☑ フォワード プロキシ用の信頼された証明書 ☐ フォワード プロキシ用の信頼されない証明書 ☐ 信頼されたルート CA |
フォワードプロキシ用の信頼されない証明書
接続先のサーバーの証明書が信頼されない証明書のときに、端末に提示する証明書を作ります。DEVICE ›› 証明書の管理 ›› 証明書 で「生成」をクリックし、次のように設定します。
| 1証明書名 | SSL_Decryption_Untrusted |
| 2共通名 | Untrusted |
| 3認証局 | ☑ 認証局 |
生成をクリックし、表示された画面で OK をクリックします。証明書の一覧で SSL_Decryption_Untrusted のリンクをクリックし、「フォワード プロキシ用の信頼されない証明書」にチェックを入れて、OK をクリックします。用途の表記が更新されていることを確かめます。
| 名前 | サブジェクト | CA | キー | 状態 | 用途 |
|---|---|---|---|---|---|
| SSL_Decryption_Trusted | CN = hirotanoblog.com | ☑ | ☑ | 有効 | 1フォワード プロキシ用の信頼された証明書 |
| SSL_Decryption_Untrusted | CN = Untrusted | ☑ | ☑ | 有効 | 2フォワード プロキシ用の信頼されない証明書 |
あとで端末にインストールするのは、信頼された証明書(SSL_Decryption_Trusted)だけです。信頼されない証明書(SSL_Decryption_Untrusted)を端末に入れると、Paloalto が信頼しないサイトでも端末に警告が出なくなってしまいます。
復号ポリシーを設定する
復号の対象にする通信を、復号ポリシーで決めます。今回は、LAN から Internet へのすべての HTTPS 通信を復号の対象にします。POLICIES ›› 復号 で「追加」をクリックし、5つのタブ(全般、送信元、宛先、サービス/URL カテゴリ、オプション)を設定します。
| 1名前 | SSL_Decryption_Policy |
| 2送信元ゾーン | LAN |
| 送信元アドレス | ☑ いずれか |
| 3宛先ゾーン | Internet |
| 宛先アドレス | ☑ いずれか |
| サービス | any |
| URL カテゴリ | ☑ いずれか |
| 4アクション | ○ 復号なし ◉ 復号 |
| 5タイプ | SSL フォワード プロキシ |
| 6復号プロファイル | 選択肢None default 新規 復号プロファイル |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | 名前 | 任意の名前です。今回は SSL_Decryption_Policy にしました。 |
| 2 | 送信元 | 送信元ゾーンに LAN を選びます。送信元アドレスは制限しないので、「いずれか」にチェックを入れます。 |
| 3 | 宛先 | 宛先ゾーンに Internet を選びます。宛先アドレスは制限しないので、「いずれか」にチェックを入れます。サービスは any、URL カテゴリは「いずれか」にします。 |
| 4 | アクション | 「復号」にチェックを入れます。 |
| 5 | タイプ | SSL フォワード プロキシを選びます。 |
| 6 | 復号プロファイル | 新しく作るので、「新規 復号プロファイル」をクリックします。 |
復号プロファイルの画面で、名前に SSL_Decryption_Profile と入力します。「SSL 復号化」タブは、今回は何もチェックを入れません。OK をクリックすると、作った復号プロファイルが復号ポリシーに適用されます。もう一度 OK をクリックすると、復号ポリシー SSL_Decryption_Policy が作られます。
セキュリティポリシーを設定する
POLICIES ›› セキュリティ でセキュリティポリシーを設定します。今回は、次の記事の基本構成のとおり、LAN から Internet ゾーンへの通信をすべて許可します。ポリシーを設定したら、コミットします。操作は次の記事を参考にしてください。
>> 参考記事 : 基本設定(ログイン、ホスト名、インタフェース、ルーティング、ポリシー)手順と動作確認
端末から動作を確かめる
証明書のエラーを確かめる
端末のブラウザ(Edge)から Google にアクセスすると、次のように証明書のエラーが表示されます。証明書を見ると、信頼された証明機関から発行されていないことがわかります。発行者は hirotanoblog.com です。
発行先:www.google.com
1発行者:hirotanoblog.com
有効期間:2021/12/27 から 2022/03/21
ルート証明書をエクスポートする
Paloalto で作ったルート証明書をエクスポートします。DEVICE ›› 証明書の管理 ›› 証明書 で、フォワードプロキシ用の信頼された証明書として使う SSL_Decryption_Trusted を選び、「証明書のエクスポート」をクリックします。
| 1ファイル フォーマット | Base64 エンコード済み証明書 (PEM) |
| ☐ 秘密鍵をエクスポート | |
| パスフレーズ | |
| パスフレーズの確認 |
ファイル フォーマットに「Base64 エンコード済み証明書 (PEM)」を選んで OK をクリックすると、cert_SSL_Decryption_Trusted.crt というファイルがダウンロードされます。秘密鍵はエクスポートしません。
端末に証明書をインストールする
Windows の端末で、次の手順でルート証明書をインストールします。
- 「ファイル名を指定して実行」で
certmgr.mscと入力し、OK をクリックします。証明書マネージャーが起動します。 信頼されたルート証明機関 ›› 証明書を右クリックし、すべてのタスク ›› インポートをクリックします。- 証明書のインポート ウィザードが開くので、「次へ」をクリックします。
- エクスポートした cert_SSL_Decryption_Trusted.crt を選び、「次へ」をクリックします。
- 証明書ストアに「信頼されたルート証明機関」が選ばれていることを確かめ、「次へ」をクリックします。
- 確認画面で「完了」をクリックします。
- セキュリティ警告が表示されるので、「はい」をクリックします。
- インポートが成功したことを示すメッセージで、OK をクリックします。
証明書マネージャーの「信頼されたルート証明機関 ›› 証明書」に、発行先 hirotanoblog.com が追加されます。
信頼された証明書のサイトにアクセスする
端末から Google にアクセスします。今度は、証明書のエラーが表示されません。証明書を見ると、hirotanoblog.com から発行されていて、証明書のパス(チェーン)も問題ないことがわかります。
1発行者:hirotanoblog.com
有効期間:2021/12/27 から 2022/03/21
└ www.google.com
この証明書は問題ありません。
端末から Google、Facebook、YouTube にアクセスし、MONITOR ›› ログ ›› トラフィック を見ます。復号化が yes になっていることがわかります。
| 復号化 | 送信元 | 宛先 | 宛先ポート | アプリケーション | アクション | ルール |
|---|---|---|---|---|---|---|
| 1yes | 10.0.2.11 | 172.217.174.110 | 443 | youtube-base | allow | LAN-to-Internet |
| yes | 10.0.2.11 | 74.125.102.41 | 443 | youtube-base | allow | LAN-to-Internet |
| yes | 10.0.2.11 | 142.250.196.130 | 443 | google-base | allow | LAN-to-Internet |
| ⋮ | ||||||
| yes | 10.0.2.11 | 31.13.82.7 | 443 | facebook-base | allow | LAN-to-Internet |
| yes | 10.0.2.11 | 31.13.82.36 | 443 | facebook-base | allow | LAN-to-Internet |
信頼されない証明書のサイトにアクセスする
Paloalto にルート証明書がなく信頼されないサイトとして、端末から Paloalto 経由で FortiGate の管理画面にアクセスしてみます。すると、発行者 Untrusted として、フォワードプロキシ用の信頼されない証明書として設定した証明書が提示されます。
また、証明書の期限が切れたサイトも、同じように証明書のエラーになります(接続した日付は 2022/1/22)。
NET::ERR_CERT_AUTHORITY_INVALID
発行先:FortiGate
1発行者:Untrusted
有効期間:2022/01/17 から 2024/04/21
NET::ERR_CERT_DATE_INVALID
この証明書は有効期限切れか、まだ有効ではありません。
発行者:hirotanoblog.com
2有効期間:2021/04/14 から 2022/01/17
復号プロファイルを設定する
復号プロファイルを設定すると、信頼されない証明書のサイトへの接続をブロックできます。OBJECTS ›› 復号 ›› 復号プロファイル で、復号ポリシーに適用している SSL_Decryption_Profile を選びます。
発行者が信頼されないサイトをブロックする
「SSL 復号化」タブの「SSL フォワード プロキシ」で、「発行者が信頼されていないセッションをブロック」にチェックを入れ、OK をクリックします。
| 期限切れ証明書のセッションをブロック | ☐ |
| 1発行者が信頼されていないセッションをブロック | ☑ |
| 証明書の状態が不明なセッションをブロックします | ☐ |
| 証明書の状態がタイムアウトのセッションをブロック | ☐ |
| 証明書の延長を制限 | ☐ |
| 証明書のコモンネーム (CN) 値を SAN 拡張項目に追加 | ☐ |
復号プロファイルの一覧で、「サーバー証明書の確認」の列に「信頼されていない発行者」と表示されていることを確かめて、コミットします。
端末から信頼されないサイト(FortiGate の管理画面)にアクセスすると、証明書のエラーの画面になります。先に進めると、接続がブロックされます。
証明書の期限切れサイトをブロックする
同じように、証明書の期限が切れたサイトへのアクセスをブロックする場合は、復号プロファイルで「期限切れ証明書のセッションをブロック」にチェックを入れます。検証時の画面では、「発行者が信頼されていないセッションをブロック」のチェックは外した状態で確かめています。
| 1期限切れ証明書のセッションをブロック | ☑ |
| 発行者が信頼されていないセッションをブロック | ☐ |
復号プロファイルの一覧で「期限切れの証明書」と表示されていることを確かめて、コミットします。端末から証明書の期限が切れたサイトにアクセスし、証明書のエラーの画面から先に進めると、ブロックされました。
Palo Alto Networks のドキュメントでは、SSL フォワード プロキシの復号プロファイルで「期限切れ証明書のセッションをブロック」と「発行者が信頼されていないセッションをブロック」は、どちらも常にチェックを入れることが推奨されています。
SSL 復号オプトアウトページを表示する
SSL 復号化のときに、利用者に「SSL の暗号化が復号される」というメッセージを表示し、利用者が受け入れられない場合はオプトアウト(拒否)できるようにできます。初期設定では、オプトアウトページは表示されません。
表示させる場合は、DEVICE ›› 応答ページ で、「SSL 復号オプトアウト ページ」のアクションの「無効」をクリックします。「有効化 SSL 復号オプトアウト ページ」にチェックを入れて OK をクリックします。
| タイプ | アクション | 場所 |
|---|---|---|
| ⋮ | ||
| SSL 証明書エラー通知ページ | デフォルト | |
| 1SSL 復号オプトアウト ページ | 無効 → 2有効 | デフォルト |
| URL フィルタリングおよびカテゴリ一致ブロック ページ | デフォルト | |
「有効」に変わったことを確かめて、コミットします。端末から Google にアクセスすると、次のようなオプトアウトページが表示されます。Yes をクリックすると、SSL 復号化を経由して Google にアクセスできます。
(会社のポリシーにより、SSL で暗号化された通信は一時的に復号され、ウイルス・スパイウェア・マルウェアの検査を受け、検査後に再暗号化される、という説明文)
IP: 216.239.32.29
Category: any
Would you like to proceed with this session?
1Yes No
ナレッジによると、オプトアウトページは、通信が検査・復号されるときに 24 時間に1回表示されます。
まとめ
| 設定 | 場所 | 内容 |
|---|---|---|
| ログの列 | MONITOR ›› ログ ›› トラフィック | カラムに「復号化」を追加 |
| 証明書 | DEVICE ›› 証明書の管理 ›› 証明書 | SSL_Decryption_Trusted(信頼された証明書)と SSL_Decryption_Untrusted(信頼されない証明書)を生成 |
| 復号ポリシー | POLICIES ›› 復号 | LAN → Internet を「復号」、SSL フォワード プロキシ、SSL_Decryption_Profile |
| 端末 | certmgr.msc | SSL_Decryption_Trusted を「信頼されたルート証明機関」にインポート |
| 復号プロファイル | OBJECTS ›› 復号 ›› 復号プロファイル | 発行者が信頼されていない/期限切れ証明書のセッションをブロック |
| オプトアウト | DEVICE ›› 応答ページ | SSL 復号オプトアウト ページを有効化 |
更新履歴
- 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
近々、本記事は全体的に更新する予定でして、コメントいただいた内容もぜひ反映したいと思います。
有益なコメントいただき、ありがとうございました。