Я никогда раньше не работал с soap службами, так что я мог сделать что-то не так. Я сгенерировал ссылку клиента службы для службы через ее wsdl с «Svcutil».
Я следовал этому руководству https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-configure-a-wcf-client-to-interoperate-with-wse3-0-services и настроил пользовательскую привязку. После этого я являюсь клиентом по ссылке и предоставляю новую привязку, которая использует WseSecurityAssertion.MutualCertificate10 и адрес конечной точки службы.
Затем я добавляю сертификат и добавляю учетные данные пользователя в клиент службы:
clientProxy.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(string.Concat(xxx, yyy), GetCertificatePassword(xxx), PersistKeySet);
clientProxy.ClientCredentials.ServiceCertificate.DefaultCertificate = new X509Certificate2(xxx, "", PersistKeySet);
clientProxy.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = ChainTrust;
clientProxy.ClientCredentials.ServiceCertificate.Authentication.RevocationMode = NoCheck;
Это код, который работал раньше (но до использования wcf и "Svcutil"), и я в основном скопировал его, но немного реорганизовал.
Когда я вызываю веб-сервис, я получаю эту ошибку :
System.ServiceModel.FaultException: 'CWWSS5511E: An exception occurred during the decryption of a message. The exception is CWWSS7310E: XML encryption information exists in the security header, however an inbound XML encryption configuration is not present.'
Я понимаю, что шифрую то, что не должен, и когда я сравниваю отправленный запрос со старым кодом с отправляемым сейчас запросом, я вижу, что это добавлено в заголовок безопасности:
<e:EncryptedKey Id="_0" xmlns:e="http://www.w3.org/2001/04/xmlenc#"><e:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" xmlns="http://www.w3.org/2000/09/xmldsig#"/></e:EncryptionMethod><KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
И немного информации о ключе.
Мне интересно, что я делаю неправильно, если код не делал раньше. Я не могу найти никаких файлов конфигурации, поэтому я не думаю, что это какая-то конфигурация, которую я пропустил. Где может быть установлено это шифрование? Это внутри привязки или там, где я устанавливаю clientCredentials?