У меня есть Windows 2008 Server с IIS 7, который использует приложение .NET C # для отправки запросов в PayPal для обработки платежей.Несколько месяцев назад я установил Сертификат, который был приобретен Verisign.После установки я смог запустить свой код WebClient для успешного создания соединений SSL и обрабатывать платежи через PayPal NVP API (пара имя-значение).
В последнее время я получаю сообщение об ошибке во время транзакции SSL.Конкретная ошибка выглядит следующим образом:
Не удалось создать безопасный канал SSL / TLS
Я проверил все, что мог придумать, и прочитал много статей о StackOverflow идругие места в сети.
Лучший ресурс, который я нашел, был таким:
Запрос был прерван: не удалось создать безопасный канал SSL / TLS
Найти ошибку в этомarticle http://support.microsoft.com/kb/915599 Resolution J. Также может быть, что вы не предоставляете клиентский сертификат.Скорее всего, это проблема с использованием TLS или SSL3, а сервер не понимает его.
http://blogs.msdn.com/b/jpsanders/archive/2009/01/07/you-receive-one-or-more-error-messages-when-you-try-to-make-an-http-request-in-an-application-that-is-built-on-the-net-framework-2-0.aspx
А вот список всех других ресурсов, которые я пытался прочитать иреализация их решений:
Различные ссылки, которые я пробовал:
http://support.microsoft.com/kb/901183
Не удалось создать безопасный канал SSL / TLS -Может быть проблема в прокси-сервере?
Запрос был прерван: не удалось создать безопасный канал SSL / TLS
Запрос был прерван:Не удалось создать защищенный канал SSL / TLS - расшифровано возвращено SEC_I_RENEGOTIATE
http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/99d49286-5c3a-4311-a1e3-499f035ce979/
http://blogs.msdn.com/b/jpsanders/archive/2009/01/07/you-receive-one-or-more-error-messages-when-you-try-to-make-an-http-request-in-an-application-that-is-built-on-the-net-framework-2-0.aspx
http://forums.iis.net/t/1156690.aspx
Я испробовал следующие решения:
- Переустановите сертификат и поместите его в различные магазины (Personal, LocalComputer)
Добавлен этот код ServiceManager:
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
Включено ведение журнала для получения более подробной информации
- Различные другие решенияons, перечисленные в приведенных выше ссылках
То, что так расстраивает, это то, что это работало нормально несколько месяцев назад, и теперь я получаю эту ошибку.Сначала я подумал, что срок действия сертификата истек, но, похоже, все в порядке.
Это может быть пакет обновления или исправление для Windows Server, создающее новый параметр или сценарий, который нарушает SSL.Я полагал, что переустановка сертификата решит это.
Важно отметить, что когда я переустанавливал, я просто добавлял его в различные магазины (дважды нажмите на сертификат и установите).Я не создал "Запрос сертификата".Поскольку он уже установлен и привязан к порту SSL моего приложения IIS, все должно быть в порядке.
Это код, который создает веб-запрос:
public static Hashtable DoWebReq(string strNVP, string strNVPSandboxServer)
{
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
string _strNVP = strNVP;
//Create web request and web response objects, make sure you using the correct server (sandbox/live)
var wrWebRequest = (HttpWebRequest)WebRequest.Create(strNVPSandboxServer);
wrWebRequest.Method = "POST"; // POST
var requestWriter = new StreamWriter(wrWebRequest.GetRequestStream());
requestWriter.Write(_strNVP);
requestWriter.Close();
// Get the response.
var hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse();
var responseReader = new StreamReader(wrWebRequest.GetResponse().GetResponseStream());
//and read the response
string responseData = responseReader.ReadToEnd();
responseReader.Close();
string result = System.Web.HttpContext.Current.Server.UrlDecode(responseData);
string[] arrResult = result.Split('&');
Hashtable htResponse = new Hashtable();
string[] responseItemArray;
foreach (string responseItem in arrResult)
{
responseItemArray = responseItem.Split('=');
htResponse.Add(responseItemArray[0], responseItemArray[1]);
}
return htResponse;
}
Вот коллекция снимков экрана, на которой показаны различные компоненты SSL-машины:
Это настройки привязки SSL в IIS:
Вотобзор установленных сертификатов:
Это ошибка, которую я получаю:
Установленные сертификаты:
Сведения о сертификате
Буду признателен за любые советы по исправлению этой ошибки.Вот некоторые возможности, которые я рассмотрел, но не рассмотрел:
- Может ли запрос занять слишком много времени?Это кажется достаточно быстрым ... но я читал, что это может быть проблемой.
- В Internet Explorer я вижу зеленую "панель SSL", которая показывает, что этот сайт проверен как безопасный.Это говорит о том, что сертификат установлен правильно, это правда?
- Существует ли простой тест, который я могу выполнить с каким-либо HTTP-запросом, чтобы помочь сузить источник проблемы?
- Может ли это быть как-то связано с PayPal?Возможно ли PayPal отклонить запрос из-за учетных данных на их конце?
- Может ли реализация интерфейса ICertificatePolicy помочь в устранении проблемы?Я надеюсь, что смогу это просто исправить.
Я бы подумал, что либо SSL будет работать, либо нет, он вообще не имеет отношения к PayPal ... но я могу ошибаться.
Мне кажется, что я должен иметь возможность просто использовать URL-адрес пары имя-значение, созданный классом WebClient, и отправить его по каналу через IE и получить ответ.