Jump to content
cjulio

Utilizar Webservices da AT

Recommended Posts

jorang
1 minuto atrás, bioshock disse:

 

Um de vós faz-me o favor de disponibilizar a parte do código que utilizam via cURL? Estou a utilizar SOAP e não encontro a possibilidade de passar esse parâmetro.

Em bash:

curl [...] --cacert cacert.pem [...]

Em php:

[...]
curl_setopt($curl, CURLOPT_CAINFO, 'cacert.pem');
[...]

 

Share this post


Link to post
Share on other sites
Sergio.
5 minutos atrás, bioshock disse:

 

Um de vós faz-me o favor de disponibilizar a parte do código que utilizam via cURL? Estou a utilizar SOAP e não encontro a possibilidade de passar esse parâmetro.

Eu utilizo -K, --config <file>

No ficheiro é que coloco os parametros.

Acho que se o ficheiro pem for colocado na pasta /etc/ssl/certs/ (linux) é provável que também funcione

Edited by Sergio.
  • Vote 1

Share this post


Link to post
Share on other sites
bioshock
2 minutes ago, jorang said:

Em bash:


curl [...] --cacert cacert.pem [...]

Em php:


[...]
curl_setopt($curl, CURLOPT_CAINFO, 'cacert.pem');
[...]

 

Isso eu sei, estava a pedir era mesmo a linha de cURL completa para fazer a chamada aos serviços da AT (depois converto para PHP). 

Share this post


Link to post
Share on other sites
Javier Vila

Eu não entendo muito sobre certifcados. Na minha empresa usamos o windows server e uma pequena aplicação em .NET para enviar os dados. Alguém poderia me ajudar, não com a solução, mas você poderia me dar uma idéia do que fazer para dar certo?

Share this post


Link to post
Share on other sites
Nuno Bagulho Marques
4 horas atrás, jorang disse:

O código completo em php que temos:


$curl = curl_init($this->_uri); 

curl_setopt($curl, CURLOPT_FRESH_CONNECT, TRUE);
curl_setopt($curl, CURLOPT_URL, $this->_uri);
curl_setopt($curl, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $xml);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_SSLCERT, $this->_certPath . $this->_certFile);
curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $this->_certPass); 
curl_setopt($curl, CURLOPT_SSLCERTTYPE, 'PEM');

curl_setopt($curl, CURLOPT_SSLKEY, $this->_certPath . $this->_keyFile);
curl_setopt($curl, CURLOPT_SSLKEYPASSWD, $this->_certPass);
curl_setopt($curl, CURLOPT_SSLKEYTYPE, 'PEM');

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);

curl_setopt($curl, CURLOPT_CAINFO, $this->_certPath . 'cacert.pem');

curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);

$response = curl_exec($curl);

 

boas!

agora tenho o erro:

NSS error -5938 (PR_END_OF_FILE_ERROR)

usei o ficheiro .pem, enviado pelas finanças

e obtenho o mesmo erro, quando utilizo o .pem do Sergio.

Alguém tem uma ideia?

Share this post


Link to post
Share on other sites
Nuno Bagulho Marques
2 horas atrás, bioshock disse:

Antes de mais obrigado ao @Sergio. & @jorang pois já consigo comunicar com sucesso!

O meu código final, que pode ajudar outra malta, ficou da seguinte forma:


$xml			= '<?xml version="1.0" encoding="utf-8" standalone="no"?>......';
$url			= 'https://servicos.portaldasfinancas.gov.pt:401/sgdtws/documentosTransporte';
$pemFile 		= 'EmpresaAutora.pem';
$pemFilePass 	= 'Senha do ficheiro EmpresaAutora.pfx';
$pemDGITA		= 'DGITA_Issuing_CA2.pem';

$curl = curl_init($url); 

curl_setopt($curl, CURLOPT_FRESH_CONNECT, TRUE);
curl_setopt($curl, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $xml);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSLCERT, $pemFile);
curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $pemFilePass); 
curl_setopt($curl, CURLOPT_SSLCERTTYPE, 'PEM');
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_CAINFO, $pemDGITA);
curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);

$result = curl_exec($curl);

curl_close($curl);

 

Apesar de ter conseguido comunicar com sucesso num dos servidores, noutro servidor recebi um erro idêntico "string(23) "Encountered end of file" que me parece estar relacionado com o teu. Não sei se tem haver com a versão do cURL ou algo assim, mas o que vou fazer é entrar em contacto com o hosting.

a minha versão do curl é a mais recente. Quais são as versões dos teus servidores?

Share this post


Link to post
Share on other sites
Jose Guerreiro

Ola boa a tarde...

Infelizmente está mesmo complicado :(

Também procuramos alguma ajuda para aplicação em .NET... isto na segunda feira vai ser bonito vai…. :(

Abraço

 

Share this post


Link to post
Share on other sites
Silva Gomes

Olá boa tarde a todos, 

também estou com problemas...

sabem como posso fazer esta alteração no java?

desde já, um obrigado.

Share this post


Link to post
Share on other sites
Nuno Bagulho Marques

A página de testes do portal das finanças continua a dar erro

Share this post


Link to post
Share on other sites
jj87

Olá,

Também estou com problemas para comunicar as guias.

Não estou a ver o que é necessário mudar. 

Como é que dizem:

- O certificado digital " Chave Cifra Publica AT 2020.cer" não é alterado e deve continuar a ser utilizado na função definida no respetivo manual, até novas indicações

Então o que é para mudar? Alguém sabe?

Obrigado

Share this post


Link to post
Share on other sites
bioshock
45 minutes ago, Nuno Bagulho Marques said:

a minha versão do curl é a mais recente. Quais são as versões dos teus servidores?

A minha versão de cURL não é a mais recente, é a 7.29.0, portanto parece que não é um problema de versão. 

Share this post


Link to post
Share on other sites
Nuno Bagulho Marques
4 minutos atrás, bioshock disse:

A minha versão de cURL não é a mais recente, é a 7.29.0, portanto parece que não é um problema de versão. 

A minha versão é a do repositório cityfan (7.65) - com essa, 7.29, nunca consegui que isto funcionasse. Há muita informação dispersa na internet, sobre esse erro.

A mim, o que me parece, é o que o certificado SSL deles, devia conter as Intermediate chains de CA e esta ao problema resolvido.

Edited by Nuno Bagulho Marques
incompleto

Share this post


Link to post
Share on other sites
Nuno Bagulho Marques
5 minutos atrás, jj87 disse:

Olá,

Também estou com problemas para comunicar as guias.

Não estou a ver o que é necessário mudar. 

Como é que dizem:

- O certificado digital " Chave Cifra Publica AT 2020.cer" não é alterado e deve continuar a ser utilizado na função definida no respetivo manual, até novas indicações

Então o que é para mudar? Alguém sabe?

Obrigado

Aparentemente é o ficheiro CA que eles enviaram na 3ª feira

Share this post


Link to post
Share on other sites
bioshock
2 minutes ago, Nuno Bagulho Marques said:

A minha versão é a do repositório cityfan (7.65) - com essa, 7.29, nunca consegui que isto funcionasse. Há muita informação dispersa na internet, sobre esse erro.

Ahhh, mas afinal tens a funcionar na versão mais recente? Percebi mal, sendo assim vou pedir que me actualizem a versão do cURL.

Share this post


Link to post
Share on other sites
Silva Gomes
3 horas atrás, Sergio. disse:

Boa Tarde,

 

Finalmente resolvi o assunto.

Só lamento a falta de suporte/informação por parte da AT

A verdade seja dita que o ficheiro PublicChainCA2.p7b já era enviado juntamente com o pedido de novo certificado, mas também é verdade que nunca o usei até hoje.

Eu trabalho em ambiente Linux e tive que converter para formato PEM (DGITA_Issuing_CA2.pem), Aqui estão as 2 versões

No Curl simplesmente adicionei :

--cacert DGITA_Issuing_CA2.pem

Passou a funcionar.

Olá Sergio, 

ainda continuo com problemas... :(

tens ideia como alterar em java? 

Share this post


Link to post
Share on other sites
Sergio.
5 minutos atrás, Silva Gomes disse:

Olá Sergio, 

ainda continuo com problemas... :(

tens ideia como alterar em java? 

Java não é a minha área, mas não costuma ser um ficheiro próprio? tipo *.jks ??

Em ultima instância terás que converter PublicChainCA2.p7b de forma a poderes utilizar em Java.

 

1 hora atrás, Nuno Bagulho Marques disse:

a minha versão do curl é a mais recente. Quais são as versões dos teus servidores?

 

Tenho vários servidores de Linux, a versão mais antiga e testada de Curl  é:

curl 7.19.7 (i686-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8j zlib/1.2.3 libidn/1.10

 

Share this post


Link to post
Share on other sites
CrominhO
12 minutos atrás, Nuno Bagulho Marques disse:

Aparentemente é o ficheiro CA que eles enviaram na 3ª feira

Eles na terça não enviaram nada, foi só o mail 😕 recebeste algum ficheiro na terça?

 


As mentes humanas são realmente um local estranho!

Share this post


Link to post
Share on other sites
Sergio.
4 minutos atrás, Nuno Bagulho Marques disse:

Desculpa,

Foi ontem à tarde, que anexaram este ficheiro a um email, com tom de "esclarecimento"

https://drive.google.com/file/d/12MRNnw2LEOjPw4p-5KkdvsIxsRER-MTg/view?usp=sharing

Esse ficheiro adiciona um certificado aos 2 que eu postei.

Aliás é a nova versão do que expirou, apesar de consegui comunicar sem ele (já assim era)...mas vou analisar.

Só não entendo porque isso não foi enviado junto com o comunicado.....enfim.
 

  • Vote 2

Share this post


Link to post
Share on other sites
Nuno Bagulho Marques
1 minuto atrás, Sergio. disse:

Esse ficheiro adiciona um certificado aos 2 que eu postei.

Aliás é a nova versão do que expirou, apesar de consegui comunicar sem ele (já assim era)...mas vou analisar.

Só não entendo porque isso não foi enviado junto com o comunicado.....enfim.
 

Caro Sérgio,

isto é só para passar-mos um fim de semana em agonia. Bastava que eles juntassem essa cadeia ao certificado deles. Nem para a própria ferramenta de tests, têm uma solução a funcionar. 

Share this post


Link to post
Share on other sites
CrominhO
23 minutos atrás, Sergio. disse:

Esse ficheiro adiciona um certificado aos 2 que eu postei.

(...)

Como Adicionaste Sérgio? 

Ontem (hoje de madrugada) tentei mandar o crt directo no pedido, nada. Tentei extrair a Publica do Crt para assinar o CA, nada. Cheguei a assinar a Nonce essa publica em vez de ser com a publica da AT e nada também 😕 

Basicamente os ficheiros têm 3 chaves, uma do Root, outra da assinatura e outra de ligação ao CA 😕 

Como é que "adicionaste" os ficheiros de ontem à cadeia (PublicChainCA2.p7b) ??? podes meter o comando por favor? 

É que se metermos a funcionar mas não percebermos o que está acontecer é mau porque pode parar outra vez 😕 

 

  • Vote 1

As mentes humanas são realmente um local estranho!

Share this post


Link to post
Share on other sites
Sergio.
22 minutos atrás, CrominhO disse:

Como Adicionaste Sérgio? 

Ontem (hoje de madrugada) tentei mandar o crt directo no pedido, nada. Tentei extrair a Publica do Crt para assinar o CA, nada. Cheguei a assinar a Nonce essa publica em vez de ser com a publica da AT e nada também 😕 

Basicamente os ficheiros têm 3 chaves, uma do Root, outra da assinatura e outra de ligação ao CA 😕 

Como é que "adicionaste" os ficheiros de ontem à cadeia (PublicChainCA2.p7b) ??? podes meter o comando por favor? 

É que se metermos a funcionar mas não percebermos o que está acontecer é mau porque pode parar outra vez 😕 

 

Não me fiz explicar, este novo ficheiro tem:

oQdNvr7.png

O que eu publiquei não tem *.portaldasfinancas.gov.pt  no entanto mesmo sem este, estou a conseguir comunicar sem problemas.

A conversão de *.p7b para *.pem foi com o aplicativo XCA

Espero ter esclarecido.

Editando:

Esta é a nova versão, já emitida pela Sectigo e com algumas validades diferentes.

Edited by Sergio.

Share this post


Link to post
Share on other sites
Smig

Estou em java e pelo que percebo, isto devia resolver-se importando o certificado que enviaram no mail para a truststore do jre (jre\lib\security\cacerts) com o comando keytool, ou apontar para uma truststore específica no código (System.setProperty("javax.net.ssl.trustStore", "certPath")), mas não tive sucesso com nenhuma das duas alternativas. Recebo de volta sempre o seguinte:

Citação

com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
Caused by: java.io.EOFException: SSL peer shut down incorrectly

Tentei usar pfx e jks, mas é igual. Verifiquei que os certificados são abertos corretamente no java com o uso de java.security.KeyStore.

Alguém em java avançou mais?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.