質問

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

以前にこれに遭遇し、解決策を見つけた人はいますか?

役に立ちましたか?

解決

私の同僚は、サードパーティへの接続時に同じ問題を経験した後、以下を発見しました。

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のコメントの元のコンテンツを以下に示します。

  

これをもう少し絞り込んで、   RSA JsafeJCEプロバイダーのKeyAgreement.DiffieHellman(これは   代わりにデフォルトの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からスローされる例外が少し小さければ素晴らしい   ジェネリック。

他のヒント

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

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

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

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

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

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

java SSLPoke www.onlineumfragen.com 443

そして得た

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

and

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

その後、ウェブサーバー(私の場合は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の下にありますが、外部にある新しいjdk(1.6.45)を使用しますcoldfusionディレクトリ。 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 ...(上のドメイン)にメールしてください。

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

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

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

見つけた内容は、この記事で参照されました: http://kb2.adobe .com / cps / 400 / kb400977.html および多くの掘り下げ後の他のいくつかの場所。

この記事をご覧になっている場合は、「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を設定しているため、これらの手順を実行した後も同じエラーが発生することでした。

判明したように、&quot; server.crt&quot;も挿入する必要があります。 &quot; trustStore&quot;に一般に/ ColdFusion9 / runtime / jre / libにあるコマンドを使用してファイル

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

これにより誰かの時間を節約できれば幸いです。

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ファイル。によって   デフォルトでは、ファイルは&quot; trustStore&quot;と呼ばれます。通常は配置されています   JRun構成のMultiserver / 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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top