find TrustManager From SSLContext
private X509TrustManager findTrustManagerFromSocketFactory(SSLContext mCtx) {
try {
//SSLContext --> contextSpi(OpenSSLContextImpl) --> sslParameters(SSLParametersImpl) --> x509TrustManager(X509TrustManager)
// find OpenSSLContextImpl
Field contextSpiField = mCtx.getClass().getDeclaredField("contextSpi");
contextSpiField.setAccessible(true);
Object openSSLContextImplObj = contextSpiField.get(mCtx);
// find SSLParametersImpl
Field sslParametersField = openSSLContextImplObj.getClass().getSuperclass().getDeclaredField("sslParameters");
sslParametersField.setAccessible(true);
Object sslParametersImplObj = sslParametersField.get(openSSLContextImplObj);
// find X509TrustManager
Field x509TrustManagerField = sslParametersImplObj.getClass().getDeclaredField("x509TrustManager");
x509TrustManagerField.setAccessible(true);
Object x509TrustManagerObj = x509TrustManagerField.get(sslParametersImplObj);
Log.i(TAG, "findTrustManagerFromSocketFactory object " + x509TrustManagerObj.getClass() + " " + (x509TrustManagerObj instanceof X509TrustManager));
if(x509TrustManagerObj instanceof X509TrustManager) {
return (X509TrustManager)x509TrustManagerObj;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}