CONEXÃ O NFS-E SISTEMÃ ISS-INTEL UTILIZÃNDO JÃVÃ E SSL Autor : Julio P. Leiser House Company Data : 17/08/2011 16:00 ETAPA 1 IMPORTAR CERTIFICADO A1 DO CLIENTE COM EXTENSÃO.PFX NO INTERNET EXPLORER A partir menu iniciar do Windows, execute o Internet Explorer e em seguida clique no ícone no canto superior direito com formato de engrenagem para acessar as opções de configuração do Internet Explorer. Clique neste ícone para acessar o menu de opções do Internet Explorer. Após abrir o menu, selecione a opção Internet Options ou Opções da Internet conforme figura abaixo: Clique aqui.
Em seguida seleciona a pasta Content ou Conteúdo conforme figura abaixo: Pressione este botão para ir até o painel de configuração de certificados. Após clicar no botão Certificates ou Certificados, será apresentada uma nova janela conforme a figura abaixo: Pressione com o mouse no botão Import para importar o certificado A1 do cliente com extensão.pfx
Após pressionar o botão Import... será apresentada uma janela conforme figura abaixo. Pressione Next para continuar a importação do certificado. Após selecionar o certificado desejado, pressione o botão Next para confirmar a seleção. Em seguida será apresentado o painel para seleção do certificado do cliente que será importado. Pressione o botão Browse... para selecionar o certificado do cliente. Veja figura abaixo: Clique aqui para selecionar o certificado. Clique aqui. Após selecionar o certificado desejado, pressione o botão Open para confirmar a seleção. Pressione o botão Next para ir para a próxima página.
Neste painel está uma das partes mais importantes para que o certificado funcione quando utilizado na linguagem Java e também no momento da exportação do certificado final. Falaremos mais adiante sobre este assunto. Não se esqueça de marcar a opção Enable Strong private key protection( Habilitar a proteção forte de chave privada ) e a opção Mark this key as exportable( Marcar esta chave como exportável ). Isto lhe poupará muitas dores de cabeça e tempo em pesquisa em fóruns e também nos pedidos de suporte. Informe a senha do Certificado do cliente Não esqueça de ligar estas opções. Clique aqui para continuar.
Selecione a primeira opção antes de pressionar o botão next Selecione esta opção. Clique aqui para continuar. Pressione o botão Finish para ir para a próxima página. Clique aqui para continuar. Clique aqui para finalizar a importação do certificado. Se tudo deu certo e o certificado for válido, o Internet Explorer deverá apresentar uma tela similar a esta indicando que o certificado foi importado com sucesso. Clique aqui para voltar para a tela de certificados.
ETAPA 2 EXPORTAR O CERTIFICADO A1 PARA O FORMATO QUE SERÁ UTILIZADO NO JAVA. Selecione o certificado recém-importado conforme a figura abaixo, em seguida pressione o botão Export... Texto sobreposto para proteger a identidade do cliente, nesta linha irá aparecer o nome do cliente dono do certificado. CERTIFICADO DO CLIENTE Clique aqui para iniciar a exportação do certificado. Após pressionar o botão Export... será apresentada a tela de boas vindas. Veja figura abaixo. Clique aqui para ir para a próxima página.
Este painel é uma das partes mais importante da exportação do certificado para funcionar em Java, pois normalmente, por padrão, o IE não habilita a opção de exportação de chave primária conforme figura abaixo. Lembra das opções Enable Strong private key protection( Habilitar a proteção forte de chave privada ) e a opção Mark this key as exportable( Marcar esta chave como exportável )? Sem estas opções habilitadas a opção Yes, export the private key fica inacessível. Clique aqui para ir para a próxima página. Em função da seleção anterior, o IE habilitará a opção que precisamos para gerar o certificado na forma correta para utilização em Java. Enfim, o que realmente interessa para que o certificado funcione utilizando o Java para conectar o servidor SSL da ISS-Intel. Clique aqui para continuar.
Informe a senha do certificado para geração do novo PFX no padrão PKCS #12. Veja figura abaixo: Informe a senha do certificado e a confirmação de senha para geração do novo certificado. Clique aqui para continuar. Informe o nome do arquivo para o novo certificado que será utilizado no Java. Veja figura abaixo. Informe o nome do arquivo que será gerado para o novo certificado.
Após informar o nome do arquivo pressione o botão Save. Veja figura abaixo: Nome do certificado que será utilizado no Java já com toda a cadeia de certificados inclusa no PFS. Clique no botão Save para confirmar o nome do certificado. Clique aqui para continuar.
Pressione o botão Finish para finalizar o processo de exportação do certificado. Veja figura abaixo: Conferir se está como Yes. Clique aqui para continuar. Se tudo deu certo e o certificado for válido, o Internet Explorer deverá apresentar uma tela similar a esta indicando que o certificado foi importado com sucesso. Clique aqui para continuar. Clique aqui para finalizar.
ETAPA 3 EXPORTAR O CERTIFICADO DA ISS-INTEL PARA UM ARQUIVO TIPO DER COM A EXTENSÃO.CER. Para completar a cadeia de certificados necessário para conexão Java, você deverá exportar o certificado da ISS-Inter para uma aquivo DER e posteriormente criar um KeyStore incluindo este certificado como Trust. Veja figura abaixo: Selecione o certificado da ISS-Intel para exportar no formato DER Clique aqui para iniciar o processo de exportação do certificado. Após pressionar o botão Export... será apresentada a tela de boas vindas. Veja figura abaixo. Clique aqui par ir para a próxima página.
Selecione a opção DER encoded binary X.509 (.CER). Veja figura abaixo: Selecione esta opção. Clique aqui para continuar Informe o nome do arquivo para geração do certificado da ISS-Intel no formato DER. Veja figura abaixo: Informe o nome do arquivo para geração do trust certificate da ISSIntel no formato DER. Clique aqui para continuar
Clique aqui para continuar Clique aqui para finalizar a exportação do certificado.
Se tudo deu certo e o certificado for válido, o Internet Explorer deverá apresentar uma tela similar a esta indicando que o certificado foi importado com sucesso. Clique aqui para finalizar. ETAPA 4 CRIAR O KEY STORE JAVA Para fazer o vínculo entre o certificado da ISS-Intel e o certificado do cliente, é necessário criar o Keystore Java e incluir o certificado da ISS-Intel como trust e o certificado do cliente como private key. Para realizar esta tarefa utilize um aplicativo chamado KeyStore Explorer, você pode fazer o download em http://www.lazgosoftware.com/kse/downloads.html. Instale o aplicativo e em seguida execute o mesmo a partir o atalho que a instalação irá criar na área de desktop. Veja figura abaixo: Execute o KeyStore Explorer.
Após executar o KeyStore Explorer, será apresentada a seguinte tela conforme figura abaixo: Clique nesta opção para criar um novo KeyStore. Selecione esta opção. Clique no botão ok para continuar. INCLUÍNDO O CERTIFICADO TRUST DA ISS-INTEL. Após pressionar o botão ok será apresentada a seguinte tela conforme figura abaixo: Clique neste botão para importar o trust certificado ISS-Intel. Selecione o certificado Trust. Pressione o botão Import.
Pressione o botão OK, para aceitar o certificado. A mensagem acima indica que não foi possível estabelecer um caminho de confiança para o certificado. As informações do certificado só serão exibidas após confirmação do usuário pressionando o botão OK. Pressione o botão OK, para aceitar o certificado. O painel acima mostra um resumo dos dados de identidade do certificado ISS-Intel. Pressione OK para continuar. Pressione o botão SIM, para aceitar e confiar no certificado.
Informe o apelido do certificado ou confirme o apelido sugerido. Pressione o botão Ok para confirmar. Após a confirmação a tela do Keystore Explorer deverá ficar conforme a figura abaixo. Pressione o botão gravar para gerar o Keystore java. Pressione o botão Ok para confirmar. Após pressionar o botão gravar, será solicitada as senhas do certificado, utilize a mesma senha que foi utilizada para geração do.pfx na etapa 2 deste tutorial para simplificar o uso. Veja figura abaixo: Informe a senha para gerar o keystore. Pressionar o botão OK para confirmar a senha. Informe o nome do arquivo onde será armazenado o Keystore Java. Pressione o botão Salvar para gravar o keystore.
INCLUINDO O CERTIFICADO KEY PAIR TYPE DO CLIENTE Após pressionar o botão Ok será apresentado a seguinte tela conforme figura abaixo: Clique neste botão para importar certificado do cliente. Selecione a opção PKCS #12 para incluir o certificado do cliente gerado na etapa 2 deste tutorial. Pressione o botão OK para continuar. Selecione esta opção. Pressione o botão Browse para selecionar o certificado. Informe a senha do certificado que será importado. Selecione o certificado gerado na etapa 2 deste tutorial. Clique aqui para confirmar o certificado.
Pressione o botão Import para importar o certificado do cliente para o Keystore. Informe o apelido do certificado ou confirme o apelido sugerido. Apelido do cliente Pressione o botão Ok para confirmar. Informe a senha para gerar o Key Pair. Pressionar o botão OK para confirmar a senha. Pressione o botão OK para continuar. Após pressionar o botão OK deverá ser apresentado no Keystore Explorer as seguintes informações conforme figura abaixo:
identidade do cliente O Keystore deverá ficar no seguinte formato. Após verificar o Keystore acima pressione o botão gravar para salvar o Keystore gerado. ETAPA 5 TESTANDO O KEYSTORE E O CERTIFICADO PKCS #12 NO WEB SERVICES DA ISSINTEL PARA VALIDAÇÃO DO CERTIFICADO. Abaixo segue classe Java para validar o certificado na ISS-Intel, o endereço de verificação varia de prefeitura para prefeitura. package com.hcinf.soap; import java.io.bufferedreader; import java.io.inputstream; import java.io.inputstreamreader; import java.net.url; import java.net.urlconnection; import java.security.security; public class ClienteHTTPSVerify { public static void main(string[] args ){ // Habilita os logs do java para verificação de certificado via protoco HTTPs. System.setProperty("com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump", "true"); System.setProperty("com.sun.xml.ws.transport.http.HttpAdapter.dump", "true"); System.setProperty("javax.net.debug", "ssl"); final String pathcertificado = "D:\\HCINF\\Certificados-A1\\CLIENTE_JAVA.pfx"; final String keystore = "D:\\HCINF\\Certificados-A1\\CLIENTE_ISSINTEL.keystore"; String senhacertificadopfx String senhacertificadokeystore = "senha"; = "senha"; // Endereço do servidor webservices para verificação do certificado no município. String endpoint = "https://boaesperanca-mg.treino-issintel.com.br/webservices/abrasf/certify"; System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol"); Security.addProvider(new com.sun.net.ssl.internal.ssl.provider()); // Indica o certificado tipo KeyStore - PKCS12 - arquivo.pfx do cliente. System.setProperty("javax.net.ssl.keyStoreType", "PKCS12"); System.setProperty("javax.net.ssl.keyStore", pathcertificado); System.setProperty("javax.net.ssl.keyStorePassword", senhacertificadopfx ); // Indica Trust KeyStore arquivo.keystore com o certificado ISSIntel e o // certificado do cliente. System.setProperty("javax.net.ssl.trustStoreType", "JKS"); System.setProperty("javax.net.ssl.trustStore", keystore); System.setProperty("javax.net.ssl.trustStorePassword", senhacertificadokeystore ); try{ // Aceita a negociação com o servidor.
System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true"); URL url = new URL(endpoint); // Conecta com o servidor URLConnection conn = url.openconnection(); conn.setallowuserinteraction(true); conn.setdefaultallowuserinteraction(true); InputStream inputstream = conn.getinputstream(); InputStreamReader inputstreamreader = new InputStreamReader(inputstream); BufferedReader bufferedreader = new BufferedReader(inputStreamReader); } String string = null; // Lê a resposta do servidor para checar se o certificado passou pelo teste. while ( (string = bufferedreader.readline() )!= null ) System.out.println("Received "+string); } catch(throwable err){ err.printstacktrace(); } } Ao executar a classe Java acima o servidor da ISS-Intel deverá retornar o seguinte resultado em SOAP, conforme exemplo abaixo. %% Cached client session: [Session-1, SSL_RSA_WITH_RC4_128_MD5] main, WRITE: TLSv1 Application Data, length = 219 main, READ: TLSv1 Application Data, length = 2886 Received <validated>true</validated><raw_cert>-----begin CERTIFICATE----- Received MIIGNTCCBR2gAwIBAgIIBNkl/vQokZ8wDQYJKoZIhvcNAQEFBQAwTDELMAkGA1UE Received BhMCQlIxEzARBgNVBAoTCklDUC1CcmFzaWwxKDAmBgNVBAMTH1NFUkFTQSBDZXJ0 Received awzpy2fkb3jhierpz2l0ywwgdjewhhcnmtaxmtmwmtcxmjq2whcnmtexmtmwmtcx Received MjQ2WjCB8TELMAkGA1UEBhMCQlIxEzARBgNVBAoTCklDUC1CcmFzaWwxFDASBgNV Received BAsTCyhFTSBCUkFOQ08pMRgwFgYDVQQLEw8wMDAwMDEwMDE1MTUwMzIxFDASBgNV Received BAsTCyhFTSBCUkFOQ08pMRQwEgYDVQQLEwsoRU0gQlJBTkNPKTEUMBIGA1UECxML Received KEVNIEJSQU5DTykxFDASBgNVBAsTCyhFTSBCUkFOQ08pMRQwEgYDVQQLEwsoRU0g Received QlJBTkNPKTEvMC0GA1UEAxMmU0lTUE9OVE8gU0lTVEVNQVMgSU5URUxJR0VOVEVT Received IExUREEtTUUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMD3w88temL0DkDe Received Dh44pF31qd5q0bwI7HA+2SJCijR/VlcIuIrGipZw6xsFmP01eA9Q0yyFzEOWJhBn Received RJXOKNsGcxQlVoWkB2djdY228KDzBUQgetURDelCe5TlObrZxHWtXUQqCVCH6WNd Received X68YuAL/xdXE1jqYEO1JWFLPic7pAgMBAAGjggL3MIIC8zAOBgNVHQ8BAf8EBAMC Received BeAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMB8GA1UdIwQYMBaAFLdg Received qfv5sqauao1069vkyzzozvvcmig6bgnvhreegbiwga+bgkzjtkfoq0vjuk9au0lt Received UE9OVE8uQ09NLkJSoD4GBWBMAQMEoDUTMzI4MDQxOTY0MDUzMjMwMTc4MTMwMDAw Received MDAwMDAwMDAwMDBNIDQuNTE5LjcxMFNTUCBNR6AdBgVgTAEDAqAUExJKQUNLU09O Received IFRVTElPIFJFSVOgGQYFYEwBAwOgEBMOMDA0NTU0NTgwMDAxMzWgFwYFYEwBAweg Received DhMMMDAwMDAwMDAwMDAwMFcGA1UdIARQME4wTAYGYEwBAgEGMEIwQAYIKwYBBQUH Received AgEWNGh0dHA6Ly93d3cuY2VydGlmaWNhZG9kaWdpdGFsLmNvbS5ici9yZXBvc2l0 Received b3jpby9kcgmwgfaga1udhwsb6dcb5tbjoeegryzdahr0cdovl3d3dy5jzxj0awzp Received Y2Fkb2RpZ2l0YWwuY29tLmJyL3JlcG9zaXRvcmlvL2xjci9zZXJhc2FjZHYxLmNy Received bdbdoeggp4y9ahr0cdovl2xjci5jzxj0awzpy2fkb3muy29tlmjyl3jlcg9zaxrv Received cmlvl2xjci9zzxjhc2fjzhyxlmnybdbtofggt4znahr0cdovl3jlcg9zaxrvcmlv Received LmljcGJyYXNpbC5nb3YuYnIvbGNyL1NlcmFzYS9yZXBvc2l0b3Jpby9sY3Ivc2Vy Received YXNhY2R2MS5jcmwwgZcGCCsGAQUFBwEBBIGKMIGHMEcGCCsGAQUFBzAChjtodHRw Received Oi8vd3d3LmNlcnRpZmljYWRvZGlnaXRhbC5jb20uYnIvY2FkZWlhcy9zZXJhc2Fj Received ZHYxLnA3YjA8BggrBgEFBQcwAYYwaHR0cDovL29jc3AuY2VydGlmaWNhZG9kaWdp Received dgfslmnvbs5ici9zzxjhc2fjzhyxma0gcsqgsib3dqebbquaa4ibaqbnof4mjgs4 Received GyrXeehRrVzXTi6FhPyFtnuna5grYYG7SZIQKcQGlXvqNvOdOG2uJ+I2/vapY7jq Received r4edi5s7j8fglmkpvmoaleuk3+5df+jxagyli/8k39gktcq709xv1hqt8997pcvo Received II1at3C3SciyyjcUvP8x/xo/ux4bV372aYdvxyY7iYVxTA8HnIF6GQTqLzZvoQwW Received xc+d1lp2tjj10r74ym4zsjg9sqbvkdtikq8j1yklzrwhyqaztcpj+wgamaghjday Received s9iwilkf/nqbynx9vcxyt7vq88aikns1nfi9ldllezyjud64po8pophdc+wxnxl6 Received o57gl3ws5gzg Received -----END CERTIFICATE----- Received </raw_cert>