7

私は現在、支払い処理業者と協力しています。サーバーから支払い URL を参照できるので、ファイアウォールの問題ではありませんが、CFHTTP を使用しようとすると、I/O 例外が発生します: ピアが認証されていません。最新のセキュリティ証明書をダウンロードして cacerts キーストアにインストールし、CF を再起動しましたが、同じエラーが引き続き発生します。プロバイダー証明書をインストールしただけでなく、証明書チェーン内の他の 2 つの Verisign 認証局証明書もインストールしました。この証明書は、新しい Class 3 Extended Validation 証明書の 1 つです。

誰かがこれに遭遇し、解決策を見つけましたか?

4

8 に答える 8

9

私の同僚は、サードパーティに接続するときに同じ問題を経験した後、次のことを見つけました。

http://www.coldfusionjedi.com/index.cfm/2011/1/12/Diagnosing-a-CFHTTP-issue--peer-not-authenticated

https://www.raymondcamden.com/2011/01/12/Diagnosing-a-CFHTTP-issue-peer-not-authenticated/

ページのさらに下にある Pete Freitag のコメントで提供されたソリューションを使用しました。動作しますが、JsafeJCE プロバイダーの特定のプロパティを動的に削除および追加し直す必要があるため、注意して使用する必要があると思います。

アーカイブのために、Pete Freitag のコメントの元の内容を以下に示します。

私はこれをもう少し絞り込み、KeyAgreement.DiffieHellman を RSA JsafeJCE プロバイダーから削除すると (代わりにデフォルトの sun 実装が使用されます) シームが機能し、サーバーへの影響は削除するよりも少なくなります。プロバイダー全体がそうするでしょう。方法は次のとおりです。

<cfset objSecurity = createObject("java", "java.security.Security") />
<cfset storeProvider = objSecurity.getProvider("JsafeJCE") />
<cfset dhKeyAgreement = storeProvider.getProperty("KeyAgreement.DiffieHellman")>
<!--- dhKeyAgreement=com.rsa.jsafe.provider.JSA_DHKeyAgree --->
<cfset storeProvider.remove("KeyAgreement.DiffieHellman")>

Do your http call, but pack the key agreement if you want:

<cfset storeProvider.put("KeyAgreement.DiffieHellman", dhKeyAgreement)>

これは、SSLSocketFactory を使用して https 接続を作成することで解決できました。これにより、スタック トレースに cfhttp を使用した場合よりも詳細な情報が表示されます。

yadayadayada Caused by: java.security.InvalidKeyException: Cannot
build a secret key of algorithm TlsPremasterSecret at
com.rsa.jsafe.provider.JS_KeyAgree.engineGenerateSecret(Unknown
Source) at javax.crypto.KeyAgreement.generateSecret(DashoA13*..) at
com.sun.net.ssl.internal.ssl.DHCrypt.getAgreedSecret(DHCrypt.java:166)

ColdFusion からスローされた例外がもう少し一般的でない場合は素晴らしいことです。

于 2011-12-02T09:11:19.483 に答える
4

最新の SSL 暗号を使用する Web サーバーを使用する coldfusion 8 に固有:

私は JDK 1.6.45 で coldfusion 8 を使用していますが、画像の代わりに赤い十字が表示されるだけでなく、cfhttp が ssl でローカル Web サーバーに接続できないという問題がありました。

私のcoldfusion 8で再現するテストスクリプトは

<CFHTTP URL="https://www.onlineumfragen.com" METHOD="get" ></CFHTTP>
<CFDUMP VAR="#CFHTTP#">

これにより、「I/O 例外: ピアが認証されていません」という非常に一般的なエラーが発生しました。次に、ルート証明書と中間証明書を含むサーバーの証明書を Java キーストアと Coldfusion キーストアに追加しようとしましたが、何も役に立ちませんでした。次に、問題をデバッグしました

java SSLPoke www.onlineumfragen.com 443

そして得た

javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair

Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be
multiple of 64, and can only range from 512 to 1024 (inclusive)
    at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DashoA13*..)
    at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:627)
    at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:107)
    ... 10 more

次に、Webサーバー(私の場合はapache)にはssl用の非常に最新の暗号があり、非常に制限的であり(qualysスコアa +)、1024ビットを超える強力なdiffie hellmannキーを使用するという考えがありました. 明らかに、coldfusion と Java jdk 1.6.45 ではこれを管理できません。冒険の旅の次のステップは、Java 用の代替セキュリティ プロバイダのインストールを検討することでした。その結果、弾む城に決めました。http://www.itcsolutions.eu/2011/08/22/how-to-use-bouncy-castle-cryptographic-api-in-netbeans-or-eclipse-for-java-jse-projects/も参照してください。

次に、ダウンロードしました

bcprov-ext-jdk15on-156.jar

http://www.bouncycastle.org/latest_releases.htmlから、C:\jdk6_45\jre\lib\ext または jdk がある場所にインストールします。coldfusion 8 の元のインストールでは、C:\JRun4\ の下になります。 jre\lib\ext ですが、coldfusion ディレクトリの外にある新しい jdk (1.6.45) を使用しています。bcprov-ext-jdk15on-156.jar を \ext ディレクトリに配置することは非常に重要です (これには約 2 時間かかりました ;-) 次に、ファイル C:\jdk6_45\jre\lib\security\ を編集しました。 java.security (editor.exe ではなくワードパッドを使用) を作成し、新しいプロバイダーを 1 行に入力します。その後、リストは次のようになりました

#
# List of providers and their preference orders (see above):
#
security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider
security.provider.2=sun.security.provider.Sun
security.provider.3=sun.security.rsa.SunRsaSign
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC
security.provider.10=sun.security.mscapi.SunMSCAPI

(位置 1 の新しいものを参照してください)

次に、coldfusion サービスを完全に再起動します。あなたはその後することができます

java SSLPoke www.onlineumfragen.com 443 (or of course your url!)

そしてその感覚を楽しんでください...そしてもちろん

どんな夜とどんな日。うまくいけば、これが誰かに(部分的または完全に)役立つことを願っています。ご不明な点がございましたら、info ... (上記のドメイン) までメールをお送りください。

于 2017-01-05T16:39:11.733 に答える
3

正しいキーストアに追加しましたか?ColdFusionは独自のJavaインスタンスを使用することに注意してください。その事実を思い出す前に、私はこれに一度数時間を費やしました。必要なのは/ColdFusion8/ runtime / jre / lib /security/のような場所です

于 2009-10-23T12:52:04.990 に答える
2

CMDでこれを試してください

C:\ColdFusion9\runtime\jre\bin> keytool -import -keystore ../lib/security/cacerts -alias uniquename -file certificatename.cer

注: ビン内に他のキーストア ファイルが存在するため、セキュリティ フォルダ内に存在する正しいキーストアを選択する必要があります。これらのキー ストアに証明書をインポートすると、機能しません。

于 2013-05-24T11:03:23.733 に答える
0

私はJRunを使用しています。さまざまなことを試した後、セットアップに適用できる情報のスニペットに出会いました。独自のトラストストア ファイルを使用して (1)HTTPS SSLService を構成しました。これにより、次のリンクの情報が重要になりました。

http://helpx.adobe.com/coldfusion/kb/import-certificates-certificate-stores-coldfusion.html

注: JRun を基盤となる J2EE サーバー (サーバー構成または JRun 構成を備えたマルチサーバー/J2EE) として使用していて、内部 JRun Web サーバー (JWS) に対して SSL を有効にしている場合は、証明書をトラストストアにインポートする必要があります。 JRE キー ストアではなく、セキュア JWS の jrun.xml ファイルで定義されています。デフォルトでは、ファイルは「trustStore」と呼ばれ、通常、マルチサーバー/JRun 構成の J2EE の場合は jrun_root/lib、ColdFusion Server 構成の場合は cf_root/runtime/lib の下にあります。同じ Java キーツールを使用して trustStore を管理します。

以下は、私の jrun.xml ファイルからの抜粋です。

<service class="jrun.servlet.http.SSLService" name="SSLService">
  <attribute name="port">8301</attribute>
  <attribute name="keyStore">/app/jrun4/cert/cfusion.jks</attribute>
  <attribute name="trustStore">/app/jrun4/cert/truststore.jks</attribute>
  <attribute name="name">SSLService</attribute>
  <attribute name="bindAddress">*</attribute>
  <attribute name="socketFactoryName">jrun.servlet.http.JRunSSLServerSocketFactory</attribute>
  <attribute name="interface">*</attribute>
  <attribute name="keyStorePassword">cfadmin</attribute>
  <attribute name="deactivated">false</attribute>
</service>

証明書をこのトラストストア (/app/jrun4/cert/truststore.jks) にインポートすると、ColdFusion の再起動後に機能しました。


(1) http://helpx.adobe.com/legacy/kb/ssl-jrun-web-server-connector.html

于 2013-12-17T08:20:40.500 に答える
0

CF9 Enterprise では、証明書をキーストアに追加してもうまくいきませんでした。

CFX タグを使用して終了しましたCFX_HTTP5

于 2015-02-20T16:34:19.523 に答える
0

私が見つけたのは、この記事で参照されていたものです。

この記事を参照している場合は、「server.crt」証明書を適切なルートの場所に挿入した可能性が高く、コマンドを使用して /ColdFusion9/runtime/jre/lib/security の cacerts ファイルに挿入した可能性があります。

\ColdFusion9\runtime\jre\bin\keytool -import -v -alias someServer-cert -file someServerCertFile.crt -keystore cacerts -storepass changeit

(まだ行っていない場合は、今すぐ行ってください)。私が遭遇したのは、ローカルホストでsslをセットアップしているため、これらの手順を実行した後も同じエラーが発生していたことです。

結局のところ、次のコマンドを使用して、一般に /ColdFusion9/runtime/jre/lib にある「trustStore」ファイルに「server.crt」を挿入する必要もあります。

\ColdFusion9\runtime\jre\bin\keytool -import -v -alias someServer-cert -file someServerCertFile.cer -keystore trustStore -storepass changeit

うまくいけば、これは誰かの時間を節約します。

于 2011-06-01T22:00:10.227 に答える