web-dev-qa-db-ja.com

ColdFusion https接続の失敗

2つのWebサーバーのいずれかで正常に動作するが、他のサーバーやローカルマシンでは動作しないAPIがあります。代わりに、ログインプロセスの一部としてhttpsリクエストを送信すると、接続エラーが発生します。

リクエストは非常にシンプルであり、リクエストが実行されている3つのサーバーの1つで問題なく機能します。最初のものは次のとおりです。

<cfhttp url="https://accounts.ea.com/connect/auth?response_type=code&client_id=EASFC-web&state=59c5a8f1c4e7a991c1da0b54504c38e45f4d8d78&redirect_uri=http%3A%2F%2Fwww.easports.com%2Ffifa%2Ffootball-club%2Flogin_check&locale=uk&scope=basic.identity+basic.persona+signin+offline " method="GET" result="Stage2" redirect="false">
    <cfhttpparam type="header" name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" />
    <cfhttpparam type="header" name="Accept-Encoding" value="gzip, deflate" />
    <cfhttpparam type="header" name="Accept-Language" value="en-US, en;q=0.5" />
    <cfhttpparam type="header" name="Connection" value="keep-alive" />
    <cfhttpparam type="header" name="Host" value="accounts.ea.com" />
    <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
</cfhttp>

私が見たところ、これは一般的な問題のようですが、 この修正 には喜びがありませんでした。

私はおそらく見落としているいくつかのセキュリティ設定があると思いますか?それが役立つ場合は、ローカルマシンのブラウザ内でページにアクセスしてログインできます。

誰かアドバイスはありますか?

これは、CFDUMPで返されるものです。

Debugging Information 
ColdFusion Server Developer 9,0,0,251028
Template    /CraigTest/FUT/FIFACPB/logInSearchAccount17.cfm
Time Stamp  09-Dec-13 11:40 AM
Locale  English (UK)
User Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0
Remote IP   127.0.0.1
Host Name   127.0.0.1
________________________________________
Execution Time
Total Time  Avg Time    Count   Template
608 ms  608 ms  1   C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\logInSearchAccount17.cfm
5 ms    5 ms    1   CFC[ C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\Application.cfc | onRequestStart(/CraigTest/FUT/FIFACPB/logInSearchAccount17.cfm) ] from C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\Application.cfc
1 ms    1 ms    1   CFC[ C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\cfcs\Player.cfc | init([complex value]) ] from C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\cfcs\Player.cfc
0 ms    0 ms    1   CFC[ C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\cfcs\Bid.cfc | init([complex value]) ] from C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\cfcs\Bid.cfc
0 ms    0 ms    1   CFC[ C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\cfcs\Club.cfc | init([complex value]) ] from C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\cfcs\Club.cfc
0 ms    0 ms    1   CFC[ C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\cfcs\Connect.cfc | init([complex value]) ] from C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\cfcs\Connect.cfc
0 ms    0 ms    1   CFC[ C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\cfcs\Search.cfc | init([complex value]) ] from C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\cfcs\Search.cfc
0 ms    0 ms    1   CFC[ C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\cfcs\doLogin.cfc | init([complex value]) ] from C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\cfcs\doLogin.cfc
4 ms        STARTUP, PARSING, COMPILING, LOADING, & SHUTDOWN
617 ms      TOTAL EXECUTION TIME
red = over 250 ms average execution time 
________________________________________
Scope Variables
CGI Variables:
AUTH_PASSWORD=
AUTH_TYPE=
AUTH_USER=
CERT_COOKIE=
CERT_FLAGS=
CERT_ISSUER=
CERT_KEYSIZE=
CERT_SECRETKEYSIZE=
CERT_SERIALNUMBER=
CERT_SERVER_ISSUER=
CERT_SERVER_SUBJECT=
CERT_SUBJECT=
CF_TEMPLATE_PATH=C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\logInSearchAccount17.cfm
CONTENT_LENGTH=
CONTENT_TYPE=
CONTEXT_PATH=
GATEWAY_INTERFACE=
HTTPS=
HTTPS_KEYSIZE=
HTTPS_SECRETKEYSIZE=
HTTPS_SERVER_ISSUER=
HTTPS_SERVER_SUBJECT=
HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_ENCODING=gzip, deflate
HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.5
HTTP_CONNECTION=keep-alive
HTTP_COOKIE=cf_debug_general=block; cf_debug_template_stack=block; CFID=15108; CFTOKEN=12249080; CFAUTHORIZATION_cfadmin=YWRtaW4NRTg5NzE2OTdCODczMUI0MDVBM0UxRTZCMjI2N0I1MDA5M0QzQkE4MQ1jZmFkbWlu; CFADMIN_LASTPAGE_ADMIN=%2FCFIDE%2Fadministrator%2Fdebugging%2Findex%2Ecfm
HTTP_Host=127.0.0.1:8500
HTTP_REFERER=
HTTP_USER_AGENT=Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0
PATH_INFO=
PATH_TRANSLATED=C:\Services\web\wwwroot\CraigTest\FUT\FIFACPB\logInSearchAccount17.cfm
QUERY_STRING=reinit=1
REMOTE_ADDR=127.0.0.1
REMOTE_Host=127.0.0.1
REMOTE_USER=
REQUEST_METHOD=GET
SCRIPT_NAME=/CraigTest/FUT/FIFACPB/logInSearchAccount17.cfm
SERVER_NAME=127.0.0.1
SERVER_PORT=8500
SERVER_PORT_SECURE=0
SERVER_PROTOCOL=HTTP/1.1
SERVER_SOFTWARE=
WEB_SERVER_API=
Cookie Variables:
CFADMIN_LASTPAGE_ADMIN=/CFIDE/administrator/debugging/index.cfm
CFAUTHORIZATION_cfadmin=YWRtaW4NRTg5NzE2OTdCODczMUI0MDVBM0UxRTZCMjI2N0I1MDA5M0QzQkE4MQ1jZmFkbWlu
CFID=15108
CFTOKEN=12249080
cf_debug_general=block
cf_debug_template_stack=block
Session Variables:
biddingaccountloggedin=0
biddingaccountloginattempts=0
cfid=15108
cftoken=12249080
mainaccountloggedin=0
mainaccountloginattempts=0
pricingaccountloggedin=0
pricingaccountloginattempts=0
searchaccount10loggedin=0
searchaccount10loginattempts=0
searchaccount11loggedin=0
searchaccount11loginattempts=0
searchaccount12loggedin=0
searchaccount12loginattempts=0
searchaccount13loggedin=0
searchaccount13loginattempts=0
searchaccount14loggedin=0
searchaccount14loginattempts=0
searchaccount15loggedin=0
searchaccount15loginattempts=0
searchaccount16loggedin=0
searchaccount16loginattempts=0
searchaccount17gamertag=ZappyShrimp8
searchaccount17loggedin=0
searchaccount17loginattempts=0
searchaccount18loggedin=0
searchaccount18loginattempts=0
searchaccount19loggedin=0
searchaccount19loginattempts=0
searchaccount1loggedin=0
searchaccount1loginattempts=0
searchaccount20loggedin=0
searchaccount20loginattempts=0
searchaccount21loggedin=0
searchaccount21loginattempts=0
searchaccount22loggedin=0
searchaccount22loginattempts=0
searchaccount23loggedin=0
searchaccount23loginattempts=0
searchaccount24loggedin=0
searchaccount24loginattempts=0
searchaccount25loggedin=0
searchaccount25loginattempts=0
searchaccount26loggedin=0
searchaccount26loginattempts=0
searchaccount27loggedin=0
searchaccount27loginattempts=0
searchaccount28loggedin=0
searchaccount28loginattempts=0
searchaccount29loggedin=0
searchaccount29loginattempts=0
searchaccount2loggedin=0
searchaccount2loginattempts=0
searchaccount30loggedin=0
searchaccount30loginattempts=0
searchaccount3loggedin=0
searchaccount3loginattempts=0
searchaccount4loggedin=0
searchaccount4loginattempts=0
searchaccount5loggedin=0
searchaccount5loginattempts=0
searchaccount6loggedin=0
searchaccount6loginattempts=0
searchaccount8loggedin=0
searchaccount8loginattempts=0
sessionid=FIFAAUTOBUYER_15108_12249080
urltoken=CFID=15108&CFTOKEN=12249080
URL Parameters:
reinit=1
Debug Rendering Time: 21 ms

CFDUMP STAGE2:

struct
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 
19
CPB07

SSL(https)経由で接続するためにcfhttpを使用している場合、ColdFusionサーバーが正常に接続するには、証明書をインストールする必要があります。ここに私が同様の問題について与えた以前の答えがあります:

証明書をJavaキーストアにインストールするために実行する必要がある手順は次のとおりです。最初に、ColdFusionが使用している正しいcacertsファイルを更新していることを確認してください。そのサーバーに複数のJREがインストールされています。ColdFusionが使用していることは、管理者の[システム情報]で確認できます。Java Home行を探します。

デフォルトのトラストストアは、JREのcacertsファイルです。このファイルは通常、次の場所にあります。

  • サーバー構成:

    cf_root/runtime/jre/lib/security/cacerts

  • JRun 4構成のマルチサーバー/ J2EE:

    jrun_root/jre/lib/security/cacerts

  • Sun JDKのインストール:

    jdk_root/jre/lib/security/cacerts

  • 他のJ2EEアプリケーションサーバーとJVMのドキュメントを参照してください

証明書をインストールするには、まず証明書のコピーを取得する必要があります。これは、Internet Explorerを使用して実行できます。 Internet Explorerのバージョンが異なると動作が少し異なりますが、これらの手順とよく似ていることに注意してください。たとえば、IEの以前のバージョンでは、私が言及したものとは別のタブに証明書を保存する可能性があります。

  1. Internet ExplorerでSSL URLを参照します-https://xyz/infoLookup.php?wsdl
  2. 鍵アイコンをクリックして証明書を表示し、証明書の表示をクリックします
  3. 次に、[証明書のインストール...]ボタンをクリックします(注:このボタンが表示されない場合は、IEを閉じて、最初に管理者として実行する必要があります)。
  4. IEのインターネットオプションをクリックし、[コンテンツ]タブをクリックします。
  5. [証明書]ボタンをクリックします
  6. [中間証明機関]タブでサーバーの証明書を見つけ、証明書を選択して[エクスポート...]ボタンをクリックします
  7. DER形式を使用してエクスポートする

エクスポートした証明書ファイルをColdFusionサーバーにコピーします(必要に応じてIEから証明書を削除できます)

  1. ColdFusionサーバーで管理者としてcmdプロンプトを実行します。
  2. 問題が発生した場合に備えて、元のcacertsファイルのバックアップを作成します

KeytoolはJava SDKの一部であり、次の場所にあります。

  • サーバー構成:

    cf_root/runtime/bin/keytool

  • JRun 4構成のマルチサーバー/ J2EE:

    jrun_root/jre/bin/keytool

  • Sun JDKのインストール:

    jdk_root/bin/keytool

  • 他のJ2EEアプリケーションサーバーとJVMのドキュメントを参照してください

証明書をインストールするには:

  1. トラストストアの場所(cacertsファイルがある場所)にディレクトリを変更します。
  2. このコマンドを入力します(現在のJVMを使用し、現在のJVMのキーツールを使用)"c:\program files\Java\jre7\bin\keytool" -import -v -alias your_cert_alias_name -file C:\wherever_you_saved_the_file\cert_file.cer -keystore cacerts -storepass changeit
  3. 「この証明書を信頼しますか?」というプロンプトでyesと入力します。

注:* your_cert_alias_name *上記で使用したものは何でもかまいません
注:* C:\ wherever_you_saved_the_file\cert_file.cer *これらの値を、サーバーフォルダーと証明書ファイル名に使用する値に変更します

証明書を確認するには:

  1. このコマンドを入力します(現在のJVMを使用し、現在のJVMのキーツールを使用)"c:\program files\Java\jre7\bin\keytool" -list -v -keystore cacerts -alias your_cert_alias_name -storepass changeit

注:* your_cert_alias_name *には、上記で証明書をインストールしたときと同じ名前を使用します

ColdFusionサービスを再起動しますこれを行うまで、更新されたcacertsファイルは読み込まれません。

必要に応じて、インポートした証明書ファイルをサーバーから削除できます。

24
Miguel-F

私はColdfusion 1(Javaバージョン:1.7.0_15を使用)とWindows Server 2008を備えたサーバーを持っていました。 APIのURLですが、エラーが発生しました

接続エラー:ステータスコードを利用できません。

次に、Coldfusion AdministratorのColdfusion JVM構成に次の構成を追加すると、動作し始めました。

-Dhttps.protocols=TLSv1.1,TLSv1.2
4
RRK

このメッセージが表示される可能性のあるシナリオはいくつかあります。

問題を調査するのに役立つ詳細なブログ投稿とスレッドも多数あります。

1)DNS解決の問題-エンドポイントのURLにアクセスできることを確認してください。そうしないと、このエラーが発生します。

2)cfhttpリクエストでユーザーエージェントを設定してください。サーバーは非標準のユーザーエージェントを簡単に検出し、除外できます。

enter code here

3)リクエストの圧縮を無効にします。一部のサーバーにアクセスしている場合、これは機能します。これにより、IISのいくつかの構成が考えられます。この例が検索されたサイトは数多くあり、私にとってはうまくいきました。

<cfhttp url="https://yourUrlHere.com" method="get">
    <cfhttpparam type="Header" name="Accept-Encoding" value="*"> 
    <cfhttpparam type="Header" name="TE" value="deflate;q=0">
</cfhttp>

相手側のhttpサーバーに応じて送信できる別のヘッダーは次のとおりです。

<cfhttpparam type="header" name="Accept-Encoding" Value="no-compression"> 

ソース

4)問題の原因がSSL証明書である場合は、証明書をサーバーに手動で追加できます。できればこの方向を見ない方がいいですが、検索してみてください。

5)https URLに接続するもう​​1つのシナリオは、デフォルトの証明書プロバイダーを無効にする必要がある場合です(Javaには多くあり、デフォルトのプロバイダーは必要なものに適合しない場合があります)。これはセキュリティに影響を与えず、別の同等のライブラリのみを使用します。

例5のソース

6)最後に大事なことを言い忘れましたが、あなたはルールを書き換えるための餌食になるかもしれません。私はこれを経験していませんが、面白そうです。

mod_rewriteを使用する場合のCFHTTP「接続障害」の問題

3
Jas Panesar

@ Miguel-Fの回答にコメントするのに十分なポイントがないため、この回答を自分の経験と詳細とともに投稿する必要があります...

証明書を追加するための指示に従っても、CFHTTPがまだhttpsサイトを取得していませんでした。私は この投稿 を見つけました。これは最終的に問題を解決するのに役立ちました。 SSLデバッグ出力をcoldfusion-out.logファイルに追加する方法について説明しています。このファイルには、不足している証明書の正確なダウンロードURLが指定されています。私が欠落していた証明書は、ログファイルに次のように表示される「Let's Encrypt」用のものでした。

accessLocation: URIName: http://cert.int-x3.letsencrypt.org/

そのURLにアクセスし、keytoolを使用して、ダウンロードしたファイルをキーストアに追加しました。出来上がり!健全性が回復しました。

ColdFusionは好きでも嫌いでもあります

3
Clark Baker

CfhttpおよびGoogleのrecaptchaセキュア検証サービス(私が行ったように)の使用に問題があった場合にここに上陸した可能性のある人にとっては、JREのcacertsファイルへのGoogleのセキュリティ証明書の追加に関するこのページの投稿が不可欠です。

追加することも不可欠です(見つけるのは簡単ではありません)

<cfhttpparam type="CGI" encoded="false" name="Content_Type" value="application/json; charset=utf-8">

あなたにcfhttpリクエスト。これにより、「コンテンツタイプを判別できません。無効なMIME」というエラーが解決されます。これも接続エラーのように見えます。 (上記のJasの回答に追加)

AdobeのColdFusionコミュニティフォーラムで12Robotsに感謝します。

1
David Belanger

ヒットしているサーバーがTLS 1.2を必要とする場合、上記のすべてが機能しません。これには、JVMを1.8に更新する必要があります。詳細については、以下を参照してください。

http://blogs.coldfusion.com/post.cfm/how-to-change-upgrade-jdk-version-of-coldfusion-server

1
user7723273

デビッドに感謝します。以下に3つのヘッダータグを追加しました。

<cfhttpparam type="header" name="Content-Type" value="application/json" />
<cfhttpparam type="header" name="Accept-Encoding" Value="*">
<cfhttpparam type="Header" name="TE" value="deflate;q=0">

ありがとう-Hitesh

0
Hitesh Patel