httpsウェブサイトに接続するためにJSOUPを使用します。私はこの方法Jsoup.connect(URL)を使用しますが、それは例外をスロー:SSLをバイパスするGoogle Play
javax.net.ssl.SSLHandshakeException: Certificate not valid or trusted.
だから私は、すべての証明書のSSL信頼するように、このコードを使用します。
public static void enableSSLSocket() throws KeyManagementException, NoSuchAlgorithmException {
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) { }
public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) { }
}
};
// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(
new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
});
}
catch (Exception e) {
//We can not recover from this exception.
e.printStackTrace();
}}
をしかし、私は上記のコードを使用しSICEグール警告がありますプレイストアで。
あなたのアプリはApache HTTPクライアントでX509TrustManagerインターフェイスの安全でない実装を使用しており、セキュリティ上の脆弱性が生じます。この脆弱性の修正の締め切りを含む詳細については、このGoogleヘルプセンターの記事をご覧ください。
私はこのコードを追加した場合:
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
try {
chain[0].checkValidity();
} catch (Exception e) {
throw new CertificateException("Certificate not valid or trusted.");
}
}
警告がなくなって、しかしJSOUPが動作していないが、同じ例外を除いて、再び機能していません。 すべてのSSLとバイパスのGoogleの警告を信頼する方法はありますか?事前にありがとう。
"だから、すべてのSSLとバイパスのGoogleの警告を信頼する方法はありますか?" - うまくいけない。 "JSOUPは機能しません" - おそらく、あなたはJSoupの問題の[mcve]を提供し、 "うまくいかない"ということを詳細に説明する別のStack Overflow質問を開くことを検討するべきでしょう。 – CommonsWare
@CommonWare私はちょうど私の質問を更新します。あなたが私を助けることを願っています! – hoanngothanh
'enableSSLSocket()'メソッドを完全に削除することをお勧めします。 – CommonsWare