ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

Squid(WinNT版)でNTLM認証をかけたのだけれど、"Guest"で固定されてしまって嵌った件


お仕事で、ブラウザのProxy設定を取得したいというのが舞い込みまして。とりあえずSquidでProxy環境をでっち上げようとしてました。
面倒くさいのでWindows用のSquid
http://squid.robata.org/squid_nt.html
を参考に貰ってきまして、Basic認証はすんなりOK。ところがNTLM認証が・・・
ダイアログボックスは表示されるのですが、いつも見かけるWindows認証と違って「ユーザー名」の部分がグレーになって"Guest"のまま入力不可になってしまってるわけです。

えー、ぶっちゃけ数時間ほど嵌りました。Squidも初めて、Proxy認証設定するのも初めて、NTLM使うのも初めてで・・・中々、Windows認証の所まで気が回らなかった。
数時間後、ようやく「普通にProxyサーバの共有ファイルアクセスしたらどうなるかな?」に至り、アクセスしてみるとやっぱり同様。どうやらSquid云々ではなく、NTLM認証ひいてはWindowsログオンがおかしいといろいろGoogleに放り込んでいたら
・「Windows XP 共有フォルダにアクセスできない」
http://hehao1.seesaa.net/article/32115336.html
ようやくヒットしました。この通りの症状です。
というわけで、Proxy鯖のWinXPを調べてみたらこのとおり、「ネットワークアクセス: ローカルアカウントの共有とセキュリティモデル」が「Guestのみ」になってました。
「クラッシック」モードにしたら、無事ユーザー名が入力可能になり、なんとかProxyでNTLM認証を仕立て上げる事が出来ました。

さて・・・で、お仕事の方での「ブラウザからProxy設定を取得したい」ですが、なんかスゲーカオスな気がしてきました・・・。PACファイルへの対応まで考慮し出すと、WinInetだけじゃなくてWinHTTPも視野に入れた方が良いようで。というかWinInetだけではPACのJavaScriptを解釈できないのでJSProxy.dllを使ってJavaScriptとして実行させないとまずいようだけど、JSProxy.dll自体のまともな(=MSDN由来の)情報が皆無に等しい。
http://msdn.microsoft.com/en-us/library/aa383910(VS.85).aspx
これくらいのような気がする。
かといってWinHTTPを使うにしても、
http://msdn.microsoft.com/en-us/library/aa383157(VS.85).aspx
でも述べられているようにPACのreturnで複数のPROXYを返す場合は、最初の一件のみしか取得できないようで万全とも言えないようだ。

更にPACを使わない、1つのProxyに固定する場合はレジストリを見るようです。そこもチェックしないとイケナイ。

・・・うわー。滅茶苦茶ややこしそう。