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.

(Google Chrome)

(Internet Explorer)

(Autoridade Certificadora Raiz Brasileira v2)

(Autoridade Certificadora SERPRO v3)

(Autoridade Certificadora do SERPRO Final v4)

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)

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