Conexão Https em java

0

Gerei um keystore com sucesso usando

keytool -genkeypair -alias SomeAlias -keyalg RSA -validity 365 -keystore NAME.keystore -storetype JKS

colocou-o no diretório de configuração do tomcat e atualizou o arquivo server.xml, ativando a porta 8443.

Para que eu possa acessar o link

Mas quando estou tentando enviar alguns dados do link para link

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

minha função POST:

    public void HttpsPostData(String data, URL url){
    try {
        String encodedData = URLEncoder.encode("data", "UTF-8") + "=" + URLEncoder.encode(data, "UTF-8");
        HttpsURLConnection con = (HttpsURLConnection)url.openConnection();

        con.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
        wr.write(encodedData);
        wr.flush();

        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));

        String inputLine;

        while ((inputLine = in.readLine()) != null)
        {
            System.out.println(inputLine); 
        }

        in.close();
    } catch (IOException ex) {
        Logger.getLogger(Sender.class.getName()).log(Level.SEVERE, null, ex);
    }
}

o que eu sinto falta?

    
por tratto 03.11.2011 / 11:07

1 resposta

1

Você precisará confiar no certificado do servidor, mesmo que seja localhost. Provavelmente, a maneira mais fácil é usar um aplicativo Java chamado InstallCert . Veja uma postagem no blog aqui .

Etapas rápidas:

  1. Compile o InstallCert.java com javac InstallCert.java .
  2. Chame java InstallCert localhost:8443 , confie no certificado e InstallCert produzirá um arquivo chamado jssecacerts .
  3. Copie jssecacerts para o diretório JDK no diretório jre/lib/security .

e o programa deve poder confiar no certificado.

    
por 03.11.2011 / 11:43