クライアント証明書認証(相互認証)を必要とするSOAP Webサービス(att /)とMTOMを使用すると問題が発生します。503エラーが発生する3番目の部分TLS 1.2を使用したSOAPサービスとWCFによるクライアント証明書の認証
- 私はこのキーIで
openssl command openssl genrssa -out mykey.key 2048
- でキーRSAを生成した:私はすでに私はクライアント証明書を受け取るためになかったものをお見せしようとしたものを書き込む前に
「CSR生成まし:
openssl req -new -key mykey.key -out mycsr.csr
- を私はクライアント証明書を受信するために、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ハンドシェイク中に、クライアントが証明書をサーバーに送信しないことを発見しました。
今私は、私はクライアントの資格情報に証明書を追加した場合でも、それは先に送信されていない理由を理解していません。