Coldfusion CFHTTP E / A-Ausnahme: Peer nicht authentifiziert - auch nach Zert Zugabe zum Schlüssel
-
06-07-2019 - |
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?
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
.