Cannot resolve KeyInfo for verifying signature while sending soap request

Viewed 23

I keep getting the below error response while trying to make my request.

Error response:

Cannot resolve KeyInfo for verifying signature: KeyInfo 'SecurityKeyIdentifier
    (
    IsReadOnly = False,
    Count = 1,
    Clause[0] = X509ThumbprintKeyIdentifierClause(Hash = 0x00EE1960A463F7A891C0C9551DC937BD5D8F5F64)
    )
', available tokens 'SecurityTokenResolver
    (
    TokenCount = 1,
    TokenEntry[0] = (AllowedReferenceStyle=External, Token=System.IdentityModel.Tokens.X509SecurityToken, Parameters=System.ServiceModel.Security.Tokens.X509SecurityTokenParameters:
InclusionMode: AlwaysToRecipient
ReferenceStyle: Internal
RequireDerivedKeys: True
X509ReferenceStyle: Thumbprint)
    )
'.

Client creation:

Dim client As New xxxClient()
client.Endpoint.Contract.ProtectionLevel = ProtectionLevel.Sign
client.Endpoint.Binding = CreateBinding()
client.Endpoint.Address = CreateEndpointAddress(client.Endpoint)
Dim x509Certificate2Client As X509Certificate2 = CertificateManager.GetCertificateBySerialNumber(ConfigSettingFunctions.CadNetCertificaatSerialNummer(_Company_ID), True)
Dim x509Certificate2Server As X509Certificate2 = CertificateManager.GetCertificateBySerialNumber(ConfigSettingFunctions.CadNetCertificaatSerialNummer(_Company_ID), False)
client.ClientCredentials.ClientCertificate.Certificate = x509Certificate2Client
client.ClientCredentials.ServiceCertificate.DefaultCertificate = x509Certificate2Server
client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None

Binding creation:

Private Function CreateBinding() As Binding
    Dim binding = New CustomBinding()
    Dim initiatorSec As SecurityTokenParameters = New X509SecurityTokenParameters(X509KeyIdentifierClauseType.RawDataKeyIdentifier)
    Dim recipientSec As SecurityTokenParameters = New X509SecurityTokenParameters(X509KeyIdentifierClauseType.Thumbprint)
    Dim asym As AsymmetricSecurityBindingElement = New AsymmetricSecurityBindingElement(recipientSec, initiatorSec)
    binding.Elements.Add(asym)
    binding.Elements.Add(New TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8))
    binding.Elements.Add(New HttpsTransportBindingElement())
    Return binding
End Function

EndpointAdress creation:

Private Function CreateEndpointAddress(endpoint As ServiceEndpoint) As EndpointAddress
    Return New EndpointAddress(endpoint.ListenUri, EndpointIdentity.CreateDnsIdentity("xxx"))
End Function

While using SoapUI the request works so I'm sure that at the very least the client certificate is correct. Which makes me believe that something is wrong about the custombinding.

I also tried to use multiple verions of the MutualCertificateDuplex bindings but I continually received the same error. I'm fairly sure I need to use a Asymetric security binding to be able to connect to the service since the example code of the service uses the above binding configuration.

0 Answers
Related