Служба клиента WCF для WSE 3.0 Исключение: CWWSS7310E: XML информация о шифровании [.....] - PullRequest
0 голосов
/ 27 марта 2020

Я никогда раньше не работал с 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?

1 Ответ

0 голосов
/ 30 марта 2020

Итак, после многих чтений и сравнений я, наконец, понял, что не установил ProtectionLevel в System. Net .Security.ProtectionLevel.Sign в новом поколении справочного файла службы. это было, вероятно, жестко запрограммировано в старых, вместо использования файла конфигурации для установки ProtectionLevel. Именно поэтому служба на стороне службы не понимает, как правильно ее расшифровать.

...