2

以下は、私たちが持っている内部 Web サービスに SOAP 要求を行うために作成したコードのスニペットです。Fiddler を実行している Fiddler でこれを実行すると、サイトが証明書を要求しているという警告が表示されます。Fiddler に証明書を提供すると、これは完全に実行されます。Fidler をオフにすると、接続が閉じられたというエラーが表示されます。証明書を ClientCertificates コレクションに追加しているため、壁に頭をぶつけています。デバッグすると、それがあることがわかります。実行時に表示されない理由はありますか? (ローカルマシンストアから取得してファイルから作成してテストした場所が表示されますが、どちらのオプションも機能していません)

            $cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]::CreateFromCertFile($certPath)
            #$cert = get-item cert:\LocalMachine\* | get-ChildItem | Where-Object -FilterScript {($_.FriendlyName -eq "HRSYS")}
            $soapWebRequest = [System.Net.WebRequest]::Create($url)
            $soapWebRequest.ClientCertificates.Add($cert)
            $soapWebRequest.Headers.Add("SOAPAction", "http://service.wellsfargo.com/provider/hr/entity/teamMemberData/getTeamMemberProfileById/2010/12/") 
            $soapWebRequest.ContentType = "text/xml;charset=`"utf-8`"" 
            $soapWebRequest.Accept = "text/xml" 
            $soapWebRequest.Method = "POST" 
            $soapWebRequest.Timeout = 60000
            $soapWebRequest.UseDefaultCredentials = $true
4

2 に答える 2

2

これに対する私の答えを見つけました。秘密鍵にアクセス許可を付与する必要がありました。テストするために、私はだまされて、みんなのために追加しました。

C:\Program Files (x86)\Windows Resource Kits\Tools>winhttpcertcfg.exe -g -c "LOCAL_MACHINE\my" -s HRSYS -a Everyone

于 2012-08-31T18:24:49.627 に答える
1

クライアント証明書を使用するために必要な秘密鍵を持つ証明書ではなく、証明X509Certificate2.CreateFromCertFileのみをロードするように設計されているようです。

X509Certificate2はX.509証明書をモデル化するクラスですが、秘密鍵をそれに関連付ける機能もあります(秘密鍵は証明書の一部ではありませんが、証明書を使用して認証する必要があります)。

コンストラクターを使用するX509Certificate2(String, SecureString)と、PKCS#12ファイルとそのパスワードから証明書をロードするためのより良い方法になります。

FiddlerをMITMSSL/ TLSプロキシとして使用すると、クライアントがクライアント証明書を正常に送信した場合でも、クライアント証明書認証が失敗することに注意してください。これは、Fiddlerがサーバーから送信された本物の証明書ではないサーバー証明書を提示するため、異なるハンドシェイクが生成されるためです。クライアント証明書認証は、サーバーがハンドシェイクの独自のアカウントと比較できるように、ハンドシェイク全体のダイジェストに署名するクライアントに依存しているため、およびMITMプロキシが使用すると、クライアント証明書認証は失敗します。

于 2012-08-30T16:00:30.860 に答える