我正在使用https的android套接字,所以我需要确保连接安全。因此,我使用这个证书-
private final TrustManager[] trustAllCerts= new TrustManager[] { new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[] {};
}
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
} };现在一切正常,连接也建立了,但是我不理解或者我不知道使用这种类型的证书是否安全?
我该不该用这个?
发布于 2017-06-22 19:04:51
不,这是易受Man-in-the-middle攻击的!
您使用的是https,所以数据在传输时是加密的,这很好。但是没有检查另一端是不是你所期望的,这是不好的。
上面的自定义TrustManager不进行任何检查,并隐式地信任所有内容。在代码中,它甚至被称为trustAllCerts,这是您显式地做而不是想要做的。您需要检查证书链,看看它是否来自您信任的来源。
问题是攻击者可以通过在您和您的端点之间放置一个代理来拦截您的https流量。拦截代理可以提供它自己的证书,因此可以解密流量并对其执行任何它想要的操作。它还可以设置与端点的https连接,并读取从那里获得的数据。因此,攻击者可以读取您发送的内容,可以读取您将接收的内容,还可以更改您发送和接收的内容。
https://stackoverflow.com/questions/44696583
复制相似问题