У меня проблема с PKCS #7, что заставляет меня гайки. Вот это вещь:Ошибка цепи и подтверждающий сертификат
У меня есть ASP.NET WebService, что делает запросы на другой сторонний сервер и получает PKCS # 7 подписал маркер в ответ (это на самом деле не важно, где этот маркер приходит от). Затем мой веб-сервис проверяет подпись (и срок действия) токена и возвращает вложенные данные пользователю, который вызвал метод.
Веб-сервис настроен для работы в выделенном пуле приложений, который работает под учетной записью пользователя в Windows, AD, IIS 6.
Чтобы выполнить проверку, я делаю это (подпись имеет маркер):
public static byte[] VerifyAndExtractEnvelopedData(byte[] signature) { if (signature == null) throw new ArgumentNullException("signature"); // Decode the signature SignedCms cms = new SignedCms(); cms.Decode(signature); cms.CheckSignature(false); if (cms.Detached) throw new InvalidOperationException("Cannot extract enveloped content from a detached signature."); return cms.ContentInfo.Content; }
Я развернул веб-службу (IIS 6). Когда я пытаюсь запустить упомянутую выше WebMethod, при проверке подписи, я получаю ошибку:
A certificate chain could not be built to a trusted root authority
Для того чтобы упростить вещи, я написал заявление с точно таким же кодом немного Windows Forms. Я зарегистрировался в интерактивном режиме на том же сервере, на котором размещается веб-служба, используя ту же учетную запись пользователя в пуле приложений. Запустите там EXE-файл, и он отлично работает, т. Е. Смог отлично проверить подпись. IMO, это исключает любую проблему, например, отсутствующий сертификат certificate authority (CA) и т. Д. (На самом деле у меня есть файл .CER подписывающего лица, я открываю его в Windows, и он сообщает мне, что цепочка в порядке).
Так что, по-видимому, единственное отличие состоит в том, что в первом случае мой процесс является веб-сервисом, а во втором - рабочим файлом EXE. Что еще может произойти, что мешает мне выполнить проверку в первом случае?