25

Google は、私の Android アプリケーションに X509TrustManager インターフェースの安全でない実装があり、コードを次のように変更する必要があるとアドバイスしました。

SSL 証明書の検証を適切に処理するには、カスタム X509TrustManager インターフェースの checkServerTrusted メソッドのコードを変更して、サーバーによって提示された証明書が期待どおりでない場合は常に CertificateException または IllegalArgumentException を発生させます。技術的な質問については、「android-security」および「TrustManager」のタグを使用して Stack Overflow に投稿できます。</p>

上記の問題を解決するには、次のコードをどのように変更できますか?

public EasySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
    super(truststore);

    TrustManager tm = new X509TrustManager()  {
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    };

    mContext.init(null, new TrustManager[] { tm }, null);
}
4

5 に答える 5

1

使用している外部ライブラリからこれが発生した場合は、apache libraray が原因であるかどうかを確認してください。

私にとっては、Apacheライブラリがエラーを引き起こしました:私は非推奨のクラス - MultipartEntityを使用していました。このクラスは、 TrustManagerDelegate を使用するSSLContextBuilder を使用します。TrustManagerDelegate は X509TrustManager を実装しているため、アプリケーションを Google Play ストアにアップロードするときに「TrustManager の実装が安全ではありません」というエラーが発生します。

解決策は次のとおりです。非推奨のMultipartEntityクラスの代わりに、 MultipartEntityBuilder を使用します

例えば ​​:

MultipartEntity httpMultipart = new MultipartEntity();
String contentType = httpMultipart.getContentType().getValue();

に置き換えられます:

MultipartEntityBuilder httpMultipart = new MultipartEntityBuilder();
String contentType = httpMultipart.build().getContentType().getValue();
于 2016-07-14T16:01:20.523 に答える