Ler cÓdigo fonte de url https

Fala comunidade…

Estou com uma pequena bucha…acho…
Seguinte, preciso acessar uma página https e ler o código fonte dela com páginas http consigo ler normalmente.
Meu código é este:

[code]import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class leURL {

public static void leiaURL(String strURL) throws MalformedURLException,
		IOException {
	
	URL url = new URL(strURL);		
	BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
	String linha = "";
	while ((linha = reader.readLine()) != null) {
		System.out.println(linha);
	}
	reader.close();
}

}[/code]

e tenho main que chama o método:

[code]import java.io.IOException;
import java.net.MalformedURLException;

public class TestaLeituraURL {

/**
 * @param args
 */
public static void main(String[] args) throws MalformedURLException, IOException{

	leURL url = new leURL();
	url.leiaURL("https://alguma pagina em https");

}

}[/code]

Agora o erro que dá ao tentar chamar este método:

Exception in thread "main" 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(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source) at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source) at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source) at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Unknown Source) at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source) at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source) at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source) at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source) at java.net.URL.openStream(Unknown Source) at leURL.leiaURL(leURL.java:14) at TestaLeituraURL.main(TestaLeituraURL.java:12) 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(Unknown Source) at sun.security.validator.PKIXValidator.engineValidate(Unknown Source) at sun.security.validator.Validator.validate(Unknown Source) at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source) at com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(Unknown Source) ... 15 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source) at java.security.cert.CertPathBuilder.build(Unknown Source) ... 20 more

Aguardo uma ajuda e desde já agradeço a comunidade.

Esse erro ocorre normalmente quando a autoridade certificadora que emitiu o certificado para o site não está cadastrada no arquivo cacerts (tipicamente em c:\arquivos de programas\java\jre____\jre\lib\security\cacerts) . Experimente ver se o erro ocorre quando você tentar ler o código-fonte de uma URL https de um site como os de bancos (exceto a Caixa Econômica Federal), que normalmente usam certificados emitidos por uma autoridade certificadora que está cadastrada em cacerts.

De qualquer maneira, se o tal site não puder mudar o certificado (sei lá - pode ser que seja muito caro arranjar um certificado “de verdade”) e for muito difícil alterar o cacerts, você pode usar o HttpClient do projeto Jakarta (http://jakarta.apache.org/httpcomponents/httpcomponents-client/index.html ) e ver a documentação .

Kríssimo,
para acessar Https é necessário possuir certificado cliente válido instalado na sua máquina, e apresenta-lo para realizar o handshake.
Também estou pesquisando sobre o assunto e ainda não conclui meu proijeto.
Vai uma dica da Internet para evoluir seu processo:

	public static X509Certificate load(String cerFileName) throws CertificateException 
	{
		File file = new File(cerFileName);   
	    FileInputStream fis;   
	    try 
	    {   
	         fis = new FileInputStream(file);   
	    } 
	    catch (FileNotFoundException e) 
	    {   
	         throw new IllegalArgumentException("Arquivo " + cerFileName + " não existe.");   
	    }   
	    X509Certificate certificado = X509Certificate.getInstance(fis);   
	    return certificado;   
	 }