2017-06-22 4 views
0

Hallo Leute, ich benutze Socket in Android mit https, also muss die Verbindung sicher machen. so für die sicheres connnection ich bin mit diesem zertifikatSSL android Zertifikat Ausgabe

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 { 
    } 
} }; 

jetzt gut funktioniert und Verbindung auch dann aufgebaut, aber ich bin nicht zu verstehen, oder ich weiß nicht, dass diese Art von Zertifikat sicher ist oder nicht? soll ich das benutzen oder nicht?

+0

diese Art der Implementierung ist sicher, weil Zertifikat verwendet wird, um Verbindung herzustellen, aber wenn Sie mehr Sicherheit benötigen, können Sie X509Extension Klasse – Satyavrat

+0

verwenden, aber ich denke, dieses Zertifikat für alle Arten vertraut, so ist das sicher oder nicht? und zweitens, wenn ich eine Zertifikatsdatei in einen rohen Ordner lege und von dort verwende, ist das viel besser oder nicht? – aj0822ArpitJoshi

+0

Das Zertifikat ist möglicherweise gültig, kann aber auch von einem Angreifer stammen. Eine Lösung besteht darin, das Zertifikat anzuheften, dh zu überprüfen, ob das Zertifikat von der Quelle stammt, mit der Sie sich voraussichtlich verbinden. Hinweis: Über 1.500 Let's Encrypt-Zertifikate wurden mit einem Formular auf "Pay Pal" im Namen ausgestellt. – zaph

Antwort

0

Nein, das ist verwundbar zu einem Man-in-the-middle Angriff!

Sie verwenden https, so dass die Daten während der Übertragung verschlüsselt werden, was gut ist. Aber es gibt keine Kontrolle, dass die andere Seite ist, von wem Sie erwarten, dass es ist, was schlecht ist.

Die obige benutzerdefinierte TrustManager macht keine Prüfungen und vertraut implizit alles. Im Code heißt es sogar trustAllCerts, was Sie explizit tun wollen nicht wollen. Sie sollten die Zertifikatskette überprüfen, um festzustellen, ob sie von einer vertrauenswürdigen Quelle stammt.

Das Problem besteht darin, dass ein Angreifer Ihren https-Verkehr abfangen kann, indem er einen Proxy zwischen Ihnen und Ihrem Endpunkt platziert. Der abfangende Proxy kann sein eigenes Zertifikat bereitstellen und kann so den Verkehr entschlüsseln und damit machen, was er will. Es kann auch eine https-Verbindung mit dem Endpunkt einrichten und die Daten lesen, die es von dort erhält. So kann der Angreifer lesen, was Sie senden, kann lesen, was Sie erhalten und kann ändern, was Sie senden und erhalten.

+0

Alles wahr, aber keine Lösung. Eine Lösung besteht darin, das Zertifikat anzuheften, dh zu überprüfen, ob das Zertifikat von der Quelle stammt, mit der Sie sich voraussichtlich verbinden. – zaph