Frage

Im Moment arbeite ich mit einem Zahlungsabwickler. Ich kann von unserem Server auf die Zahlung URL zu finden, so ist es nicht ein Firewall-Problem, aber wenn ich versuche CFHTTP zu verwenden, erhalte ich eine E / A-Ausnahme: Peer nicht authentifiziert. Ich habe heruntergeladen und installiert ihre neuesten Sicherheits-cert in cacerts Schlüsselspeicher und neu gestartet CF und bin immer noch die gleichen Fehler. Ich habe nicht nur installiert, um die Anbieter cert, sondern auch die 2 anderen Verisign Zertifizierungsstelle Zertifikate in der Zertifikatskette. Das Zertifikat ist eine der neueren Klasse 3 Extended Validation-Zertifikate.

Hat jemand über diese kommen vor und eine Lösung gefunden?

War es hilfreich?

Lösung

Ein Kollege von mir fand folgende nachdem das gleiche Problem auftreten, wenn sie eine dritte Partei zu verbinden.

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/

Wir haben die Lösung in dem Kommentar von Pete Freitag weiter unten auf der Seite zur Verfügung gestellt. Es funktioniert, aber ich denke, sollte mit Vorsicht verwendet werden, da es dynamisch Entfernen und Hinzufügen zurück in einer bestimmten Eigenschaft des JsafeJCE Anbieters beinhaltet.

Aus Gründen der Archivierung, hier ist der ursprüngliche Inhalt von Pete Freitag Kommentar:

  

Ich habe das verengte ein bisschen weiter nach unten, und das Entfernen der   KeyAgreement.DiffieHellman vom RSA JsafeJCE Anbieter (die   die Standard-Sonne Implementierung verursacht stattdessen verwendet werden) Nähte   arbeiten, und wahrscheinlich hat weniger Auswirkungen auf Ihrem Server als Entfernen   der gesamte Anbieter würde. Hier ist, wie Sie es tun:

<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)>
     

Ich dachte, dies aus, indem die SSLSocketFactory mit einem https zu erstellen   Verbindung, die ein bisschen mehr Details in dem Stack-Trace zur Verfügung gestellt, als   bei der Verwendung von 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)
     

Wäre toll, wenn die Ausnahme von Coldfusion geworfen etwas weniger war   generic.

Andere Tipps

Haben Sie fügen Sie es auf den richtigen Schlüsselspeicher? Denken Sie daran, dass Coldfusion seine eigene Java-Instanz verwendet. Ich verbrachte mehrere Stunden auf dieses ein Mal vor, diese Tatsache zu erinnern. Diejenige, die Sie wollen, ist an irgendwo wie / ColdFusion8 / runtime / jre / lib / security /

spezifisch für Coldfusion 8 mit einem Webserver mit modernen ssl Chiffren:

Ich benutze Coldfusion 8 auf JDK 1.6.45 und hatte Probleme mit mir nur roten Kreuzen anstelle von Bildern zu geben, und auch mit cfhttp nicht in der Lage mit ssl auf den lokalen Webserver zu verbinden.

mein Testskript zu reproduzieren mit Coldfusion 8 war

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

Das gab mir die ganz allgemeinen Fehler von „I / O. Ausnahme: Peer nicht authentifiziert“ Ich habe dann versucht, Zertifikate des Servers einschließlich Stamm- und Zwischenzertifikate auf die Java-Schlüsselspeicher hinzuzufügen und auch die Coldfusion-Schlüsselspeicher, aber nichts half. dann gedebuggt ich das Problem mit

java SSLPoke www.onlineumfragen.com 443

und bekam

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

und

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

Ich hatte dann die Idee, dass der Webserver (Apache in meinem Fall) für ssl sehr moderne Chiffren hatte und ist ziemlich restriktiv (Qualys Score a +) und starke Diffie Hellmann Tasten mit mehr als 1024 Bits verwendet. offensichtlich, Coldfusion und Java JDK 1.6.45 kann dies nicht verwalten. Der nächste Schritt in der Odysee war die Installation eines alternativen Sicherheitsanbieter für Java zu denken, und ich beschlossen, für Hüpfburg. siehe auch http://www.itcsolutions.eu/2011/08/22/how-to-use-bouncy-castle-cryptographic-api-in-netbeans-or-eclipse-for -java-jse-Projekte /

Ich habe dann heruntergeladen die

bcprov-ext-jdk15on-156.jar

http://www.bouncycastle.org/latest_releases.html und installiert unter C: \ jdk6_45 \ jre \ lib \ ext oder wo auch immer Ihr jdk ist, in 8 von Coldfusion installieren original wäre es unter C: \ JRun4 \ jre \ lib \ ext aber ich benutze eine neuere JDK (1.6.45) befindet sich außerhalb Coldfusion-Verzeichnis. es ist sehr wichtig, den bcprov-ext-jdk15on-156.jar im \ ext (das kostete mich etwa zwei Stunden und ein paar Haare zu setzen ;-) dann bearbeiten ich die Datei C: \ jdk6_45 \ jre \ lib \ security \ java.security (mit Wordpad nicht mit editor.exe!) und in einer Zeile für den neuen Anbieter setzen. danach die Liste sah aus wie

#
# 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

(siehe die neuen in Position 1)

dann Coldfusion-Dienst neu starten vollständig. Sie können dann

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

und das Gefühl genießen ... und natürlich

Was für eine Nacht und was für ein Tag. Hoffentlich wird dies da draußen (teilweise oder vollständig) zu jemandem helfen. wenn Sie Fragen haben, mailen Sie mich einfach an info ... (Domain oben).

Versuchen Sie es mit dieser in CMD

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

Hinweis: Wir müssen den richtigen Schlüsselspeicher im Inneren des Sicherheitsordner wählen, da es andere Schlüsselspeicherdatei vorhanden sind innerhalb bin.If wir das Zertifikat auf diesen Schlüsselspeicher importiert wird es nicht funktionieren

.

Was ich habe gerade herausgefunden wurde in diesem Artikel verwiesen: http: //kb2.adobe .com / cps / 400 / kb400977.html und ein paar andere Orte nach viel zu graben.

Wenn Sie in diesem Artikel suchen Sie haben höchstwahrscheinlich Ihr „server.crt“ Zertifikat in den entsprechenden Root-Stellen eingefügt und Sie haben es wahrscheinlich in die cacerts eingefügte Datei in / ColdFusion9 / runtime / jre / lib / security der Verwendung von Befehl

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

(wenn Sie dies nicht getan haben, tun Sie es jetzt). Das, was ich in lief war, dass ich ssl auf meinem localhost bin so einrichten, nachdem Sie diese Schritte tun, ich war immer noch die gleichen Fehler.

Wie sich herausstellt, müssen Sie auch Ihre „server.crt“ eingefügt in die „trusts“ Datei üblicherweise unter / ColdFusion9 / runtime / jre / lib mit dem Befehl

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

Dies wird hoffentlich jemand Zeit sparen.

Ich bin mit JRun. eine Menge verschiedenen Dinge Nach dem Versuch, stieß ich auf einen Schnipsel von Informationen, die in meinem Setup anwendbar waren. Ich hatte einen (1) HTTPS SSLService mit eigener Vertrauensspeicherdatei konfiguriert. Dies führte das Stück Information ist in folgendem Link wichtig zu werden.

http://helpx.adobe.com/ Coldfusion / kb / Import-Zertifikate-Zertifikat-Shops-coldfusion.html

  

Hinweis: Wenn Sie mit JRun als Underlying J2EE-Server (entweder die   Server-Konfiguration oder der Multi-Server / J2EE mit JRun-Konfiguration)   und SSL für den internen JRun Webserver (JWS) aktiviert haben, werden Sie   muss das Zertifikat an den Trusts in der definierten importieren   jrun.xml Datei für den Secure JWS statt der JRE-Schlüsselspeicher. Durch   Standardmäßig wird die Datei „trusts“ genannt und befindet sich normalerweise   unter jrun_root / lib für die Multiserver / J2EE mit JRun Konfiguration   oder cf_root / runtime / lib für die Coldfusion-Server-Konfiguration. Sie   Verwenden Sie die gleiche Java keytool die trusts zu verwalten.

Hier ist der Auszug aus meiner jrun.xml-Datei:

<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>

Wenn ich das Zertifikat in diesen Trusts (/app/jrun4/cert/truststore.jks) importiert arbeitete sie nach Coldfusion neu zu starten.


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

das CERT zu den Schlüsselspeicher Hinzufügen nicht für mich auf CF9 Unternehmen nicht funktionieren.

am Ende mit dem CFX-Tag, CFX_HTTP5.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top