這裏有一個奇怪的問題。我們正在使用的腳本是:在PowerShell中使用System.Net.WebClient訪問帶有SAN證書的HTTPS URL
$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中,PowerShell的V3使用.NET v4.0.30319)它的工作原理。 從服務器(Windows Server 2008 R2,使用.NET v2.0.50727的PowerShell v2)運行時,它不會。最終它掛起並返回錯誤:異常調用帶有「1」參數的「DownloadString」:「操作已超時」
使用NetMon我設法確定在服務器上,它無法執行任何TLS客戶端密鑰交換。
homepages.domain.com的SSL證書實際上是一個SAN證書,主頁是實際服務器名稱的別名(我們稱之爲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.100%29.aspx
: http://msdn.microsoft.com/en-us/library/system.net.webclient%28v=vs.80%29.aspx 和.NET下V4爲它的文檔在正確的軌道上)。
理想情況下,我們希望該腳本在PowerShell v2和.NET v2下運行,而無需升級或強制PowerShell使用.NET v4。如果我的懷疑是正確的,那麼我們可以指定一個參數/一種修改腳本以「解決」這個問題的方法?
非常感謝您的任何建議。
任何最終解決方案與完整的源代碼示例工作呢? – Kiquenet
可悲的是。我無法得到下面的建議工作。我們正在將腳本遷移到Server 2012和PowerShell v3。 – Robin
使用PS v3的任何示例? – Kiquenet