Problema Webservice/CertificadoDigital/HTTPS

Pessoal, estou tentando criar um client para consumir os serviços de um Webservice da prefeitura aqui da cidade. O processo é a emissão de NFSe (Nota Fiscal de Serviço Eletrônica). Acredito que o esquema é o mesmo das NFEs da receita. O problema é o seguinte:
A autenticação do cliente é feita através de um certificado digital PFX fornecido pela própria empresa criadora do webservice. Já instalei o certificado no IE e acessei o endereço asmx passado pelo suporte, consigo ver a estrutura normalmente. Porém quando tento criar o client pelo NetBeans obtenho o seguinte erro: "Problema com o wsld ou do esquema. Verifique a URL, as configurações do proxy ou se o servidor está em execução. "

Já li sobre setar propriedades do certificado e coisas relacionadas, porém nada deu certo.

Alguem tem alguma dica?

Sim, tenho uma dica. Se for sempre um certificado estático que você vai usar:

Se for um certificado dinâmico:

http://alesaudate.com/2010/08/09/how-to-dynamically-select-a-certificate-alias-when-invoking-web-services/

[]'s

Obrigado pela ajuda, eu já usei essas configurações propostas no tópico informado. Porém mesmo assim o sistema mostra o mesmo erro, como se ele tivesse ignorando as configurações. Agora o erro mostrado é esse:

“HTTP transport error: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)”.

Continuando,

Segue meu código abaixo:

public static void main(String[] args) {

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

        System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
        System.setProperty("javax.net.ssl.keyStore", "C:\\Users\\Leandro\\Documents\\NetBeansProjects\\ClientISS\\certificado\\iss.pfx");
        System.setProperty("javax.net.ssl.keyStorePassword", "minhasenha");

        System.setProperty("javax.net.ssl.trustStoreType", "JKS");
        System.setProperty("javax.net.ssl.trustStore", "iss.jks");

    } catch (Exception e) {
        e.getMessage();
    }

    Certificado cer = new Certificado();
    String xml = cer.montaXML();
    cer.teste(xml);
}

Progredi um pouco, porém ainda estou com um erro muito parecido…

main, SEND TLSv1 ALERT: fatal, description = certificate_unknown
main, WRITE: TLSv1 Alert, length = 2
main, called closeSocket()
main, handling exception: 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
HTTP transport error: 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
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

Alguém pode me dar uma ajuda? Já estou há semanas com isso…

Já resolvi.

E qual foi a solução campeão ?

Estou com o mesmo problema :slight_smile:

Post antigo mais fica a dica, quando você acessa um serviço em um servidor com autenticação https você deve importar o certificado para sua jvm com a ferramenta KEYTOOL que fica dentro do JDK exemplo:

keytool -import -v -file (seu certificado)C:\kdi\certs\ACRAIZ-PRD.cer -keypass (senha)tomcat -keystore C:/kdi/jdk1.6.0_26/bin/keystore.jks(seu arquivo jks que contém as chaves publicas e privadas) -storepass tomcat -trustcacerts