Liberando certificado digital para acesso via Web Service

CertificateError

Imagem ilustrativa

Olá pessoal, confesso que deu trabalho criar um título pra esse artigo que fosse condizente com o problema passado por meu amigo, Ray Silva. Ele instalou certificados digitais para trabalhar com um Web Service que faz uma chamada na Secretaria da Fazenda e passou por um erro que fez ele levar 7 dias para resolvê-lo. Felizmente ele conseguiu resolver e postou em seu blog a solução.

Como ele achou útil (e eu também) para ajudar a quem esteja passando pelo mesmo problema, ele me permitiu copiar seu artigo aqui, para ajudar mais pessoas.

Observação: este artigo é mais complexo do que os habituais deste blog, já que o foco é só pra quem passa por um tipo de problema específico, acompanhe, irei reescrever o artigo dele com algumas adaptações pro texto ficar menor, o link para o artigo original estará ao final:

 

O escopo do meu projeto, de forma resumida, é simplesmente efetuar uma pesquisa na secretaria da fazenda através de uma chamada a um web service utilizando ASP.NET webforms na versão 3.5 do framework. O retorno da secretaria da fazenda são alguns XMLs dos quais eu exibo informações para efetuar a manifestação do destinatário.

Durante o desenvolvimento estava tudo em ordem, efetuei também o deploy no ambiente de testes e tudo funcionava muito bem…mas o problema apareceu no ambiente de produção! Quando fiz a pesquisa, o erro apareceu:

“System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel”

Ambos os ambientes estavam com o certificado digital A1 instalado e funcionando perfeitamente, sendo assim, me custou muito para chegar a resolução. Após muitas pesquisas e horas de puro stress, encontrei a solução: WinhttpCertCfg.exe, uma ferramenta de configuração de certificados.

Antes de comentar o que fiz, ficam aqui algumas dicas:

1) Certifique-se que o certificado e toda sua cadeia está instalada corretamente, ou seja, tenha absoluta certeza que o certificado é válido.

mmc-001

2) Certifique-se que o servidor está com todas as atualizações em dia. 

3) Se o servidor for Windows XP ou Windows Server 2003, aplique esse hotfix: http://support.microsoft.com/kb/968730

Após efetuar o download da ferramenta, segue abaixo alguns exemplos de como analisar os certificados e também instalá-los:

  •  O comando abaixo lista as contas que tem acesso a chave privada para o certificado na localização “root” da máquina.

winhttpcertcfg -l -c LOCAL_MACHINE\Root -s MyCertificate

  • O comando abaixo garante acesso da chave privada ao certificado para um determinado usuário:

winhttpcertcfg -g -c LOCAL_MACHINE\My -s MyCertificate -a TESTUSER

No meu caso, eu utilizei esse segundo comando, instalando o certificado em “root” e provendo acesso para “everyone”, sendo assim, ficou algo parecido com:

winhttpcertcfg -g -c LOCAL_MACHINE\Root -s “nome do certificado” -a “Everyone”

Pronto. Isso resolveu meu problema.

O que aconteceu é que eu precisava incluir o certificado digital válido na minha chamada ao web service e o IIS roda com uma conta específica. Aparentemente a mesma não tinha acesso ao certificado e por isso o webservice da secretaria da fazenda não estava confiando na minha chamada, retornando o erro citado.

Artigo original. Obrigado Ray e abraços pessoal.

Expresse sua opinião!

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s