2012-04-12 12 views
1

PowerShellにはかなり新しく、誰かが私を正しい方向に向けることを願っています。Powershell http投稿と.cer for auth

私は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に変換するのはかなり簡単です。これを試してみてください:キーがClientCertificates財産であるように見えるhttp://support.microsoft.com/kb/895971

[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://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.clientcertificates.aspx

+0

迅速な返信アンディいただきありがとうございます。私は1つの質問がある: – user1048209

+0

クイック返信アンディのおかげで。私はコードに関する1つの質問があります。それでも "ServerCertificateValidationCallback = {$ true}"という行を残す必要がありますか?これはすべての証明書のチェックを完全に無視しませんか?あるいは、私が証明書を提供する際に、実際の証明書の確認を行うCreate($ url)を使用しているという事実はありますか? – user1048209

+0

@ user1048209 ServerCertificateValidationCallback = {$ true}は、サーバーに送信されるクライアント証明書ではなく、サーバー側の証明書検証用のものだと思います。 –