ここで少し奇妙な問題があります。使用しているスクリプトは次のとおりです。
$username = "itrpo"
$url = "https://homepages.domain.com/cgi-bin/checkperms.cgi?user=$username"
$homepagesUser = "REMOVED"
$homepagesPass = "REMOVED"
$webclient = New-Object System.Net.WebClient
$webclient.Credentials = new-object System.Net.NetworkCredential($homepagesUser, $homepagesPass)
$result = $webclient.DownloadString($url)
これをデスクトップ (Windows 8、.NET v4.0.30319 を使用する PowerShell v3) から実行すると、動作します。これをサーバー (Windows Server 2008 R2、.NET v2.0.50727 を使用する PowerShell v2) から実行すると、実行されません。最終的にハングし、次のエラーが返されます:「1」個の引数を指定して「DownloadString」を呼び出す例外:「操作がタイムアウトしました」
NetMon を使用して、サーバー上で TLS クライアント キー交換の実行に失敗していることを突き止めました。
Homepages.domain.com の SSL 証明書は実際には SAN 証明書であり、Homepages は実際のサーバー名 (servera.domain.com としましょう) のエイリアスです。スクリプトの $url を実際のサーバー名を使用するように変更すると、次のようになります。
$url = "https://servera.domain.com/cgi-bin/checkperms.cgi?user=$username"
...うまくいきましたが、これは理想的ではありません(サービスが別のマシンに移動すると、スクリプトが壊れます)。
PowerShell v2 (.NET v2) で SAN 証明書に問題があるように見えますか? これを裏付けるさらなる証拠は、正常に通信する標準 SSL 証明書を持つ別のサーバーに対して上記のスタイル スクリプトを使用することです。
使用している WebClient クラスの違いによるものでしょうか。.NET v2 でのドキュメントは次のとおりです: http://msdn.microsoft.com/en-us/library/system.net.webclient%28v=vs.80%29.aspx および .NET でのドキュメントv4: http://msdn.microsoft.com/en-us/library/system.net.webclient%28v=vs.100%29.aspx
上記のドキュメントを実際に正しく解釈するには、プログラミングについて十分に知りません (または、自分が正しい方向に進んでいるかどうかもわかりません)。
理想的には、スクリプトを PowerShell v2 および .NET v2 で機能させたいと考えています。アップグレードしたり、PowerShell に .NET v4 を使用させたりする必要はありません。私の疑いが正しければ、指定できるパラメータがありますか / この問題を「修正」するためにスクリプトを変更する方法はありますか?
アドバイスをありがとうございました。