У меня есть Windows 2008 Server с IIS 7, который использует приложение .NET С# для отправки запросов в PayPal для обработки платежей. Несколько месяцев назад я установил сертификат, который был куплен Verisign. После установки я смог запустить свой код WebClient для успешного создания SSL-подключений и обработать платежи через API-интерфейс PayPal NVP (пара значений имен).
В последнее время я получаю сообщение об ошибке во время транзакции SSL. Конкретная ошибка заключается в следующем:
Не удалось создать безопасный канал SSL/TLS
Я проверил все, что мог придумать, и прочитал много статей о StackOverflow и других местах в сети.
Лучший ресурс, который я нашел, это:
Запрос был прерван: не удалось создать безопасный канал SSL/TLS
Посмотрите на ошибку в этой статье http://support.microsoft.com/kb/915599 Резолюция J. Возможно также, что вы не поставляете сертификат клиента. Скорее всего, это проблема с использованием TLS или SSL3, и сервер не понимает этого.
И вот список всех других ресурсов, которые я пробовал читать и внедрял их решения:
Различные ссылки, которые я пробовал:
http://support.microsoft.com/kb/901183
Не удалось создать безопасный канал SSL/TLS. Может ли проблема быть прокси-сервером?
Запрос был прерван: не удалось создать безопасный канал SSL/TLS
http://forums.iis.net/t/1156690.aspx
Я пробовал следующие решения:
- Переустановите сертификат и поместите его в различные магазины (Personal, LocalComputer).
-
Добавлен код ServiceManager:
ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
-
Включено ведение журнала, чтобы получить более подробные сведения
- Различные другие решения, перечисленные в приведенных выше ссылках.
Чего так расстраивает то, что это работало нормально несколько месяцев назад, и теперь я получаю эту ошибку. Сначала я думал, что сертификат истек, но, похоже, все в порядке.
Это может быть пакет обновления или исправление для Windows Server создало новый параметр или сценарий, который нарушает SSL. Я решил, что повторная установка сертификата решит это.
Важно отметить, что при переустановке я просто добавлял его в различные магазины (Double Click cert и install). Я не создал "Запрос сертификата". Поскольку он уже установлен и привязан к порту 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-панель", которая показывает, что этот сайт проверен как безопасный. Это говорит мне, что Cert установлен правильно, это правда?
- Есть ли простой тест, который я могу выполнить с каким-либо HTTP-запросом, чтобы помочь сузить источник проблемы?
- Может ли это иметь какое-либо отношение к PayPal? Возможно ли, что paypal отклоняет запрос из-за полномочий на их конец?
- Внедрение ICertificatePolicy Interface может помочь в отладке проблемы? Я надеюсь, что смогу это исправить.
Я бы подумал, что либо SSL будет работать, либо нет, он вообще не имеет отношения к PayPal... но я мог ошибаться.
Мне кажется, что я должен просто использовать URL-адрес пары значений имени, который построен классом WebClient, и отправить его через канал через IE и получить ответ.