知識マップ: 社内プロキシとWindowsアプリ ── WinINET・WinHTTP・.NETのプロキシ解決を整理する
記事「社内プロキシとWindowsアプリ ── WinINET・WinHTTP・.NETのプロキシ解決を整理する」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Windowsのプロキシ設定は1つではなく、WinINETのユーザー別設定、WinHTTPのマシン設定、環境変数という少なくとも3系統があります。そしてどれを読むかを決めるのは設定側ではなくアプリ側です。設定アプリで見えているのはWinINETのユーザー別設定で、Windowsサービスはこれを読みません。「手動なら動くのにサービスだと動かない」の最頻出原因が、この実行アカウントの違いです。netsh winhttp set proxyは静的設定でPAC・自動検出・プロキシ認証を扱わず、PACのFindProxyForURLはURLごとに違うプロキシを返し得ます。.NET Frameworkは実行中アカウントのインターネットオプションを既定にし、.NET(Core以降)は環境変数を先に読んでから、未定義のときだけユーザーのプロキシ設定を読みます。407はプロキシ認証で、サーバー認証の401とは資格情報を渡す相手が違います。
flowchart LR
accTitle: Windowsのプロキシ設定3系統とアプリの読み分けの知識マップ
accDescr: WinINETのユーザー別設定・WinHTTPのマシン設定・環境変数という3系統と、どれを読むかがアプリ側で決まっている構図、サービス実行アカウントで設定が見えなくなる落とし穴、PACとWPADによる自動構成、.NET FrameworkとCore以降での既定の違い、407とTLSインスペクションを示す図
wininet["WinINET"]
winhttp["WinHTTP"]
wininet_user_proxy["WinINETのユーザー別プロキシ設定"]
service_account["サービスアカウント(共用のユーザーアカウント)"]
winhttp_machine_proxy["WinHTTPのマシンプロキシ設定"]
pac_file["PACファイル(FindProxyForURL)"]
group_policy["グループポリシー"]
intune["Microsoft Intune"]
url_dependent_proxy_routing["宛先URLごとのプロキシ経路分岐"]
wpad["WPAD(プロキシ自動検出)"]
dotnet_default_proxy["HttpClient.DefaultProxy"]
proxy_environment_variables["プロキシ環境変数(HTTP_PROXY等)"]
dotnet_defaultproxy_element[".NET Frameworkのdefaultproxy要素"]
httpclienthandler_proxy["HttpClientHandler.Proxy / UseProxy"]
default_proxy_credentials["DefaultProxyCredentials / UseDefaultCredentials"]
proxy_auth_407["407 Proxy Authentication Required"]
kerberos["Kerberos"]
ntlm["NTLM"]
tls_inspection_proxy["TLSインスペクション型プロキシ"]
https_connect_tunnel["CONNECTトンネル"]
wininet -->|"利用する"| wininet_user_proxy
wininet -->|"両立しない"| service_account
winhttp -->|"推奨される対応"| service_account
winhttp -->|"利用する"| winhttp_machine_proxy
winhttp_machine_proxy -->|"で構成できる"| pac_file
service_account -->|"両立しない"| wininet_user_proxy
wininet_user_proxy -->|"で構成できる"| group_policy
wininet_user_proxy -.->|"で構成できる"| intune
pac_file -.->|"原因になり得る"| url_dependent_proxy_routing
wpad -->|"利用する"| pac_file
winhttp -->|"で構成できる"| wpad
dotnet_default_proxy -->|"で構成できる"| proxy_environment_variables
winhttp_machine_proxy -->|"用いるのは非推奨"| dotnet_default_proxy
dotnet_defaultproxy_element -.->|"防止する"| wininet_user_proxy
httpclienthandler_proxy -->|"防止する"| dotnet_default_proxy
default_proxy_credentials -->|"推奨される対応"| proxy_auth_407
proxy_auth_407 -.->|"利用する"| kerberos
proxy_auth_407 -.->|"利用する"| ntlm
tls_inspection_proxy -->|"利用する"| https_connect_tunnel
概念間の関係(全19件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- WinINETはWinINETのユーザー別プロキシ設定を利用します。
- WinINETはサービスアカウント(共用のユーザーアカウント)と両立しません。
- WinHTTPはサービスアカウント(共用のユーザーアカウント)に対する本記事の推奨です。
- WinHTTPはWinHTTPのマシンプロキシ設定を利用します。
- WinHTTPのマシンプロキシ設定はPACファイル(FindProxyForURL)で構成できます。
- サービスアカウント(共用のユーザーアカウント)はWinINETのユーザー別プロキシ設定と両立しません。
- WinINETのユーザー別プロキシ設定はグループポリシーで構成できます。
- WinINETのユーザー別プロキシ設定はMicrosoft Intuneで構成できます。
- PACファイル(FindProxyForURL)は宛先URLごとのプロキシ経路分岐の原因になることがあります。
- WPAD(プロキシ自動検出)はPACファイル(FindProxyForURL)を利用します。
- WinHTTPはWPAD(プロキシ自動検出)で構成できます。
- HttpClient.DefaultProxyはプロキシ環境変数(HTTP_PROXY等)で構成できます。
- WinHTTPのマシンプロキシ設定をHttpClient.DefaultProxyに用いることは推奨されません。
- .NET Frameworkのdefaultproxy要素はWinINETのユーザー別プロキシ設定を防ぎます。
- HttpClientHandler.Proxy / UseProxyはHttpClient.DefaultProxyを防ぎます。
- DefaultProxyCredentials / UseDefaultCredentialsは407 Proxy Authentication Requiredに対する本記事の推奨です。
- 407 Proxy Authentication RequiredはKerberosを利用します。
- 407 Proxy Authentication RequiredはNTLMを利用します。
- TLSインスペクション型プロキシはCONNECTトンネルを利用します。
主要概念の定義
機械可読データ
このデータセットについて
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。