WSE3003: цепочка доверия сертификата не может быть проверена - PullRequest
1 голос
/ 02 октября 2009

Я пишу систему, которая использует публичный веб-сервис. Я использую веб-сервис с использованием VS2008 и классической технологии .NET Framework 2.0 Web Services. Моя проблема не в том, чтобы использовать веб-сервис или вызывать его операции.

Проблема в том, что когда я получаю ответ от операции, в которой он подписан, и закулисный прокси начинает проверять подпись. И в это время я получаю ошибку WSE3003. Я (кажется, я) загрузил сертификат службы в мое хранилище сертификатов LocalComputer / TrustedPeople, и когда я смотрю на его путь сертификата, я вижу, что все в порядке:

VeriSign Class 3 Public Primary CA
www.verisign.com/CPS Incorp.by Ref. ОТВЕТСТВЕННОСТЬ ООО. (С) 97 ...
servcert.there.com

Но я продолжаю получать следующее исключение:

Microsoft.Web.Services3.ResponseProcessingException: WSE910: ошибка произошла во время обработка ответного сообщения и вы можете найти ошибку во внутреннем исключение. Вы также можете найти ответное сообщение в ответе имущество. ---> Microsoft.Web.Services3.Security.SecurityFault: Маркер безопасности не может быть аутентифицирован или авторизован ---> System.Security.SecurityException: WSE3003: цепочка доверия сертификата не удалось проверить. Пожалуйста, проверьте если сертификат был правильно установлен в доверенных лиц Магазин сертификатов. Или вы можете захотеть установить конфигурацию allowTestRoot раздел истина, если это тест сертификат.

Следующий код, вероятно, не компилируется, и я удалил некоторые из чувствительных вещей, но вот идея, как я делаю свою часть:

// Construct the wse proxy
MyServiceWse wsClient = new MyServiceWse();

// Assign the credentials
UsernameToken userToken = new UsernameToken("user", "pass", PasswordOption.SendPlainText);
wsClient.SetClientCredential(userToken);
wsClient.RequestSoapContext.IdentityToken = userToken;

// Find the client and service certificates
X509Certificate2 clientCert = MyCertificateManager.FindCertificate(StoreLocation.LocalMachine, StoreName.TrustedPeople, "mycert.here.com");
X509Certificate2 serviceCert = MyCertificateManager.FindCertificate(StoreLocation.LocalMachine, StoreName.TrustedPeople, "servicecert.there.com");

// Add the policy to the proxy
Policy policy = new Policy();
MySecurityClientAssertion assertion = new MySecurityClientAssertion();
assertion.SetServiceCertificate(serviceCert);
assertion.SetClientCertificate(clientCert);
policy.Assertions.Add(assertion);
wsClient.SetPolicy(policy);

// Assign the service URL and call an operation
wsClient.Url = "https://services.there.com/TheirService.asmx";
TheirOperationResponse r = wsClient.CallTheirOperation();

Я уверен, что мой код неверен, потому что я понимаю, что это намного лучше, чем хранение сертификатов и цепочка доверия. Любая помощь будет отличной. Спасибо за ваши усилия.

1 Ответ

2 голосов
/ 02 октября 2009

Если проблема связана с цепочкой, то все остальные сертификаты также должны быть в хранилище сертификатов.

Итак, начнем с вершины; запустите MMC, добавьте оснастку «Управление сертификатами» и укажите ее для учетной записи локального компьютера.

Теперь в доверенном корневом органе проверки «Открытый первичный ЦС VeriSign класса 3» есть и соответствует корневому ЦС в сертификате, который вы пытаетесь использовать. (это должно быть там, это стандартное).

Затем проверьте, что www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD. (C) 97 ... находится в промежуточном магазине центров сертификации. На моей машине есть два из них, срок действия одного из которых истек.

Если они оба там, вам нужно взглянуть на цепочку сертификатов чуть ближе. Загрузите веб-сервис в свой браузер и посмотрите, какую ошибку сертификата вы получите в браузере. Если вы перейдете на сайт, то сможете щелкнуть значок SSL и продолжить работу по цепочке. Нажмите на замок и выберите просмотр сертификатов. Затем выберите вкладку пути сертификации. Надеюсь, что там вы увидите цепочку и выделите проблемные сертификаты (сейчас я не могу найти проблемный веб-сайт, поэтому не могу вспомнить, как он выглядит). Выберите самую низкую и посмотрите, что это за ошибка, выделив ее и нажав просмотреть сертификат. Вы можете обнаружить, что это просто сертификат с истекшим сроком действия или что-то в этом роде.

...