Я установил сервер Apache Symfony 4.2 и запросил SSL-сертификат через Let's Encrypt, который отлично работает с браузерами.
Теперь я написал приложение на Kotlin / Java, которое связывается с сервером через OKHttp и Retrofit. Я установил соединение через:
val client = OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.addInterceptor(BasicAuthInterceptor(username, password))
.build()
val retrofit = Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build()
Теперь я ожидал, что мне просто придется начать baseUrl
с https
вместо http
, но когда я попытался подключиться, я получил исключение
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target)...
Я установил самую новую версию Java, поскольку где-то писал, что сертификаты Let's Encrypt должны приниматься с более новыми версиями. Тем не менее, я следовал этому Руководству , чтобы импортировать Сертификат со Страницы в Truststore JVM, но это ничего не изменило.
В качестве временного обходного пути я следую этому Руководству , чтобы Принять все Сертификаты, которые работали, но, конечно, я бы предпочел сделать это правильно!
У кого-нибудь есть подсказка, что еще я мог бы попробовать? Я работаю над MacOs X High Sierra for Development, вот где появилась проблема.