Хз поможет ли, делал временное решения для работы с самоподписанными сертификатами, все ненужное вырезал оставил только суть:
@Component
public class ClientFactory
{
@Value("${api.certificate.path}")
private String certificatePath;
@Value("${api.certificate.password}")
private String certificatePassword;
@Value("${api.params.site}")
private String paramSite;
/**
*
* @return
* @throws Throwable
*/
public OkHttpClient createClient() throws Throwable
{
return new OkHttpClient.Builder()
.socketFactory(createSslContext().getSocketFactory())
.build();
}
/**
*
* @return
* @throws Throwable
*/
private SSLContext createSslContext() throws Throwable
{
KeyStore ks = getCertificateKeyStore();
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, certificatePassword.toCharArray());
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(kmf.getKeyManagers(), trustAll509(), new java.security.SecureRandom());
return sslContext;
}
/**
* @return
*/
private TrustManager[] trustAll509()
{
return new TrustManager[] {
new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
public X509Certificate[] getAcceptedIssuers() {return null;}
}
};
}
}
Самое главное здесь - подставить в SSLContext свой X509TrustManager, который тупо будет всех пропускать и ничего не проверять.
Но!!! Это должно быть временным решением для разработки/отладки/тестов. Если вы юзаете невалидные сертификаты - что то вы делаете не так.