Conexao HTTPS

2 respostas
ThomasCouto

Não estou conseguindo fazer uma conexão https e pegar o inputStream, alguma dica?

System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.notams.jcs.mil");
	Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

	URL url = new URL("https://www.notams.jcs.mil");
	URLConnection con = url.openConnection();
	con.setDoInput(true);
	con.setDoOutput(false);
	con.setRequestProperty("Request-Method", "POST");
	
	con.connect();

	
	BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
	
	con.getInputStream();
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:150)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1518)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:174)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:168)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:848)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:106)
	at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:495)
	at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:433)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:818)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1030)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1057)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1041)
	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:402)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:170)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:133)
	at aplicacao.NotamsJcsMil.getInfo(NotamsJcsMil.java:40)
	at aplicacao.NotamsJcsMil.main(NotamsJcsMil.java:52)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:221)
	at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:145)
	at sun.security.validator.Validator.validate(Validator.java:203)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:172)
	at com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(SSLContextImpl.java:320)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:841)
	... 12 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:236)
	at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:194)
	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:216)
	... 17 more

2 Respostas

sunshine

também estou com este problema

ThomasCouto

Fala cara, consegui resolver aqui! Vamos ver se te ajuda:

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

	SSLContext sc;

	try {
	    sc = SSLContext.getInstance ("SSL");
	    sc.init(null, trustAllCerts, new java.security.SecureRandom());
	    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

	    URL url = new URL("https://www.alguma-coisa-aqui/alguma-pagina.alguma-extensao");
	    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
	    connection.connect();

	    InputStream ic = connection.getInputStream();

	    Scanner s = new Scanner(ic);
	    s.useDelimiter("\r?\n");

	    while(s.hasNext()) {
		System.out.println(s.next());
	    }

	    ic.close();
	    connection.disconnect();
Criado 7 de dezembro de 2006
Ultima resposta 2 de jan. de 2007
Respostas 2
Participantes 2