2012-04-12 53 views
1

PowerShell很新,希望有人能指出我在正確的方向。Powershell http發佈與.cer的驗證

我需要執行POST請求,並且必須在POST請求期間將它傳遞給本地存儲的證書(x509)以進行身份​​驗證。

完成此操作的最佳方式或方法是什麼?我發現很多示例能夠在.net/C#中執行此任務,但我沒有找到任何可以在PowerShell中完成此任務的任務。

這裏是我的POST請求代碼,我想再次指出存儲在本地「C:\ code \ cert.crt」的證書並在Web事務中傳遞它。

$url = "https://myUrl/uploadTester" 
$data = '{"data": "988309487577839444"}' 
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true} 
$b = [System.Text.Encoding]::ASCII.GetBytes($data) 
$web = [System.Net.WebRequest]::Create($url) 
$web.Method = "POST" 
$web.ContentLength = $b.Length 
$web.ContentType = "application/x-www-form-urlencoded" 
$stream = $web.GetRequestStream() 
$stream.Write($b,0,$b.Length) 
$stream.close() 

$reader = New-Object System.IO.Streamreader -ArgumentList $web.GetResponse().GetResponseStream() 
$reader.ReadToEnd() 
$reader.Close() 

感謝您的高級幫助。

回答

0

將C#轉換爲PowerShell相當簡單。這給一試:

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true} 
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]::CreateFromCertFile("C:\Users\Andy\Desktop\Test.cer") 
$web = [System.Net.WebRequest]::Create($url) 
$web.ClientCertificates.Add($Cert) 

我適應了這個來自:http://support.microsoft.com/kb/895971

貌似關鍵是ClientCertificates財產。

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.clientcertificates.aspx

+0

感謝您的快速回復。我有一個問題: – user1048209 2012-04-12 12:42:33

+0

感謝您的快速回復安迪。我確實有一個關於代碼的問題。我是否仍然需要離開「ServerCertificateValidationCallback = {$ true}」這一行。這是否完全忽略了所有的證書檢查?或者是我提供的證書使用Create($ url)來處理實際的證書驗證檢查? – user1048209 2012-04-12 14:32:51

+0

@ user1048209我認爲ServerCertificateValidationCallback = {$ true}用於服務器端證書驗證,而不是發送到服務器的客戶端證書。 – 2012-04-12 18:54:07