SSL安卓证书问题
问题描述:
你好我正在使用Android与https的Socket,所以需要使连接安全。所以对于安全connnection我用这CERTIFICATE-SSL安卓证书问题
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 {
}
} };
现在运作良好,连接也建立了,但我不理解或我不知道,使用这种类型的证书,是安全与否?我应该使用这个还是不是?
答
不,这是易受攻击到Man-in-the-middle攻击!
您正在使用https,所以数据在传输时被加密,这是很好的。但是没有检查另一方是你期望它是谁,这是不好的。
上述定制TrustManager
不作任何检查并隐含信任一切。在代码中它甚至被称为trustAllCerts
,您明确要做而不是想要做的。您需要检查证书链以查看它是否来自您信任的来源。
问题是,攻击者可以通过在您和端点之间放置代理来拦截您的https流量。拦截代理可以提供自己的证书,因此可以解密流量并随心所欲地执行任何操作。它也可以与端点建立一个https连接并读取从那里获得的数据。因此,攻击者可以阅读你发送的内容,可以阅读你将收到的内容,并可以改变你发送和接收的内容。
+0
所有的真实但没有解决方案。一个答案是固定证书,即验证证书是否来自您期望连接的源。 – zaph
这种类型的实现是安全的,因为证书用于建立连接,但如果您需要更多的安全性,您可以使用X509Extension类 – Satyavrat
但我认为这个证书是所有类型都信任的,所以这是否安全?第二个是如果我把证书文件放在原始文件夹中,并从那里使用有这么好或不好? – aj0822ArpitJoshi
证书可能有效,但也可能来自攻击者。一个答案是固定证书,即验证证书是否来自您期望连接的源。注意:超过1,500个让我们加密证书已经以某种形式发布在名字上的“pay pal”上。 – zaph