数字证书明文_Android 明文数字证书风险解决方案

测评目的

检测客户端是否包含明文存储的数字证书文件

危险等级

危害

Apk中使用的数字证书可被用来校验服务器的合法身份,以及在与服务器进行通信的过程中对传输数据进行加密、解密运算,保证传输数据的保密性、完整性。明文存储的数字证书如果被篡改,客户端可能连接到假冒的服务端上,导致用户名、密码等信息被窃取;如果明文证书被盗取,可能造成传输数据被截获解密,用户信息泄露,或者伪造客户端向服务器发送请求,篡改服务器中的用户数据或造成服务器响应异常

测评结果

存在风险(发现1处)

测评结果描述

该Apk 中存在明文存储的数字证书文件

测评详细信息

… (省略具体位置)

解决方案

1.将项目中的.crt文件找到,提取文件中的内容复制在字符串上。例如:

private static String NEWCRT =“文件内容...”

/**

* okhttp 配置

* @param okHttpClientBuilder

* @param cerStr

*/

public static void setCertificate(OkHttpClient.Builder okHttpClientBuilder, String cerStr) {

try {

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

ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(cerStr.getBytes());

Certificate ca = certificateFactory.generateCertificate(byteArrayInputStream);

KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());

keyStore.load(null, null);

keyStore.setCertificateEntry("ca", ca);

byteArrayInputStream.close();

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

tmf.init(keyStore);

SSLContext sslContext = SSLContext.getInstance("TLS");

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

okHttpClientBuilder.sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) tmf.getTrustManagers()[0]);

okHttpClientBuilder.hostnameVerifier(new HostnameVerifier() {

@Override

public boolean verify(String hostname, SSLSession session) {

return true;

}

});

} catch (Exception e) {

e.printStackTrace();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值