문제

저는 현재 결제 처리업체에서 일하고 있습니다.우리 서버에서 결제 URL을 찾아볼 수 있으므로 방화벽 문제는 아니지만 CFHTTP를 사용하려고 하면 I/O 예외가 발생합니다.피어가 인증되지 않았습니다.최신 보안 인증서를 cacerts 키 저장소에 다운로드하여 설치하고 CF를 다시 시작했지만 여전히 동일한 오류가 발생합니다.공급자 인증서뿐만 아니라 인증서 체인에 다른 2개의 Verisign 인증 기관 인증서도 설치했습니다.이 인증서는 최신 클래스 3 확장 검증 인증서 중 하나입니다.

이전에 이 문제를 발견하고 해결책을 찾은 사람이 있나요?

도움이 되었습니까?

해결책

내 동료는 타사에 연결할 때 동일한 문제를 경험 한 후 다음을 발견했습니다.

http://www.coldfusionjedi.com/index.cfm/2011/12/diagnosing-a-cfhttp-issue--peer-not-authenticated

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

우리는 Pete Freitag의 의견에 제공된 솔루션을 페이지 아래로 더 사용했습니다. 작동하지만 JSAFEJCE 제공 업체의 특정 속성을 동적으로 제거하고 추가하는 것이 필요하므로주의해서 사용해야한다고 생각합니다.

아카이브를 위해 Pete Freitag의 의견의 원래 내용은 다음과 같습니다.

나는 이것을 조금 더 좁히고 keyagreement.diffiehellman을 제거했다. 전체 공급자. 당신이하는 방법은 다음과 같습니다.

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

CFHTTP를 사용할 때보 다 SSLSocketFactory를 사용하여 HTTPS 연결을 생성하여 스택 트레이스에서 약간의 세부 정보를 제공함으로써 이것을 알아 냈습니다.

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은 자체 자바 인스턴스를 사용한다는 것을 기억하십시오. 나는 그 사실을 기억하기 전에 이것에 한 번 몇 시간을 보냈습니다. 당신이 원하는 것은/coldfusion8/runtime/jre/lib/security와 같은 곳입니다.

최신 SSL 암호를 사용하는 웹 서버를 사용하는 coldfusion 8에만 해당됩니다.

JDK 1.6.45에서 coldfusion 8을 사용하고 있는데 이미지 대신 빨간색 십자가만 표시하는 데 문제가 있었고 cfhttp에서는 SSL을 사용하여 로컬 웹 서버에 연결할 수 없습니다.

Coldfusion 8로 재현하기 위한 내 테스트 스크립트는 다음과 같습니다.

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

이로 인해 "I/O 예외:"라는 매우 일반적인 오류가 발생했습니다."나는 인증되지 않았다."그런 다음 Java Keystore와 Coldfusion Keystore에 루트 및 중간 인증서를 포함한 서버의 인증서를 추가하려고했지만 아무런 도움이되지 않았습니다.그런 다음 문제를 디버깅했습니다.

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

그런 다음 웹 서버(내 경우에는 Apache)가 SSL에 대한 매우 현대적인 암호를 가지고 있고 매우 제한적이며(Qualys 점수 A+) 1024비트가 넘는 강력한 diffie hellmann 키를 사용한다는 아이디어를 얻었습니다.분명히 coldfusion과 java jdk 1.6.45는 이것을 관리할 수 없습니다.odysee의 다음 단계는 Java용 대체 보안 공급자 설치를 고려하는 것이었고 저는 Bouncy Castle을 선택했습니다.또한보십시오 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가 어디에 있든, 냉담 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!와 함께 WordPad와 함께) 새 공급자를 위해 한 줄을 넣습니다.그 후 목록은 다음과 같습니다

#
# 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> keytool -import -keystore ../lib/security/cacerts-Alias ​​uniquename -file intricaTename.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을 설정하고 있다는 것이 었 으므로이 단계를 수행 한 후에도 여전히 같은 오류가 발생했습니다.

결과적으로 명령을 사용하여 "Server.crt"를 일반적으로/coldfusion9/runtime/jre/lib에있는 "Truststore"파일에 삽입해야합니다.

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

바라건대 이것은 누군가 시간을 절약 할 수 있기를 바랍니다.

나는 Jrun을 사용하고 있습니다. 많은 다른 것들을 시도한 후, 나는 내 설정에 적용 할 수있는 정보의 스 니펫을 발견했습니다. 내 자신의 TrustStore 파일로 (1) https sslservice를 구성했습니다. 이로 인해 다음 링크의 정보가 중요해졌습니다.

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

참고 : JRUN을 기본 J2EE 서버 (서버 구성 또는 JRUN 구성이있는 MultiServer/J2EE)로 사용하고 내부 JRUN 웹 서버 (JWS) 용 SSL을 활성화 한 경우 인증서를 TrustStore로 가져와야합니다. JRE 키 스토어가 아닌 보안 JWS에 대해 jrun.xml 파일에 정의되었습니다. 기본적으로 파일은 "TrustStore"라고하며 일반적으로 JRUN 구성 또는 CF_ROOT/RUNTIME/LIB가있는 MultiServer/J2EE의 경우 JRUN_ROOT/LIB 아래에 위치합니다. 동일한 Java KeyTool을 사용하여 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>

인증서를이 TrustStore (/app/jrun4/cert/truststore.jks)로 가져 오면 ColdFusion을 다시 시작한 후 작동했습니다.


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

Keystore에 인증서를 추가하는 것은 CF9 Enterprise에서 나에게 효과가 없었습니다.

CFX 태그를 사용하여 결국 CFX_HTTP5.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top