2012-01-26 95 views
1

内のクライアント証明書にTCPクライアント接続を作成する方法:これは素晴らしい作品私はSSL接続を確立することができ、コードと次のようにPowerShellの

$cert = dir cert:\CurrentUser\My | where {$_.Subject -like "*Alice*"} 

    $computerName = "google.com" 
    $port = "443" 

    $socket = New-Object Net.Sockets.TcpClient($computerName, $port) 
    $stream = $socket.GetStream() 

    $sslStream = New-Object System.Net.Security.SslStream $stream,$false 
    $sslStream.AuthenticateAsClient($computerName) 


    $sslStream 

。しかし、今は認証のためのクライアント証明書を追加することはできません。 は私がちょうど

$sslStream.BeginAuthenticateAsClient($computerName,$cert,"SslProtocols",$false,"Foo" ,"Bar") 

$sslStream.AuthenticateAsClient($computerName) 

を代用する必要がありますが、私は引数が権利を取得する幸運ではなかったと思います。 SombodyはAssyncコールを解決できますか;-) これはC#コードが必要なのでしょうか?

引数は以下のとおりです。

System.IAsyncResult BeginAuthenticateAsClient(

string targetHost, 
System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, 
System.Security.Authentication.SslProtocols enabledSslProtocols, 
bool checkCertificateRevocation, 
System.AsyncCallback asyncCallback, 
System.Object asyncState) 

私は最終的に達成したい何を一覧表示し、以降のクライアントが接続されているCipherSuiteを指定することです。 (私はWiresharkを知っています;-))

+0

追記:私は私のtestclientでこれを有効にSystem.Net.Security.SslStreamは、.NET FW 4に依存する場合がありますことを読んだ は: REGは、Microsoft \ .netframework/VのOnlyUseLatestCLR \ HKLM \ソフトウェアを追加/ t REG_DWORD/d 1 – icnivad

答えて

2

最後に、引数4はなかったが、コレクションでなかった$ Cert。

$cert = dir cert:\CurrentUser\My | where {$_.Subject -like "*alice*"} 

    $computerName = "google.com" 
    $port = "443" 

    [System.Security.Authentication.SslProtocols]$protocol = "ssl3" 

    $certcol = New-object System.Security.Cryptography.X509Certificates.X509CertificateCollection 
    $certcol.Add($cert) 




    $socket = New-Object Net.Sockets.TcpClient($computerName, $port) 
    $stream = $socket.GetStream() 

    $sslStream = New-Object System.Net.Security.SslStream $stream,$false 
    #$sslStream.AuthenticateAsClient($computerName) 
    $sslStream.AuthenticateAsClient($computerName,$certcol,$protocol,$false) 


    $sslStream 
0

ドキュメントによると、AuthenticateAsClientBeginAuthenticateAsClientの違いは、後者が非同期使用のためです。

AuthenticateAsClient(String, X509CertificateCollection, SslProtocols, Boolean)(2番目の引数は、認証に使用できるように証明書に関連付けられた秘密鍵が必要なので、好ましくはX509Certificate2)クライアント証明書のコレクションです。

+0

;-)私はMSDNで私の研究を行うことができます.Net 4 FW私はちょうど見ました: AuthenticateAsClient(文字列)メソッド。私はテストします。 – icnivad

+0

#Added:私のコール#But [System.Security.Authentication.SslProtocols] $プロトコル= "SSL3" : $ sslStream.AuthenticateAsClient($ COMPUTERNAME、$の証明書、$プロトコルは、$ false)を が戻って私を与えますエラー: "AuthenticateAsClient"と引数count: "4"のオーバーロードが見つかりません。 – icnivad

+0

ありがとうブルーノ、あなたは私の正しい方向を指摘しました。 – icnivad

関連する問題