2017-01-04 2 views
1

방금 ​​테스트를 시작했습니다 the aerogear push notifcation solution. 나는 도커를 통해 로컬로 설치했다. SSL 인증서에 문제가있는 것으로 보입니다. 나는 심지어 닫힌 것으로 보이는 this ticket을 발견했다. 나는 안드로이드 에뮬레이터를 등록하려고 노력하고 난 다음 문제는 무엇입니까 : 안드로이드와 UPS 사이의 HTTP 트래픽을 암호화하는 자체 서명 된 인증서를 사용Aerogear SSLHandshakeException CertPathValidatorException

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:328) 
at com.android.okhttp.internal.http.SocketConnector.connectTls(SocketConnector.java:103) 
at com.android.okhttp.Connection.connect(Connection.java:143) 
at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:185) 
at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128) 
at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:341) 
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330) 
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:245) 
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218) 
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java) 
at org.jboss.aerogear.android.pipe.http.HttpRestProvider.addBodyRequest(HttpRestProvider.java:219) 
at org.jboss.aerogear.android.pipe.http.HttpRestProvider.post(HttpRestProvider.java:147) 
at org.jboss.aerogear.android.pipe.http.HttpRestProvider.post(HttpRestProvider.java:134) 
at org.jboss.aerogear.android.unifiedpush.fcm.AeroGearFCMPushRegistrar$4.doInBackground(AeroGearFCMPushRegistrar.java:180) 
at org.jboss.aerogear.android.unifiedpush.fcm.AeroGearFCMPushRegistrar$4.doInBackground(AeroGearFCMPushRegistrar.java:135) 
at android.os.AsyncTask$2.call(AsyncTask.java:295) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
at java.lang.Thread.run(Thread.java:818) 
Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 
at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:318) 
at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:219) 
at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:115) 
at com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:556) 
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) 
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:324) 
at com.android.okhttp.internal.http.SocketConnector.connectTls(SocketConnector.java:103)  
at com.android.okhttp.Connection.connect(Connection.java:143)  
at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:185)  
at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128)  
at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:341)  
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)  
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)  
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433)  
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114)  
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:245)  
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)  
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java)  
at org.jboss.aerogear.android.pipe.http.HttpRestProvider.addBodyRequest(HttpRestProvider.java:219)  
at org.jboss.aerogear.android.pipe.http.HttpRestProvider.post(HttpRestProvider.java:147)  
at org.jboss.aerogear.android.pipe.http.HttpRestProvider.post(HttpRestProvider.java:134)  
at org.jboss.aerogear.android.unifiedpush.fcm.AeroGearFCMPushRegistrar$4.doInBackground(AeroGearFCMPushRegistrar.java:180)  
at org.jboss.aerogear.android.unifiedpush.fcm.AeroGearFCMPushRegistrar$4.doInBackground(AeroGearFCMPushRegistrar.java:135)  
at android.os.AsyncTask$2.call(AsyncTask.java:295)  
at java.util.concurrent.FutureTask.run(FutureTask.java:237)  
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)  
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
at java.lang.Thread.run(Thread.java:818)  
Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 
at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:318)  
at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:219)  
at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:115)  
at com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:556)  
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)  
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:324)  
at com.android.okhttp.internal.http.SocketConnector.connectTls(SocketConnector.java:103)  
at com.android.okhttp.Connection.connect(Connection.java:143)  
at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:185)  
at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128)  
at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:341)  
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)  
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)  
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433)  
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114)  
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:245)  
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)  
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java)  
at org.jboss.aerogear.android.pipe.http.HttpRestProvider.addBodyRequest(HttpRestProvider.java:219)  
at org.jboss.aerogear.android.pipe.http.HttpRestProvider.post(HttpRestProvider.java:147)  
at org.jboss.aerogear.android.pipe.http.HttpRestProvider.post(HttpRestProvider.java:134)  
at org.jboss.aerogear.android.unifiedpush.fcm.AeroGearFCMPushRegistrar$4.doInBackground(AeroGearFCMPushRegistrar.java:180)  
at org.jboss.aerogear.android.unifiedpush.fcm.AeroGearFCMPushRegistrar$4.doInBackground(AeroGearFCMPushRegistrar.java:135)  
at android.os.AsyncTask$2.call(AsyncTask.java:295)  
at java.util.concurrent.FutureTask.run(FutureTask.java:237)  
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)  
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
at java.lang.Thread.run(Thread.java:818)  

답변

0

제이보스 도커의 내부를. 이 문제를 해결할 수있는 몇 가지 방법이 있습니다.

    은 ( https://developer.android.com/training/articles/security-config.html#CertificatePinning
  1. 당신의 도커 이미지에 포트 8080을 노출 인증 기관을 사용하여 인증서를 서명하고
  2. 사용 인증서가 안드로이드 N에 고정하는 것을 사용하여 연결 및 제이보스 앱에 사용하고있는 SSL 인증서를로드
  3. )
  4. 는 SSL 오류 (telling java to accept self-signed ssl certificate)
+0

답변 주셔서 감사 많은 무시한의 TrustManager를 주입한다. 나는 그와 같은 해결 방법을 보았습니다. (이 질문의 링크에서 말한 티켓은 조용한 것을 제안하고 있습니다.) 나는 진짜 해결책을 얻을 수 있는지 궁금해했다. (SSL 오류를 무시하지 않고 ...). –

+0

실제 해결책은 LetsEncrypt (또는 다른 권한)가 서명 한 인증서를 사용하거나, 인증서 고정을 사용하거나, 프록시를 사용하거나, https를 사용하지 않는 것입니다. –

관련 문제