java 多个ssl证书_java – 将多个SSL证书固定添加到Android KeyStore不起作用. (来自资源文件)...

感谢@Dan Getz,现在它可以工作了.

解:

public static SSLContext getSSLContext() throws Exception {

if (sslContext==null) {

// loading CA from an InputStream

InputStream is = AVApplication.getContext().getResources().openRawResource(R.raw.wildcard);

String certificates = Converter.convertStreamToString(is);

String certificateArray[] = certificates.split("-----BEGIN CERTIFICATE-----");

// creating a KeyStore containing our trusted CAs

KeyStore ks = KeyStore.getInstance("BKS");

ks.load(null, null);

for (int i = 1; i < certificateArray.length; i++) {

certificateArray[i] = "-----BEGIN CERTIFICATE-----" + certificateArray[i];

//LogAV.d("cert:" + certificateArray[i]);

// generate input stream for certificate factory

InputStream stream = IOUtils.toInputStream(certificateArray[i]);

// CertificateFactory

CertificateFactory cf = CertificateFactory.getInstance("X.509");

// certificate

Certificate ca;

try {

ca = cf.generateCertificate(stream);

} finally {

is.close();

}

ks.setCertificateEntry("av-ca" + i, ca);

}

// TrustManagerFactory

String algorithm = TrustManagerFactory.getDefaultAlgorithm();

TrustManagerFactory tmf = TrustManagerFactory.getInstance(algorithm);

// Create a TrustManager that trusts the CAs in our KeyStore

tmf.init(ks);

// Create a SSLContext with the certificate that uses tmf (TrustManager)

sslContext = SSLContext.getInstance("TLS");

sslContext.init(null, tmf.getTrustManagers(), new SecureRandom());

}

return sslContext;

}

UPDATE

目前我正在使用OkHttp的CertificatePinner:

CertificatePinner = new CertificatePinner.Builder()

.add(new URL(url).getHost(), "sha256/")

.add(new URL(url).getHost(), "sha256/")

.build();

OkHttpClient client;

client = okHttpClient.newBuilder()

.certificatePinner(certificatePinner)

.build();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值