2017-06-22 144 views
0

你好我正在使用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 { 
    } 
} }; 

现在运作良好,连接也建立了,但我不理解或我不知道,使用这种类型的证书,是安全与否?我应该使用这个还是不是?

+0

这种类型的实现是安全的,因为证书用于建立连接,但如果您需要更多的安全性,您可以使用X509Extension类 – Satyavrat

+0

但我认为这个证书是所有类型都信任的,所以这是否安全?第二个是如果我把证书文件放在原始文件夹中,并从那里使用有这么好或不好? – aj0822ArpitJoshi

+0

证书可能有效,但也可能来自攻击者。一个答案是固定证书,即验证证书是否来自您期望连接的源。注意:超过1,500个让我们加密证书已经以某种形式发布在名字上的“pay pal”上。 – zaph

回答

0

不,这是易受攻击Man-in-the-middle攻击!

您正在使用https,所以数据在传输时被加密,这是很好的。但是没有检查另一方是你期望它是谁,这是不好的。

上述定制TrustManager不作任何检查并隐含信任一切。在代码中它甚至被称为trustAllCerts,您明确要做而不是想要做的。您需要检查证书链以查看它是否来自您信任的来源。

问题是,攻击者可以通过在您和端点之间放置代理来拦截您的https流量。拦截代理可以提供自己的证书,因此可以解密流量并随心所欲地执行任何操作。它也可以与端点建立一个https连接并读取从那里获得的数据。因此,攻击者可以阅读你发送的内容,可以阅读你将收到的内容,并可以改变你发送和接收的内容。

+0

所有的真实但没有解决方案。一个答案是固定证书,即验证证书是否来自您期望连接的源。 – zaph