유효한 인증서로 인식되지 않습니다,하지만 난 항상라는 예외를 얻을 :OkHttp3 : SSL 인증서 내가 <code>SSL</code> 인증서를 테스트 할 수있는 내부 서버에 <code>HTTPS</code> 전화를 걸 <code>RxJava2</code> 및 <code>OkHttp3</code>와 <code>Retrofit2</code>을 사용하고
HTTP FAILED: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
Google developer documentation에 따르면,이
내가 canno (알 수없는 CA, 자체 서명 인증서 또는 서버 구성이 중간 CA가 없습니다) 발생할 수있는 이유 3 가지 이유가 있습니다
: 그것은 내부 테스트 서버이지만, 내 컴퓨터 또는 크롬 잘 작동 내 휴대 전화 브라우저에 URL을 열기로 t는, URL을 게시, 이것은 내가 인증서에서 볼 수있는 것입니다따라서 브라우저가 인증서를 인식하고, 내 앱과 OkHttp 만 보이지 않기 때문에 옵션 1이 될 수 없다고 생각합니다. 또한 자체 서명 인증서가 아니기 때문에 옵션 2도 원인이되어서는 안됩니다.
그리고 이것은 내 OkHttp
클라이언트가 Dagger
에서 제공하는 방법입니다
@Provides
@PerApplication
OkHttpClient provideOkHttpClient(@ApplicationContext Context context) {
int cacheSize = 10 * 1024 * 1024; // 10 MiB
File cacheDirectory = new File(context.getCacheDir().getAbsolutePath(), "HttpCache");
ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(TlsVersion.TLS_1_2)
.cipherSuites(
CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256)
.build();
OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder()
.connectionSpecs(Collections.singletonList(spec))
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(10, TimeUnit.SECONDS)
.cache(new Cache(cacheDirectory, cacheSize));
if (BuildConfig.DEBUG) {
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
httpClientBuilder.addInterceptor(loggingInterceptor);
}
return httpClientBuilder.build();
}
은 내가 TLS 1.2을 사용하고 있음을 정의 할 수
CollectionSpec
을 추가했지만이 차이가 없습니다, 난 여전히 신뢰 앵커 오류가 발생 .
SSL 인증서를 사용하기 위해 설정해야 할 다른 것이 있습니까? 인증서가 왜 받아 들여지지 않는가?
"브라우저가 인증서를 인식하기 때문에 옵션 1이 될 수 없다고 생각합니다."- Chrome이 수락하는 것은 안드로이드 SDK 앱이 루트 인증 기관의 관점에서 받아 들일 수있는 것과 일치하지 않는다고 가정합니다. – CommonsWare
당신 말이 맞습니다. – Eve
@Eve 나는 똑같은 얼굴을 보았고 http://stackoverflow.com/a/42392679/2870088에 대답했다. 옵션 3 중간 인증 기관 누락입니다. 예, 브라우저는 중간 인증서를 캐시하고 다른 사이트간에 사용합니다. 따라서 중간 인증서가 누락 된 경우 무작위 사용자는 신뢰 오류를 수신하지만 그렇지 않은 사용자는 신뢰 오류를 수신하게됩니다. http://superuser.com/questions/351516/do-intermediate-certificates-get-cached-in-firefox –