private
void
doRequest2(){
X509TrustManager trustManager =
new
X509TrustManager() {
@Override
public
void
checkClientTrusted(X509Certificate[] chain, String authType)
throws
CertificateException {
}
@Override
public
void
checkServerTrusted(X509Certificate[] chain, String authType)
throws
CertificateException {
X509Certificate cf = chain[
0
];
RSAPublicKey rsaPublicKey = (RSAPublicKey) cf.getPublicKey();
String ServerPubkey = Base64.encodeToString(rsaPublicKey.getEncoded(),
0
);
Log.e(
"服务器端返回的证书"
,ServerPubkey);
InputStream client_input = getResources().openRawResource(R.raw.pojie);
CertificateFactory certificateFactory = CertificateFactory.getInstance(
"X.509"
);
X509Certificate realCertificate = (X509Certificate) certificateFactory.generateCertificate(client_input);
String realPubkey = Base64.encodeToString(realCertificate.getPublicKey().getEncoded(),
0
);
Log.e(
"客户端资源目录中的证书"
,realPubkey);
cf.checkValidity();
final
boolean
expected = realPubkey.equalsIgnoreCase(ServerPubkey);
Log.e(
"eq = "
,String.valueOf(expected));
if
(!expected){
throw
new
CertificateException(
"证书不一致"
);
}
}
@Override
public
X509Certificate[] getAcceptedIssuers() {
return
new
X509Certificate[
0
];
}
};
SSLSocketFactory factory =
null
;
try
{
SSLContext sslContext = SSLContext.getInstance(
"SSL"
);
sslContext.init(
null
,
new
TrustManager[]{trustManager},
new
SecureRandom());
factory = sslContext.getSocketFactory();
}
catch
(Exception e) {
e.printStackTrace();
}
SSLSocketFactory finalFactory = factory;
new
Thread(){
@Override
public
void
run() {
try
{
OkHttpClient client =
new
OkHttpClient.Builder().sslSocketFactory(finalFactory, trustManager).build();
Request req =
new
Request.Builder().url(
"https://www.52pojie.cn/forum.php"
).build();
Call call = client.newCall(req);
Response res = call.execute();
Log.e(
"请求发送成功"
,
"状态码:"
+ res.code());
}
catch
(IOException e) {
Log.e(
"请求发送失败"
,
"网络异常"
+ e);
}
}
}.start();
}