Исключение ввода-вывода OAuth2 API PayPal: узел не аутентифицирован

В течение многих месяцев моя процедура OAuth2 работала отлично. Подпрограмма OAuth2 создает новые токены, чтобы я мог выполнять операции API.

Внезапно, неделю назад, я начал получать следующую ошибку:

Charset     [empty string]
ErrorDetail     I/O Exception: peer not authenticated
Filecontent     Connection Failure
Header  [empty string]
Mimetype    Unable to determine MIME type of file.
Responseheader  
struct [empty]
Statuscode  Connection Failure. Status code unavailable.
Text    YES 

Я использую Coldfusion 10 и ничего не менял в тестовой среде в течение нескольких месяцев, так что это изменение, должно быть, было сделано со стороны PayPal.

Я использую следующий http-вызов:

<cfset clientid = "***">
<cfset secret = "***">

<cfhttp method="post" url="https://api.sandbox.paypal.com/v1/oauth2/token" result="result">
<cfhttpparam type="header" name="Content_Type" value="application/json">
<cfhttpparam type="formfield" name="grant_type" value="client_credentials">
<cfhttpparam type="header" name="Authorization" value="Basic #ToBase64(clientid & ":" & secret)#">
</cfhttp>

Может ли кто-нибудь помочь мне решить эту проблему?


person Charles Robertson    schedule 01.02.2016    source источник
comment
Обновите/импортируйте сертификат PayPal в хранилище ключей JVM. Последний сертификат датирован 2 сентября 2015 года.   -  person Alex    schedule 02.02.2016
comment
@Alex Спасибо за совет. Я импортировал последний 2048-битный корневой сертификат Verisign Class 3 G5 и соответствующий сертификат конечной точки песочницы в cacerts с помощью keytool. Хотя я не уверен, что мне нужно было импортировать последний. Я перезапустил CF, но все равно получил ту же ошибку. Я потратил несколько дней на это, и я немного зол, что PayPal только что внесла эти изменения, не уведомив разработчиков. Я предполагаю, что я не единственный разработчик CF, который использует PayPal RESTFUL API?   -  person Charles Robertson    schedule 03.02.2016
comment
@Alex Я фактически переименовал псевдоним Verisign, потому что уже был сертификат с таким же псевдонимом. Возможно, мне следует удалить старый Verisign Class 3 G5 и назвать новый сертификат старым псевдонимом. Как вы думаете, это будет иметь какое-то значение?   -  person Charles Robertson    schedule 03.02.2016
comment
@Alex Не могли бы вы дать мне URL-адрес сертификата, о котором вы говорите, на случай, если я импортировал не тот?   -  person Charles Robertson    schedule 03.02.2016
comment
У вас установлено последнее обновление ColdFusion? Добавлена ​​поддержка SNI, что может быть проблемой для серверов PayPal. Кроме этого: обязательно импортируйте все сертификаты (включая цепочку) на поддоменах, на которые вы отправляете запросы.   -  person Alex    schedule 03.02.2016
comment
@Alex Я использую CF10, но у меня обновление 12 из 17. Я отправляю запросы только на api.sandbox. paypal.com. Я импортировал последний 2048-битный сертификат Verisign, и я думаю, что он был недавно обновлен PayPal, хотя имя сертификата не изменилось с 2006 года: knowledge.verisign.com/support/mpki-for-ssl-support/ Я обновлю CF10 до обновления 17, и сообщить, что происходит?   -  person Charles Robertson    schedule 03.02.2016
comment
@Alex К сожалению, я не могу обновить CF10 после обновления 12 из 17, потому что при попытке установить обновление я получаю исключение «недопустимая подпись». Я собираюсь удалить CF10 и установить CF11. Я использую Railo на своих производственных серверах, поэтому я смогу без проблем обновить его. Интересно, что у моего локального ACF и удаленного Railo была одна и та же проблема с PayPal одновременно. Я думаю, это означает, что это проблема с сертификатом, если только Райло не страдает от проблемы SNI, что было бы огромным совпадением...   -  person Charles Robertson    schedule 03.02.2016
comment
@Alex После того, как я установил CF11, токен PayPal был выдан без проблем. Очевидно, что cacerts CF11 и поставщики безопасности совместимы. Но спасибо за помощь...   -  person Charles Robertson    schedule 03.02.2016


Ответы (2)


Хорошо, у меня была точно такая же проблема с подключением к новым API REST PayPal, и причиной ошибки является миграция с корневого сертификата Verisign G2 (который PayPal больше не поддерживает) и переход на алгоритм SHA-256 и подписанные сертификаты Verisign G5.

Путаница возникает из-за того, что Coldfusion 10 и Coldfusion 11 уже имеют cacerts в доверенном магазине ColdFusion, так почему же он все еще не работает?

После нескольких часов попыток и поиска я обнаружил, что проблема с сертификатом связана с папкой JRE, а не с ColdFusion. Это быстро привело меня к обновлению ColdFusion для работы с последней версией Java JDK 1.8_101 (мой тестовый сервер работал на JVM 1.7, а рабочий сервер — на 1.8_25 (так что я обновил оба, и код заработал (что было похоже на Charles код в исходном посте).

Итак, вот простые шаги:

  1. Обновите ColdFusion до последнего обновления от администратора ColdFusion.
  2. Установите последнюю версию Java JDK (в настоящее время 1.8_101) и запомните, где вы ее установили.
  3. Вернитесь в Администратор ColdFusion и перейдите к Java и JVM в разделе «Настройки сервера» и укажите JVM в папку JRE в новом JDK, например. /{JDK_home}/Contents/Home/jre и перезапустите ColdFusion.

PayPal oAuth2.0 снова заработает! (По крайней мере, это было для меня). Я надеюсь, что это поможет кому-то сэкономить часы разочарования и быть уверенным в том, что последний REST API PayPal действительно работает с ColdFusion (даже если они не предоставляют пример — я работаю над отправкой его в PayPal через Github в ближайшее время).

person James Martin    schedule 30.09.2016
comment
Спасибо за этот ответ. Я уверен, что вы правы насчет версии JDK, но чистая установка последней версии CF11, похоже, решила проблему для меня. - person Charles Robertson; 01.10.2016
comment
Да, чистая установка также может решить проблему, но вы потеряете всю свою конфигурацию и настройки, поэтому простое обновление JDK или Server JRE — это решение для рабочей версии ColdFusion 10 или 11. - person James Martin; 02.10.2016

Просто чтобы все знали, как только я установил CF11, токен PayPal был выдан без проблем. Очевидно, что cacerts CF11 и поставщики безопасности совместимы. Теперь я должен попытаться разобраться с Railo, что может быть сложнее, так как я использую Railo 4. Я попытаюсь обновить Railo до его самой последней версии 4+...

Обновлять:

Чтобы заставить это работать на Railo, вам нужно выполнить чистую установку Lucee 4.5 [преемник Railo 4.2]. НЕ ОБНОВЛЯЙТЕСЬ С RAILO НА LUCEE, ПЕРЕМЕЩАЯ .JAR. Повторюсь, вам нужно провести чистую установку Lucee 4.5:

http://lucee.org/downloads.html

Затем я столкнулся с проблемой с адаптером BonCode. Если вы получаете следующую ошибку от IIS:

Обработчик IIS "BonCode-Tomcat-CFM-Handler" имеет неверный модуль

Проверьте свои пулы приложений IIS. В пуле приложений нажмите «Основные настройки» на панели справа. Если версия .NET — 2.0.0, измените ее на 4.X и сохраните изменения.

СОВЕТ:

Убедитесь, что в вашем файле web.config есть следующие настройки для просмотра этой ошибки:

<configuration>
   <system.webServer>
      <httpErrors errorMode="Detailed"/>
   </system.webServer>
</configuration>

Это должно сэкономить вам неделю работы :)

Всем удачи!

person Charles Robertson    schedule 03.02.2016
comment
Мы отлично используем PayPal с CF 10, так что, вероятно, здесь проблема больше связана с окружающей средой. Кстати. вы также можете обновить свою установку Railo до Lucee (преемник Railo). - person Alex; 03.02.2016
comment
@ Алекс Да. Завтра я обновлю Railo 4.2 до Lucee 4.5. Надеюсь, это решит проблему с PayPal на моем удаленном сервере. Я думаю, что вы правы насчет CF10, просто я не смог установить упомянутые вами обновления. Единственным вариантом было установить CF11... - person Charles Robertson; 04.02.2016
comment
Список провайдеров безопасности CF11 намного шире, чем в версии CF10 [обновление 12]. Я думаю, что обновление CF10 13 - 17, вероятно, добавит некоторые пункты в этот список. Улучшенная поддержка SHA-2 [2048]. Я почти уверен, что мои сертификаты были надежными... - person Charles Robertson; 04.02.2016
comment
@ Алекс, у меня большие проблемы. Я обновил Railo 4.2 до Lucee 4.5 [кстати, очень просто :)]. Я обновил все соответствующие сертификаты с помощью keytool до cacerts. Но я получаю следующую ошибку [с использованием атрибута throwonerror cfhttp]: Cause string javax.net.ssl.SSLHandshakeException url string api.sandbox.paypal.com/v1/oauth2/token Подробная строка Строка ErrorCode 0 Строка Extended_Info Строка ExtendedInfo Строка сообщения Получено фатальное предупреждение: handshake_failure Строка StackTrace Получено фатальное предупреждение: handshake_failure at sun.security. ssl.Alerts.getSSLException(Alerts.jav - person Charles Robertson; 04.02.2016
comment
Helppppppppppppppppppppppppppppplppp, пожалуйста. Мой бизнес идет ко дну из-за этой сумасшедшей проблемы. Осознает ли PayPal, что лишает людей средств к существованию? Возможно, мне придется купить лицензию CF11 Enterprise для моего производственного сервера, поскольку я знаю, что она работает с ACF. - person Charles Robertson; 04.02.2016
comment
@Alex Эта ссылка, кажется, предполагает, что мне нужно обновить пару файлов .jar в JRE\lib\security: stackoverflow.com/questions/30350120/ Знаете ли вы, какие файлы .jar и где я могу получить обновления. Я мог бы скопировать их из каталога JRE ACF11, но это кажется рискованным??? - person Charles Robertson; 04.02.2016
comment
Что-то с вашей JRE кажется сломанным/устаревшим. Рассмотрим чистую переустановку Lucee. Вы можете проверить канал Lucee на cfml.slack.com для получения дополнительной помощи. - person Alex; 05.02.2016
comment
@Алекс Спасибо. Я обнаружил, что мне может понадобиться скопировать файлы JSafeJCE .jar в Lucee/jdk/jre/lib/security. Это версия с неограниченной силой. Это та же библиотека, которую использует ACF11. Если это не сработает, я сделаю чистую установку Lucee, как было предложено. Я просмотрел список провайдеров безопасности Lucee, но JSafeJCE в этом списке нет. В ACF11 он является поставщиком по умолчанию и решает эту проблему локально. Битва продолжается... - person Charles Robertson; 05.02.2016
comment
shilpikhariwal.com/2012/04/ - person Charles Robertson; 05.02.2016
comment
ca.com/us/ support/ca-support-online/product-content/ Хотя я не думаю, что на самом деле необходимо редактировать файл java.security, как предлагается в этой статье. Я просмотрел файл java.security ACF11, и там нет записи JSafeJCE, но это поставщик безопасности по умолчанию при программном чтении списка. ‹cfset objSecurity = createObject("java", "java.security.Security") /› ‹cfdump var=#objSecurity.getProviders()# /› Если только ACF11 не скрывает где-то пользовательский файл java.security... - person Charles Robertson; 05.02.2016
comment
@Алекс Гений. Спасибо за совет. Чистая установка Lucee 4.5 позволила PayPal снова установить рукопожатие. Имейте в виду, у меня было чертовски много времени, чтобы заставить адаптер BonCode работать с IIS. Мне пришлось проверить свои пулы приложений IIS. В пуле приложений я нажал «Основные настройки» на панели справа. И изменил версию .NET с 2.0.0 на 4.X. Кроме того, мне пришлось добавить еще одно сопоставление обработчика BonCode для '*.cfml'. Но в итоге все хорошо. В очередной раз благодарим за помощь. Я добавлю этот бит к ответу выше... - person Charles Robertson; 05.02.2016