2727import com .tencent .qcloud .core .http .interceptor .RetryInterceptor ;
2828import com .tencent .qcloud .core .http .interceptor .TrafficControlInterceptor ;
2929
30+ import java .io .ByteArrayInputStream ;
31+ import java .security .KeyStore ;
32+ import java .security .SecureRandom ;
3033import java .util .concurrent .TimeUnit ;
3134
3235import javax .net .ssl .HostnameVerifier ;
36+ import javax .net .ssl .KeyManager ;
37+ import javax .net .ssl .KeyManagerFactory ;
3338import javax .net .ssl .SSLContext ;
3439import javax .net .ssl .SSLSession ;
3540import javax .net .ssl .TrustManager ;
41+ import javax .net .ssl .TrustManagerFactory ;
3642import javax .net .ssl .X509TrustManager ;
3743
3844import okhttp3 .Call ;
@@ -74,8 +80,11 @@ public void init(QCloudHttpClient.Builder b, HostnameVerifier hostnameVerifier,
7480// .addNetworkInterceptor(new HttpMetricsInterceptor())
7581 .addInterceptor (logInterceptor )
7682 .addInterceptor (new RetryInterceptor (b .retryStrategy ))
77- .addInterceptor (new TrafficControlInterceptor ())
78- .addInterceptor (redirectInterceptor );
83+ .addInterceptor (new TrafficControlInterceptor ());
84+ // 设置重定向
85+ if (b .redirectEnable ){
86+ builder .addInterceptor (redirectInterceptor );
87+ }
7988 // 绕过ssl
8089 if (!b .verifySSLEnable ){
8190 try {
@@ -102,13 +111,44 @@ public java.security.cert.X509Certificate[] getAcceptedIssuers() {
102111 }
103112 }
104113 };
105- SSLContext sslContext = SSLContext .getInstance ("SSL " );
114+ SSLContext sslContext = SSLContext .getInstance ("TLS " );
106115 sslContext .init (null , trustAllCerts , new java .security .SecureRandom ());
107116 builder .sslSocketFactory (sslContext .getSocketFactory (), (X509TrustManager )trustAllCerts [0 ]);
108117 } catch (Exception e ){
109118 e .printStackTrace ();
110119 }
111120 }
121+
122+ // 设置客户端证书
123+ if (b .clientCertificateBytes != null ) {
124+ try {
125+ // 加载客户端证书
126+ KeyStore clientKeyStore = KeyStore .getInstance ("BKS" );
127+ if (b .clientCertificateBytes != null ) {
128+ clientKeyStore .load (new ByteArrayInputStream (b .clientCertificateBytes ), b .clientCertificatePassword );
129+ } else {
130+ throw new IllegalStateException ("No client certificate provided" );
131+ }
132+
133+ // 创建一个KeyManager,用于提供客户端证书
134+ KeyManagerFactory keyManagerFactory = KeyManagerFactory .getInstance (KeyManagerFactory .getDefaultAlgorithm ());
135+ keyManagerFactory .init (clientKeyStore , b .clientCertificatePassword );
136+ KeyManager [] keyManagers = keyManagerFactory .getKeyManagers ();
137+
138+ // 创建一个TrustManager,用于信任服务器证书
139+ TrustManagerFactory trustManagerFactory = TrustManagerFactory .getInstance (TrustManagerFactory .getDefaultAlgorithm ());
140+ trustManagerFactory .init ((KeyStore ) null );
141+ TrustManager [] trustManagers = trustManagerFactory .getTrustManagers ();
142+
143+ // 创建一个SSLContext,并设置KeyManager和TrustManager
144+ SSLContext sslContext = SSLContext .getInstance ("TLS" );
145+ sslContext .init (keyManagers , trustManagers , new SecureRandom ());
146+ builder .sslSocketFactory (sslContext .getSocketFactory (), (X509TrustManager ) trustManagers [0 ]);
147+ } catch (Exception e ) {
148+ e .printStackTrace ();
149+ }
150+ }
151+
112152 okHttpClient = builder .build ();
113153 redirectInterceptor .setClient (okHttpClient );
114154 }
0 commit comments