HttpsClient 단방향 인증 비검증 서버 인증서
if(getUrl().contains("https://")){
mClient = getHttpsClient();
}
private synchronized static AsyncHttpClient getHttpsClient(){
if(httpsClient == null){
httpsClient = new AsyncHttpClient();
httpsClient.setMaxConnections(3);
httpsClient.setTimeout(timeOut);
httpsClient.addHeader("Locale", "ZH_cn");
httpsClient.addHeader("Accept", "text/html,application/json,application/xhtml+xml,application/xml");
httpsClient.addHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
SSLSocketFactory sf = SSLCustomSocketFactory.getSocketFactory(); //
if(sf != null){
httpsClient.setSSLSocketFactory(sf);
}
HttpProtocolParams.setUseExpectContinue(httpsClient.getHttpClient().getParams(), false);
}
return httpsClient;
}
public static class SSLCustomSocketFactory extends SSLSocketFactory {
private static final String TAG = "SSLCustomSocketFactory";
SSLContext sslContext = SSLContext.getInstance("TLS");
public SSLCustomSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException,
KeyStoreException, UnrecoverableKeyException {
super(truststore);
TrustManager tm = new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
@Override
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
};
sslContext.init(null, new TrustManager[] { tm }, null);
}
@Override
public Socket createSocket(Socket socket, String host, int port,
boolean autoClose) throws IOException, UnknownHostException {
injectHostname(socket, host);
return sslContext.getSocketFactory().createSocket(socket, host,
port, autoClose);
}
@Override
public Socket createSocket() throws IOException {
return sslContext.getSocketFactory().createSocket();
}
private void injectHostname(Socket socket, String host) {
try {
Field field = InetAddress.class.getDeclaredField("hostName");
field.setAccessible(true);
field.set(socket.getInetAddress(), host);
} catch (Exception ignored) {
}
}
public static SSLSocketFactory getSocketFactory(){
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);
SSLSocketFactory factory = new SSLCustomSocketFactory(trustStore);
factory.setHostnameVerifier(SSLCustomSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
return factory;
}catch (Exception e){
logger.w("%s", e.getMessage());
e.printStackTrace();
}
return null;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.