in src/main/java/com/aliyun/tea/okhttp/OkHttpClientBuilder.java [118:164]
public OkHttpClientBuilder certificate(Map<String, Object> map) {
try {
if (null != map.get("ignoreSSL") && Boolean.parseBoolean(String.valueOf(map.get("ignoreSSL")))) {
X509TrustManager compositeX509TrustManager = new X509TrustManagerImp(true);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[]{compositeX509TrustManager}, new java.security.SecureRandom());
this.builder.sslSocketFactory(sslContext.getSocketFactory(), compositeX509TrustManager).
hostnameVerifier(DefaultHostnameVerifier.getInstance(true));
} else if (!StringUtils.isEmpty(map.get("ca"))) {
SSLContext sslContext = SSLContext.getInstance("TLS");
KeyManagerFactory keyManagerFactory = null;
if (!StringUtils.isEmpty(map.get("key")) && !StringUtils.isEmpty(map.get("cert"))) {
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
String cert = String.valueOf(map.get("cert"));
try (InputStream is = new ByteArrayInputStream(cert.getBytes(charset))) {
keyStore.load(is, String.valueOf(map.get("key")).toCharArray());
}
keyManagerFactory = KeyManagerFactory.getInstance("X.509");
keyManagerFactory.init(keyStore, String.valueOf(map.get("key")).toCharArray());
}
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null);
String ca = String.valueOf(map.get("ca"));
List<String> pemCerts = splitPemCertificates(ca);
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
int certIndex = 0;
// Process each certificate and add to the keystore
for (String pemCert : pemCerts) {
try (InputStream is = new ByteArrayInputStream(pemCert.getBytes(charset))) {
Certificate certificate = certFactory.generateCertificate(is);
trustStore.setCertificateEntry("ca" + certIndex++, certificate);
}
}
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(trustStore);
X509TrustManager trustManager = (X509TrustManager) trustManagerFactory.getTrustManagers()[0];
sslContext.init(keyManagerFactory != null ? keyManagerFactory.getKeyManagers() : null
, trustManagerFactory.getTrustManagers()
, new SecureRandom());
this.builder.sslSocketFactory(sslContext.getSocketFactory(), trustManager);
}
return this;
} catch (Exception e) {
throw new TeaException(e.getMessage(), e);
}
}