cfhttp возвращает ошибку подключения для сетевого URL-адреса, к которому браузер может получить доступ как через http, так и через https

Я использую cfhttp, чтобы попытаться получить json из API одной из наших организаций. У меня работает код при попытке получить пример json с одного из наших собственных серверов, но когда я указываю его на сам API, я получаю сообщение об ошибке соединения. Это код:

<cfhttp method="get" url="http://[url]/api/menu">
    <cfhttpparam type="URL"     name="id"   value="[guid]">
</cfhttp>
<cfset FileWrite("#application.tempDirPath#/temp.json", CFHTTP.FileContent)>

Я заменил реальные значения на [url] и [guid].

Я попытался получить доступ к этому URL-адресу в браузере по адресу https://[url]/api/menu?id=[guid], и он работает отлично, указывая на то, что у моей машины нет проблем с доступом к этому URL-адресу. URL-адрес — это сервер в нашей сети, к которому я могу получить доступ, пока я пользуюсь корпоративной VPN.

Что я пробовал:

  • Живой код должен указывать на https. Пробовал и http и https.
  • Я попытался перейти на домашнюю страницу по тому же URL-адресу, и это также приводит к сбою подключения, но работает в браузере.
  • Я попробовал тот же код с http://www.google.com, и он загружает HTML-код Google без проблем.
  • Я попытался перезапустить ColdFusion и свою машину.
  • Я попытался отключить сжатие через заголовки:

    <cfhttp method="get" url="http://[url]/api/menu">
        <cfhttpparam type="header" name="Accept-Encoding" value="deflate;q=0" />
        <cfhttpparam type="header" name="TE" value="deflate;q=0" />
        <cfhttpparam type="URL"           name="id"          value="[guid]">
    </cfhttp>
    

У меня нет доступа к целевому серверу. Я могу обратиться за помощью к тем, у кого есть доступ, но их вывод на данный момент таков: «это проблема ColdFusion», поэтому я не уверен, какую помощь я могу получить. Это делает невозможным проверку правил брандмауэра или ограничений пользовательского агента; предложения о способах проверки этих вещей на местном уровне будут приветствоваться.

Изменить

В комментариях к этому вопросу я определил, что http просто перенаправляется на https по этому адресу. Поэтому я следовал инструкциям, приведенным в разделе https://stackoverflow.com/questions/20469194/coldfusion-https-connection-failure, чтобы импортировать сертификат. После этого я следовал инструкциям, чтобы убедиться, что сертификат был успешно импортирован. Затем я перезапустил CF Server.

После этого я снова запустил свой код и выгрузил всю структуру cfhttp во временный файл. Это был результат:

<?xml version="1.0" encoding="UTF-8"?>
<STRUCT ID="1">
   <ENTRY NAME="Errordetail" TYPE="STRING">I/O Exception: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target</ENTRY>
   <ENTRY NAME="Mimetype" TYPE="STRING">Unable to determine MIME type of file.</ENTRY>
   <ENTRY NAME="Statuscode" TYPE="STRING">Connection Failure.  Status code unavailable.</ENTRY>
   <ENTRY NAME="Filecontent" TYPE="STRING">Connection Failure</ENTRY>
   <ENTRY NAME="Responseheader" TYPE="STRUCT">
      <STRUCT ID="2" />
   </ENTRY>
   <ENTRY NAME="Text" TYPE="BOOLEAN">true</ENTRY>
   <ENTRY NAME="Charset" TYPE="STRING" />
   <ENTRY NAME="Header" TYPE="STRING" />
</STRUCT>

person Nicholas    schedule 02.01.2020    source источник
comment
Ваш CFHTTP вызывает HTTP, но ваш браузер использует HTTPS. Принимает ли сервер соединения на портах 80 и 443?   -  person haxtbh    schedule 02.01.2020
comment
Можно также сделать с более конкретным сообщением об ошибке   -  person haxtbh    schedule 02.01.2020
comment
Похоже на проблему с сертификатом. http://[url]/ перенаправляет на https://[url]/? cfhttp следует перенаправлениям по умолчанию, возможно, попадая в сертификат. Попробуйте использовать <cfhttp redirect="false" method=..., чтобы увидеть, установлено ли соединение даже на HTTP-порте по умолчанию.   -  person Alex    schedule 02.01.2020
comment
@haxtbh Я пробовал и http, и https в своем браузере, и в своем cfhttp. Оба работают в браузере и оба не работают в cfhttp. Я также попытался указать порт 443. Сбой подключения — единственное сообщение, которое появляется в содержимом файла cfhttp.   -  person Nicholas    schedule 02.01.2020
comment
@Alex Возможно, ты прав. Записывая полную структуру cfhttp, я вижу исключение ввода-вывода: sun.security.validator.ValidatorException: сбой построения пути PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации к запрошенной цели. Я вернулся в браузер и обнаружил переадресацию, которую раньше не замечал. Я почитаю об импорте сертификата. Я увидел, что это не работает на http, и просто пришел к выводу, что это не проблема с https.   -  person Nicholas    schedule 02.01.2020