Исключение для SslStream.AuthenticateAsClient (сообщение было неправильно отформатировано)

У меня странная проблема. Я пытаюсь подключиться к серверу Apple через TCP/SSL. Я использую клиентский сертификат, предоставленный Apple, для push-уведомлений. Я установил сертификат на свой сервер (Win2k3) как в папку «Локальные доверенные корневые сертификаты», так и в папку «Локальные личные сертификаты».

Теперь у меня есть библиотека классов, которая работает с этим соединением, когда я вызываю эту библиотеку классов из консольного приложения, работающего с сервера, она работает абсолютно нормально, но когда я вызываю эту библиотеку классов со страницы asp.net или веб-службы asmx, я получаю следующее исключение.

Не удалось выполнить вызов SSPI, см. внутреннее исключение. Полученное сообщение было неожиданным или неправильно отформатировано.

Это мой код:

X509Certificate cert = new X509Certificate(certificateLocation, certificatePassword);                       
X509CertificateCollection certCollection = new X509CertificateCollection(new X509Certificate[1] { cert });
// OPEN the new SSL Stream
SslStream ssl = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);                       
ssl.AuthenticateAsClient(ipAddress, certCollection, SslProtocols.Default, false);

ssl.AuthenticateAsClient - это место, где возникает ошибка.

Это сводит меня с ума. Если консольное приложение может нормально подключаться, должна быть какая-то проблема с безопасностью сетевого уровня asp.net, которая не проходит аутентификацию... не уверен, возможно, нужно добавить что-то или какую-то политику безопасности в web.config. Также просто хочу отметить, что я могу нормально подключаться к моей локальной машине разработки как с консолью, так и с веб-сайтом.

У кого-нибудь есть идеи?


person Noms    schedule 10.12.2009    source источник
comment
Привет, я столкнулся с той же проблемой сейчас. Как вы решили проблему? Пожалуйста помоги   -  person ramesh    schedule 03.09.2013


Ответы (4)


Вы установили сертификат в своей системе? Если вы используете Windows, он должен находиться в папке «Локальный компьютер/Личные» или «Доверенные папки» в консоли управления (Выполнить -> mmc).

person Noms    schedule 21.06.2010

ASP.NET работает под другой учетной записью, поэтому вам нужно использовать инструмент WinHttpCertCfg.exe, чтобы разрешить следующей учетной записи доступ к сертификату, который вы должны установить в личных/доверенных папках локального компьютера.

  • АСПНЕТ
  • Сетевая служба
  • Авторизованные пользователи

e.g.

winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "CertificateName" -a "ASPNET"

где имя сертификата — понятное имя вашего сертификата. Вы можете получить инструмент и информацию из здесь< /а>.

person Noms    schedule 12.12.2009

У меня была такая же проблема - добавление пользователя ASP.NET DefaultAppPool/Network Service мне не помогло.

Наконец-то я понял, что веб-служба ASP.NET не может получить доступ к сертификату, когда он находится в папке доверенных корневых сертификатов (хотя консольное приложение может). Я перетащил его обратно в папку «Личные сертификаты» и теперь могу вызывать метод как из консоли, так и из веб-приложений.

person cometfish    schedule 30.03.2015

измените X509Certificate на X509Certificate2, а также X509CertificateCollection на X509Certificate2Collection

person Rahul Parate    schedule 19.07.2011