이 질문은 Force TLS > 1.0 on AppEngine local development server in Java과 비슷하지만 정적 SDK 위치 (?)로 가정하기 때문에 대답이 작동하지 않는다는 점이 다릅니다.appengine dev 서버 SDK에 TLS 1.2 적용
TLSv1.2를 사용하여 HTTPS를 통해 통신하는 타사 결제 라이브러리 (braintree)를 사용하는 Google App Engine 애플리케이션이 있습니다. (앱 엔진 땅으로 배치 할 때와하지)
Caused by: javax.net.ssl.SSLHandshakeException: Could not verify SSL certificate for URL: https://api.sandbox.braintreegateway.com:443/merchants/**********/client_token
at com.google.appengine.api.urlfetch.URLFetchServiceImpl.convertApplicationException(URLFetchServiceImpl.java:174)
at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:43)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.fetchResponse(URLFetchServiceStreamHandler.java:543)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getInputStream(URLFetchServiceStreamHandler.java:422)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getResponseCode(URLFetchServiceStreamHandler.java:275)
at com.braintreegateway.util.Http.httpRequest(Http.java:120)
이 오류는 앱 엔진 개발 서버에서 발생 하다니
: 그러나 때마다 브레인 라이브러리는 결과 urlfetch
항상 다음과 같은 오류를주는 브레인 트리 샌드 박스 환경에 호출을 , 그것은 내가 개발할 때 필요한 것들을 테스트 할 수 없다는 것을 의미합니다.
에 따르면 : https://groups.google.com/forum/#!topic/google-appengine-stackoverflow/tdr4T1CJRn8 문제는 App Engine이 TLSv1.2를 사용하지 않는다는 것입니다.
내 응용 프로그램은 SDK 버전 1.9.26을 사용하는 App Engine 앱 (표준 환경)입니다.
exec "${RUN_JAVA}" "${SCRIPT_NAME}" \
-Dhttps.protocols=TLSv1.2 -Ddeployment.security.TLSv1.0=false -Ddeployment.security.TLSv1.1=false -Ddeployment.security.TLSv1.2=true -ea -cp "${JAR_FILE}" \
com.google.appengine.tools.KickStart \
com.google.appengine.tools.development.DevAppServerMain "[email protected]"
및 downloadSdk = false
설정 : 내가 읽고 내 로컬에서 appengine-SDK 디렉토리에 dev_appserver.sh를 업데이트 시도
appengine {
httpAddress = "0.0.0.0"
httpPort = 8888
downloadSdk = false
appcfg {
update {
useJava7 = true
}
jvmFlags = ['-Ddatastore.backing_store=../../src/main/webapp/WEB-INF/appengine-generated/local_db.bin',
// Desperation:
'-Ddeployment.security.TLSv1.0=false',
'-Ddeployment.security.TLSv1.1=false',
'-Ddeployment.security.TLSv1.2=true',
'-Dhttps.protocols=TLSv1.2',
'-Dappengine.fullscan.seconds=5',
'-Xdebug',
'-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8889',
'-XX:MaxPermSize=512m']
oauth2 = true
extraOptions = appCfgOpts
}
enhancer {
api = "jdo"
version = "v1"
enhanceOnBuild = true
}
}
:과 같이
내 Gradle을 구성의 appengine
섹션 본다 그리고 작업이 실제로 그것을 사용하도록 appengine.sdk.root
을 설정하십시오.
내 코드에서 이러는 나는 또한 시도를 자바 8. 을 사용할 수 없습니다 :이의 System.setProperty("https.protocols", "TLSv1.2");
없음 작동하지 않습니다. 나는 틀린 나무를 짖고 모든 잘못을 저 지르거나 잘못된 것을하고있다.
어떻게 작동합니까?
업데이트 :
문제가의 SSLSocketFactory가 생성되지 않습니다 것을 실제로 같은 URL을 가져올 수는 HttpsURLConnection
(App Engine URLfetch to validate self-signed certificate)
가 아직도 해결을 위해 검색 반환하지 않습니다 때문에이 보인다.