Árvore de páginas

Existem Web Services exigem conexão segura para se acessar (SSL), exigindo certificados de uma autoridade certificadora (CA). Alguns WS exigem ainda certificados de cliente e chaves privadas(normalmente com senha), para poder identificar quem é o cliente.

Para os casos onde são necessários esses certificados de CA e cliente, são utilizados arquivos PFX, que são pacotes que instalam esses arquivos no sistema. Esses arquivos foram criados originalmente no sistema Windows e após a instalação ficam armazenados no repositório central de certificados do Windows. Ao utilizar as chamadas padrão do Windows para a conexão SSL, o sistema verifica em seu repositório toda a dependência de certificados necessários e os utiliza para efetuar a conexão.

O Totvs Application Server, por ser multiplataforma, utiliza uma biblioteca de conexão SSL chamada OpenSSL, que exige que seja informado no momento da conexão todos os arquivos de certificados que serão utilizados. Para utilizar os arquivos PFX com a classe AdvPL TWsdlManager, que também utiliza a OpenSSL, é necessário extrair do PFX os arquivos de certificado e chave utilizando por exemplo as funções AdvPL PFXCA2PEM, PFXCert2PEM e PFXKey2PEM.

Normalmente o PFX contém no certificado de CA apenas a cadeia de certificados mais necessária, pois conta com o comportamento do Windows, que procurará no repositório os certificados que faltarem. Nesse caso, após feito a extração dos arquivos de certificado e chave do PFX, a conexão feita pela TWsdlManager não é realizada, devido a falta de certificados na cadeia de certificados de CA.

Para resolver esse problema é necessário criar um novo arquivo de certificado de CA através do procedimento abaixo descrito, realizado em máquina Windows e criado em conjunto com Marylly Araujo Silva.

  • Acesse o endereço do WS pelo navegador e acesse a opção para visualização do Certificado Digital:

(Google Chrome)

(Internet Explorer)

  • Clique na aba "Detalhes" e clique em "Copiar para Arquivo...":

  • Em seguida, clique em "Avançar", selecione o formato "X.509 codificado na base 64 (*.cer)" e clique em "Avançar" novamente:

  • Defina o caminho e o nome do arquivo de certificado (.CER) que será gerado na exportação e clique em "Avançar" e em seguida "Concluir":

  • Ao concluir a exportação do certificado, será necessário exportar as três Autoridades Certificadoras. Para isso acesse a aba "Caminho de Certificação" nas informações do certificado:

  • Para cada uma das Autoridades Certificadoras (nesse caso, Autoridade Certificadora Raiz Brasileira v2, Autoridade Certificadora SERPRO v3 e Autoridade Certificadora do SERPRO Final v4), selecione a mesma, clique em "Exibir Certificado" e siga as etapas para a exportação do arquivo .CER:

(Autoridade Certificadora Raiz Brasileira v2)

(Autoridade Certificadora SERPRO v3)

(Autoridade Certificadora do SERPRO Final v4)

  • Após exportar os quatro arquivos, crie um novo arquivo de texto em branco e abra-o:

  • Em seguida, abra cada arquivo exportado com um editor de textos e copie os dados para o novo arquivo de texto. ATENÇÂO: A cópia dos dados para o novo arquivo deve ser feita na ordem correta. A ordem a ser seguida é a ordem inversa da apresentada nas informações do certificado:

Nesse caso, o primeiro arquivo a ser copiado é o Certificado em si, seguido da Autoridade Certificadora do SERPO Final v4, Autoridade Certificadora SERPRO v3 e por último a Autoridade Certificadora Raiz Brasileira v2:

(1 – Certificado)

(2 – Autoridade Certificadora do SERPO Final v4)

(3 – Autoridade Certificadora SERPRO v3)

(4 - Autoridade Certificadora Raiz Brasileira v2)

  • Após copiar os dados dos quatro arquivos exportados para o novo arquivo criado, salve o novo arquivo e altere sua extensão para ".PEM":

  • Coloque o arquivo na pasta do Protheus, juntamente com os demais criados (de chave e certificado de cliente):

  • Coloque nas propriedades da TWsdlManager o caminho dos arquivos que serão utilizados:
Exemplo de uso da TWsdlManager
user function tstwsdl()
  Local cURL := "https://myurl"
  Local oWsdl
  
  oWsdl := TwsdlManager():New()
  
  oWsdl:cSSLCACertFile := "\CA.pem"
  oWsdl:cSSLCertFile   := "\certif_cert.pem"
  oWsdl:cSSLKeyFile    := "\certif_key.pem"
  oWsdl:cSSLKeyPwd     := "password" //se necessário
  
  if oWsdl:ParseURL( cURL ) == .F.
    conout( "Erro: " + oWsdl:cError )
  else
    conout( "Sucesso" )
  endif
return

Caso esse procedimento não resolva o problema de conexão SSL, o que provavelmente está acontecendo é que o navegador não está exibindo todos os certificados necessários à conexão. Para resolver esse problema verifique o artigo sobre erro de conexão SSL.

Veja também

  • Sem rótulos