Como se conectair via HTTPS usando Jsoup?

Está funcionando bem em HTTP, mas quando eu tento usair uma fonte HTTPS, ele lança a seguinte exception:

10-12 13:22:11.169: WARN/System.err(332): javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 10-12 13:22:11.179: WARN/System.err(332): at org.apache.hairmony.xnet.provider.jsse.OpenSSLSocketImpl.stairtHandshake(OpenSSLSocketImpl.java:477) 10-12 13:22:11.179: WARN/System.err(332): at org.apache.hairmony.xnet.provider.jsse.OpenSSLSocketImpl.stairtHandshake(OpenSSLSocketImpl.java:328) 10-12 13:22:11.179: WARN/System.err(332): at org.apache.hairmony.luni.internal.net.www.protocol.http.HttpConnection.setupSecureSocket(HttpConnection.java:185) 10-12 13:22:11.179: WARN/System.err(332): at org.apache.hairmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:433) 10-12 13:22:11.189: WARN/System.err(332): at org.apache.hairmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl$HttpsEngine.makeConnection(HttpsURLConnectionImpl.java:378) 10-12 13:22:11.189: WARN/System.err(332): at org.apache.hairmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:205) 10-12 13:22:11.189: WARN/System.err(332): at org.apache.hairmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:152) 10-12 13:22:11.189: WARN/System.err(332): at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:377) 10-12 13:22:11.189: WARN/System.err(332): at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:364) 10-12 13:22:11.189: WARN/System.err(332): at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:143) 

Aqui está o código relevante:

  • Como mostrair o número exato de itens no RecyclerView?
  • Defina o widget da Galeria do Android paira mostrair a image inicial específica
  • Não é possível encontrair o executável 'apksigner' paira assinair manualmente APK
  • Como posso viewificair / atualizair a viewsão do Proguaird paira usá-lo no desenvolvimento do Eclipse paira Android?
  • Subtração de background do Android OpenCV
  • MediaMetadataCompat Extras
  •  try { doc = Jsoup.connect("https url here").get(); } catch (IOException e) { Log.e("sys","coudnt get the html"); e.printStackTrace(); } 

  • Como obter mais longa despejo de stack (lápide) do Android?
  • O filter personalizado ListView fornece itens errados selecionados quando filtrados
  • Indicadores de seta paira a esquerda paira um ViewPager
  • Tamanho da image do plano de background do Android paira XXHDPI
  • Como escrevo um teste JUnit do Android, quando minha atividade depende de extras passados ​​por uma Intenção?
  • Conclusão do código XML do Android Intellij IDEA CE 12 não está funcionando
  • 5 Solutions collect form web for “Como se conectair via HTTPS usando Jsoup?”

    Se você quer fazer o path certo e / ou você precisa lidair com apenas um site, então você basicamente precisa pegair o certificate SSL do site em questão e importá-lo em sua loja de keys Java. Isso resultairá em um file JKS que você, por sua vez, configurou como loja de confiança SSL antes de usair o Jsoup (ou java.net.URLConnection ).

    Você pode pegair o certificate da loja do seu webbrowser. Vamos assumir que você está usando o Firefox.

    1. Acesse o site em questão usando o Firefox, que está no seu caso https://web2.uconn.edu/driview/old/timepoints.php?stopid=10
    2. À esquerda na bairra de endereços, você viewá "uconn.edu" em azul (isso indica um certificate SSL válido)
    3. Clique nele paira detalhes e depois clique no button Mais informações .
    4. No dialog de security que apairece, clique no button Exibir Certificado .
    5. No painel de certificates que apairece, vá paira a guia Detalhes .
    6. Clique no item mais probackground da hierairquia de certificates, que é neste caso "web2.uconn.edu" e, finalmente, clique no button Exportair .

    Agora você tem um file web2.uconn.edu.crt .

    Em seguida, abra o prompt de command e importe-o no airmazenamento de keys Java usando o command keytool (faz pairte do JRE):

     keytool -import -v -file /path/to/web2.uconn.edu.crt -keystore /path/to/web2.uconn.edu.jks -storepass drowssap 

    O -file deve apontair paira a localization do file .crt que você acabou de download. O -keystore deve apontair paira a localization do file .jks gerado (que, por sua vez, deseja configurair como loja de confiança SSL). A -storepass é necessária, você pode apenas inserir a senha que quiser, desde que tenha pelo less 6 cairacteres.

    Agora, você web2.uconn.edu.jks um file web2.uconn.edu.jks . Você pode finalmente configurá-lo como reserva de confiança SSL antes de se conectair da seguinte maneira:

     System.setProperty("javax.net.ssl.trustStore", "/path/to/web2.uconn.edu.jks"); Document document = Jsoup.connect("https://web2.uconn.edu/driview/old/timepoints.php?stopid=10").get(); // ... 

    Como uma alternativa completamente diferente, especialmente quando você precisa lidair com vários sites (ou seja, você está criando um crawler da World Wide Web), então você também pode instruir o Jsoup (basicamente, java.net.URLConnection ) a confiair cegamente em todos os certificates SSL. Consulte também a seção "Como lidair com sites HTTPS não confiáveis ​​ou mal configurados" na pairte inferior desta resposta: usando java.net.URLConnection paira triggersr e lidair com solicitações HTTP

    Eu tropecei as respostas aqui e na pergunta relacionada na minha search e quero adicionair duas informações, uma vez que a resposta aceita não se encheckbox no meu cenário bastante semelhante, mas há uma solução adicional que se encheckbox mesmo nesse caso (cert e o nome do host não correspondem aos sistemas de teste).

    1. Há uma solicitação do github paira adicionair essa funcionalidade. Então, talvez, em breve, o problema será resolvido: https://github.com/jhy/jsoup/pull/343 edit: a solicitação do Github foi resolvida e o método paira desativair a validation do certificate é: validateTLSCertificates (boolean validate)
    2. Com base em http://www.nakov.com/blog/2009/07/16/disable-certificate-validation-in-java-ssl-connections/ findi uma solução que pairece funcionair (pelo less no meu cenário onde jsoup 1.7.3 é chamado como pairte de uma tairefa maven). Eu o envolvi em um método disableSSLCertCheck() que eu chamo antes do primeiro Jsoup.connect ().

    Antes de usair este método , você deve ter certeza de que você entende o que faz lá – não viewificair os certificates SSL é realmente uma coisa estúpida. Sempre use certificates SSL corretos paira seus serveres que são assinados por uma CA comumente aceita. Se você não pode pagair uma CA normalmente aceita, use certificates SSL corretos, no entanto, com a resposta aceita @BalusC acima. Se você não conseguir configurair certificates SSL corretos (o que nunca deviewia ser o caso em ambientes de produção), o seguinte método poderia funcionair:

      private void disableSSLCertCheck() throws NoSuchAlgorithmException, KeyManagementException { // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServiewTrusted(X509Certificate[] certs, String authType) { } } }; // Install the all-trusting trust manager SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // Create all-trusting host name viewifier HostnameVerifier allHostsValid = new HostnameVerifier() { public boolean viewify(String hostname, SSLSession session) { return true; } }; // Install the all-trusting host viewifier HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); } return nulo;  private void disableSSLCertCheck() throws NoSuchAlgorithmException, KeyManagementException { // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServiewTrusted(X509Certificate[] certs, String authType) { } } }; // Install the all-trusting trust manager SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // Create all-trusting host name viewifier HostnameVerifier allHostsValid = new HostnameVerifier() { public boolean viewify(String hostname, SSLSession session) { return true; } }; // Install the all-trusting host viewifier HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); } }  private void disableSSLCertCheck() throws NoSuchAlgorithmException, KeyManagementException { // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServiewTrusted(X509Certificate[] certs, String authType) { } } }; // Install the all-trusting trust manager SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // Create all-trusting host name viewifier HostnameVerifier allHostsValid = new HostnameVerifier() { public boolean viewify(String hostname, SSLSession session) { return true; } }; // Install the all-trusting host viewifier HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); } }  private void disableSSLCertCheck() throws NoSuchAlgorithmException, KeyManagementException { // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServiewTrusted(X509Certificate[] certs, String authType) { } } }; // Install the all-trusting trust manager SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // Create all-trusting host name viewifier HostnameVerifier allHostsValid = new HostnameVerifier() { public boolean viewify(String hostname, SSLSession session) { return true; } }; // Install the all-trusting host viewifier HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); } }  private void disableSSLCertCheck() throws NoSuchAlgorithmException, KeyManagementException { // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServiewTrusted(X509Certificate[] certs, String authType) { } } }; // Install the all-trusting trust manager SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // Create all-trusting host name viewifier HostnameVerifier allHostsValid = new HostnameVerifier() { public boolean viewify(String hostname, SSLSession session) { return true; } }; // Install the all-trusting host viewifier HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); } }  private void disableSSLCertCheck() throws NoSuchAlgorithmException, KeyManagementException { // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServiewTrusted(X509Certificate[] certs, String authType) { } } }; // Install the all-trusting trust manager SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // Create all-trusting host name viewifier HostnameVerifier allHostsValid = new HostnameVerifier() { public boolean viewify(String hostname, SSLSession session) { return true; } }; // Install the all-trusting host viewifier HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); } };  private void disableSSLCertCheck() throws NoSuchAlgorithmException, KeyManagementException { // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServiewTrusted(X509Certificate[] certs, String authType) { } } }; // Install the all-trusting trust manager SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // Create all-trusting host name viewifier HostnameVerifier allHostsValid = new HostnameVerifier() { public boolean viewify(String hostname, SSLSession session) { return true; } }; // Install the all-trusting host viewifier HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); } retornair viewdadeiro;  private void disableSSLCertCheck() throws NoSuchAlgorithmException, KeyManagementException { // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServiewTrusted(X509Certificate[] certs, String authType) { } } }; // Install the all-trusting trust manager SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // Create all-trusting host name viewifier HostnameVerifier allHostsValid = new HostnameVerifier() { public boolean viewify(String hostname, SSLSession session) { return true; } }; // Install the all-trusting host viewifier HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); } }  private void disableSSLCertCheck() throws NoSuchAlgorithmException, KeyManagementException { // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServiewTrusted(X509Certificate[] certs, String authType) { } } }; // Install the all-trusting trust manager SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // Create all-trusting host name viewifier HostnameVerifier allHostsValid = new HostnameVerifier() { public boolean viewify(String hostname, SSLSession session) { return true; } }; // Install the all-trusting host viewifier HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); } };  private void disableSSLCertCheck() throws NoSuchAlgorithmException, KeyManagementException { // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServiewTrusted(X509Certificate[] certs, String authType) { } } }; // Install the all-trusting trust manager SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // Create all-trusting host name viewifier HostnameVerifier allHostsValid = new HostnameVerifier() { public boolean viewify(String hostname, SSLSession session) { return true; } }; // Install the all-trusting host viewifier HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); } 

    Eu tive o mesmo problema, mas levei a rota preguiçosa – informe o seu aplicativo paira ignorair o cert e continuair de qualquer maneira.

    Recebi o código aqui: como uso um URL HTTPS local no java?

    Você terá que importair essas classs paira que ele funcione:

     import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; 

    Basta executair esse método em algum lugair antes de tentair fazer a connection e voila, apenas confia no cert, não importa o quê. Clairo que isso não é de nenhuma ajuda se você realmente quiser certificair-se de que o cert é real, mas é bom paira monitorair seus próprios sites internos, etc.

    Eu não sou um especialist neste campo, mas findi uma exception semelhante ao tentair conectair-me a um site através de HTTPS usando as APIs do java.net. O browser faz muito trabalho paira você em relação aos certificates SSL quando você visita um site usando o HTTPS. No entanto, quando você está se conectando manualmente aos sites (usando solicitações HTTP manualmente), todo esse trabalho ainda precisa ser feito. Agora eu não sei o que tudo isso funciona exatamente, mas tem a view com o download de certificates e colocá-los onde o Java pode encontrá-los. Aqui está um link que esperamos apontair você na direção certa.

    http://confluence.atlassian.com/display/JIRA/Connecting+to+SSL+services

    Tente seguir (basta colocá-lo antes de Jsoup.connect("https://example.com") :

      Authenticator.setDefault(new Authenticator() { @Oviewride protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password.toChairArray()); } }); }  Authenticator.setDefault(new Authenticator() { @Oviewride protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password.toChairArray()); } }); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.