Wcf запрос с отсутствующим взаимным сертификатом wsse: Безопасность - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь использовать wcf для выполнения SOAP-вызова с обоими сертификатами, но все равно получаю ошибки

'Запрос был прерван: не удалось создать безопасный канал SSL / TLS.'или

'Удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера Отсутствует wsse: заголовок безопасности в запросе'

Аналогичный запрос выполняется в пользовательском интерфейсе SOAP, но n C # не хочет проходить. Я также посмотрел, что именно отправляется, и обнаружил, что мыльный envolope действительно отсутствует wsse: Безопасность в заголовках. Как я могу заставить это работать?

WSHttpBinding myBinding = new WSHttpBinding();
myBinding.Security.Mode = SecurityMode.Transport;
myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

EndpointAddress ea = new EndpointAddress("https://[securedEndpoint]/Calculator");

CalculatorClient cc = new CalculatorClient(myBinding, ea);

cc.ClientCredentials.ClientCertificate.SetCertificate(
    StoreLocation.CurrentUser,
    StoreName.Root,
    X509FindType.FindBySerialNumber,
    "37802b632e74e355");

cc.ClientCredentials.ServiceCertificate.SetDefaultCertificate(
    StoreLocation.CurrentUser,
    StoreName.Root,
    X509FindType.FindBySerialNumber,
    "29f3e22fc1ae45be");

// Begin using the client.
try
{
    cc.Open();
    Console.WriteLine(cc.Add(200, 1111));
    Console.ReadLine();

    // Close the client.
    cc.Close();
}

1 Ответ

0 голосов
/ 14 октября 2019

Как вы знаете, когда мы используем сертификат для защиты связи, мы должны привязать сертификат к определенному порту. Кроме того, если мы аутентифицируем клиента с помощью сертификата, мы должны установить доверительные отношения сертификата между сертификатом сервера и сертификатом клиента. За исключением режима безопасности сообщений, достаточно, чтобы мы обычно предоставляли клиентский сертификат на стороне клиента.
Я предлагаю вам проверить состояние доверительных отношений между стороной клиента и стороной сервера. Кроме того, чтобы гарантировать доступность сертификата, нам лучше настроить сертификат с хранилищем сертификатов локального компьютера и отпечатком сертификата. Рассматривая проблему доступа к закрытому ключу сертификата, я предлагаю вам добавить учетную запись «Все» в группу управления личным ключом сертификата.
Наконец, убедитесь, что сертификат имеет аутентификацию клиента и предполагаемые цели аутентификации сервера.
Почувствуйтедайте мне знать, если я могу чем-то помочь.

...