2012-04-23 25 views
1

我有一些代碼用於連接到我們擁有的Web服務器。服務器有一個自簽名證書。我目前正在與信任連接任何證書在信任之前測試本地存儲的證書的遠程服務器證書

[System.Net.ServicePointManager]::ServerCertificateValidationCallback {$true}. 

我怎樣才能改變這種做法,我可以測試是否可以自定義代碼或反對我的本地存儲證書的遠程服務器?例如,我可以改變上面

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$customValidator} 

我想這樣做,而不是信任任何/所有證書的,什麼代碼,我想信任它,只有當它與公鑰CER文件我有相匹配或者我想使用自定義代碼來測試證書。我不太清楚的是如何處理自定義驗證以及代碼中的哪一點。我是否需要編寫整個類來處理自定義SSL驗證,還是有更好的方法來執行此操作?

$url = "https://myWebServer" 
$web = New-Object Net.WebClient 
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true } 
//[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { customSslCertValidation } #I would like to do something like this  
$output = $web.DownloadString($url) 
Write-Host $output 

回答

0

嘗試是這樣的:

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { 
    $c = [System.Security.Cryptography.X509Certificates.X509Certificate2]$args[1] 
    ($c.Thumbprint -eq "StoredOrRetrievedHash") 
} 

此檢查證書的指紋返回對字符串「StoredOrRetrievedHash」請求的一部分。您可能希望將其替換爲動態加載的證書中的詳細信息。值得注意的是,scriptblock委託的第一行將$ args數組的第二個元素轉換爲X509Certificate2類型的對象,因爲裸露的X509Certificate對象不公開指紋屬性。

注意:這隻適用於PowerShell v2及更高版本 - 在v1中爲任務分配一個任意的scriptblock是一項額外的工作,很坦率地說,只是不值得通常付出努力。

相關問題