2017-10-04 9 views
0

クライアント証明書認証(相互認証)を必要とするSOAP Webサービス(att /)とMTOMを使用すると問題が発生します。503エラーが発生する3番目の部分TLS 1.2を使用したSOAPサービスとWCFによるクライアント証明書の認証

  1. 私はこのキーIでopenssl command openssl genrssa -out mykey.key 2048
  2. でキーRSAを生成した:私はすでに私はクライアント証明書を受け取るためになかったものをお見せしようとしたものを書き込む前に

    CSR生成まし:openssl req -new -key mykey.key -out mycsr.csr

  3. を私はクライアント証明書を受信するために、Webサービスの所有者に、このCSRを送信した、と彼らは私に署名しCERTIを与えましたficate:certificate.cer

は、今私は私のクライアント証明書を持っていることを私は信頼されたルート証明機関の下で私の証明書ストアにそれを追加しました。

は今コード:すべての

最初に私は、Visual Studioでテストプロジェクトを作成し、私はサービスのWSDLを使用してサービス参照を追加しました。それは私にとって非常にシンプルに見えますが、私は自分のコードを実行したときに、私は

System.ServiceModel.Security.MessageSecurityException: 'The HTTP request was forbidden with client authentication scheme 'Anonymous'.'

Internal Exception: WebException: Remote Server Error: (403) Forbidden

次を取得し、私はフィドラーとWiresharkのを使用してトラフィックを分析する

' Setting TLS 1.2 protocol ' 
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 
ServicePointManager.ServerCertificateValidationCallback = Function(sender1, certificate, chain, sslPolicyErrors) 
                   Return True 
                  End Function 

'Creating endpoint and binding' 
Dim endpoint As EndpointAddress = New EndpointAddress("https://myWebService.it/service-page") 
Dim sslBinding As BasicHttpBinding = New BasicHttpBinding(BasicHttpSecurityMode.Transport) 

'Setting CredentialType = Certificate' 
sslBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate 

'Getting the client certificate from the store' 
Dim coll = New X509Store(StoreName.My, StoreLocation.CurrentUser) 
coll.Open(OpenFlags.ReadOnly) 
Dim cert = coll.Certificates.Find(X509FindType.FindByThumbprint, "76DB1454D4B25ACEAF2BAE465C310E3119278792", True) 

'Creating the service' 
Dim svc As SdITrasmissioneFileClient = New SdITrasmissioneFileClient(sslBinding, endpoint) 

'Setting the certificate inside client credentials' 
svc.ClientCredentials.ClientCertificate.Certificate = cert(0) 

svc.Open() 

'Calling the service' 
Dim resp As RispostaEsito_Type = svc.Esito(New Esito_Type() With {.IDFile = "4454555"}) 

svc.Close() 

は、私は数行のコードを書きました私は、クライアントとサーバー間のTLSハンドシェイク中に、クライアントが証明書をサーバーに送信しないことを発見しました。

enter image description here

今私は、私はクライアントの資格情報に証明書を追加した場合でも、それは先に送信されていない理由を理解していません。

答えて

0

測定値の多くの後、私は私が欠けていたものを発見:

  • 秘密鍵が含まれていません.cerのクライアント証明書を!私がやったこと

のopensslのx509 -informデル-in ClientCert.cer -out ClientCert.pem

  1. 私は、次のコマンドを使用して、PEM形式で.cerのファイルを変換します

    のopensslのpkcs12 -export -in ClientCert.p:

  2. は、私は私の秘密鍵での.pfx証明書を作成しましたem -inkey mykey.key -out ClientCert。pfx

次に、.pfx証明書をインストールするとすべてが魅力的です。

私は誰かがそれを見つけるのを願っています。

関連する問題