2017-06-22 10 views
0

こんにちは私はhttpsでアンドロイドのSocketを使用していますので、接続を安全にする必要があります。そう、セキュアconnnectionのために私はこのcertificate-SSL android certificate issue

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

を使用することができますが、この証明書はすべてのタイプに対して信頼できると思います。もう1つは、証明書ファイルを生のフォルダに入れてそこから使用する方がはるかに良いかどうかです。 – aj0822ArpitJoshi

+0

証明書は有効な可能性がありますが、攻撃者からのものでもあります。 1つの答えは、証明書をピン留めすることです。つまり、証明書が接続先のソースからのものであることを確認することです。注:1,500以上の「Let's Encrypt」証明書が名前の「pay pal」に何らかの形で発行されています。 – zaph

答えて

0

いいえ、これはです。脆弱からMan-in-the-middleの攻撃です!

あなたはhttpsを使用しているため、データは送信中に暗号化されています。しかし、反対側はあなたがそれが悪いと思っている人であるというチェックはありません。

上記のカスタムTrustManagerは、チェックを行わず、暗黙のうちにすべてを信頼します。コードではtrustAllCertsとも呼ばれ、ではなく、と明示的に行います。証明書チェーンが信頼できるソースから来ているかどうかを確認する必要があります。

問題は、攻撃者があなたとエンドポイントの間にプロキシを置くことによって、httpsトラフィックを傍受できることです。インターセプトプロキシはそれ自身の証明書を提供することができ、それによってトラフィックを解読し、それに伴って望むものを実行することができます。エンドポイントとのhttps接続を設定し、そこから取得したデータを読み取ることもできます。したがって、攻撃者はあなたが送信したものを読むことができ、受信するものを読むことができ、送信したものと受信するものを変更することができます。

+0

真実ですが解決策はありません。 1つの答えは、証明書をピン留めすることです。つまり、証明書が接続先のソースからのものであることを確認することです。 – zaph

関連する問題