Jump to content
cjulio

Utilizar Webservices da AT

Recommended Posts

m_s_f_@hotmail.com
15 hours ago, jmsimoes said:

Consegui ultrapassar o erro "Nonce: Cifra da chave pública inválida". Como já tinha este problema antes do certificado novo, é possível que só se aplique ao meu caso, mas de qualquer maneira fica aqui a (minha) solução.

Vi o código do marcolopes (https://github.com/marcolopes/dma/) e percebi que ele está a usar PKCS#1 padding na encriptação RSA com a chave pública da AT. Eu não estava. Alterei isso e deixei de receber o erro infame. Deixo aquilo um exemplo em nodeJS:


export const rsaEncrypt64 = ( key, byteBuffer) => {
  let encryptBuff = crypto.publicEncrypt(
    { 
		key, 
		padding: crypto.constants.RSA_PKCS1_PADDING // <- resolveu o problema
	},
    byteBuffer
  );
  return encryptBuff.toString('base64');
};

Esou a usar ES6. crypto é a package crypto default do node pre-packaged, key é o certificado antigo da AT que leio do disco (plaintext, utf8), e byteBuffer é a chave simétrica (16byte).

Sobre a chave nova (isto é atirar barro à parede, pode estar 100% errado) : Será que eles alteraram o padding das mensagens com a chave nova em relação à antiga? Poderá ser a causa do erro. Não experimentei com a nova.

Espero que ajude alguém. Força aí.

Ajudou sim jmsimoes!
Foi só alterar uma santa linha de código!
Semanas a dar com a picareta por uma coisa tão simples.
obrigadíssimo!
 

public static byte[] cypherRequestKey(PublicKey publicKey, byte[] requestKey) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
        //Cipher cipher = Cipher.getInstance(RSAConfiguration.CIPHER_ALGORITHM.getValue());bad boy!
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        return cipher.doFinal(requestKey);
}

Esta função está no ficheiro WSAutenticaTestCypherUtil.java, do projeto fornecido por eles.

  • Vote 2

Share this post


Link to post
Share on other sites
nunopicado

Coloquei a questão do não funcionamento da nova chave no e-Balcão.

Talvez não fosse pior que quem estiver a experienciar o mesmo problema faça o mesmo. Se lá aparecerem muitos pedidos para a mesma coisa, talvez a urgência em resolver apareça.

  • Vote 2

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
pnnr
55 minutos atrás, nunopicado disse:

Coloquei a questão do não funcionamento da nova chave no e-Balcão.

Talvez não fosse pior que quem estiver a experienciar o mesmo problema faça o mesmo. Se lá aparecerem muitos pedidos para a mesma coisa, talvez a urgência em resolver apareça.

Acabei de fazer o mesmo, vamos ver a resposta. Percebo que a alteração acima funcione mas já noutras situações tivemos pessoal a fazer alterações para que a coisa funcionasse, que depois tiveram que ser revertidas porque a AT resolveu o assunto do "lado deles".

  • Vote 1

Share this post


Link to post
Share on other sites
nunopicado
41 minutos atrás, pnnr disse:

Acabei de fazer o mesmo, vamos ver a resposta. Percebo que a alteração acima funcione mas já noutras situações tivemos pessoal a fazer alterações para que a coisa funcionasse, que depois tiveram que ser revertidas porque a AT resolveu o assunto do "lado deles".

 

7 minutos atrás, albertosilva disse:

Também acabámos de colocar a questão no e-Balcão.

Creio que as mensagens acima que sugerem utilizar o PKCS1 para resolver um problema com a mesma mensagem dizem em ambos os casos respeito a casos que não conseguiam comunicar com o certificado anterior (ChaveCifraPublicaAT2020.cer), e não foram testados com o certificado novo (ChaveCifraPublicaAT2023.cer). É o que interpreto da mensagem do @jmsimoes, e assumo que do m_s_f_

 

Exacto, pelo que percebi as mensagens acima do 'já dá' têm a ver com a versão atualmente em vigor, e não com a nova.

  • Vote 2

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
jmsimoes

 

5 hours ago, nunopicado said:

Coloquei a questão do não funcionamento da nova chave no e-Balcão.

Talvez não fosse pior que quem estiver a experienciar o mesmo problema faça o mesmo. Se lá aparecerem muitos pedidos para a mesma coisa, talvez a urgência em resolver apareça.

Também fiz um pedido no dia 29 e ainda não responderam. Dei toda a informação que consegui, e pedi para "não me encaminharem para o manual, já que estava a seguir os passos à letra" 😄Vamos ver. A documentação e suporte da AT são tão más que até apetece fazer uma petição ou algo no género. Qualquer coisa para os chatear, em massa, e forçá-los a melhorar o serviço, a documentação e o suporte.

 

Entretanto, tenho outro problema para ultrapassar: 

{
	codigo: -10, 
	mensagem:  "Erro no preenchimento dos dados da declaração: javax.xml.bind.UnmarshalException - with linked exception [org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file.]"
}

Ora, eu estou a codificar as declarações periódicas de IVA (XML, geradas pelo primavera, não tenho controlo sobre esta exportação) directamente de UTF8 para base64, e recebo este erro. Dá ideia que o XML codificado não chega, ou não é descodificado correctamente pelo servidor. No entanto, já confirmei que o SOAP está bem formado. Excerto do meu pedido SOAP, com a declaração:

<soap:Body>
    <tns:submeterDeclaracaoPeriodicaIVARequest>
      <versaoDeclaracao>
        2016
      </versaoDeclaracao>
      <declaracao>
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGRwaXZhIHhtbG5zPSJodHRwOi8vd3d3LmF0Lmdvdi5wdC9zY2hlbWFzL2RwaXZhIiB4bWxuczpjcj0idXJuOmNyeXN0YWwtcmVwb3J0czpzY2hlbWFzOnJlcG9ydC1kZXRhaWwiIHhtbG5zOmZuPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzAyL3hwYXRoLWZ1bmN0aW9ucyIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIwNSI+Cgk8cm9zdG8+CgkJPGFwdXJhbWVudG8+CgkJCTx0ZW1PcGVyYWNvZXNEZWR1dGl2ZWlzPk48L3RlbU9wZXJhY29lc0RlZHV0aXZlaXM+CgkJPC9hcHVyYW1lbnRvPgoJCTxkZXNlbnZvbHZpbWVudG8vPgoJCTxpbmljaW8+CgkJCTxhbm9EZWNsYXJhY2FvPjIwMjA8L2Fub0RlY2xhcmFjYW8+CgkJCTxhcHJlc2VudG91RGVjbFJlY2FwaXR1bGF0aXZhPmZhbHNlPC9hcHJlc2VudG91RGVjbFJlY2FwaXR1bGF0aXZhPgoJCQk8YXRpdmlkYWRlc0ltb2JpbGlhcmlhcz5mYWxzZTwvYXRpdmlkYWRlc0ltb2JpbGlhcmlhcz4KCQkJPGxvY2FsaXphY2FvU2VkZT4xPC9sb2NhbGl6YWNhb1NlZGU+CgkJCTxuaWY+WFhYWFhYWFhYPC9uaWY+CgkJCTxuaWZDQz5ZWVlZWVlZWVk8L25pZkNDPgoJCQk8cGVyaW9kb0RlY2xhcmFjYW8+MDUgPC9wZXJpb2RvRGVjbGFyYWNhbz4KCQkJPHByYXpvPjE8L3ByYXpvPgoJCQk8c2VtT3BlcmFjb2VzPnRydWU8L3NlbU9wZXJhY29lcz4KCQkJPHRlbUFuZXhvUkFjb3Jlcz5mYWxzZTwvdGVtQW5leG9SQWNvcmVzPgoJCQk8dGVtQW5leG9SQ29udGluZW50ZT5mYWxzZTwvdGVtQW5leG9SQ29udGluZW50ZT4KCQkJPHRlbUFuZXhvUk1hZGVpcmE+ZmFsc2U8L3RlbUFuZXhvUk1hZGVpcmE+CgkJPC9pbmljaW8+Cgk8L3Jvc3RvPgo8L2RwaXZhPg==
      </declaracao>
    </tns:submeterDeclaracaoPeriodicaIVARequest>
  </soap:Body>

Ignorem o whitespace. Este xml passou por um formatter, o pedido real não tem newlines nem espaços nos campos. 

Exemplo do formato das declarações que tenho: 

<?xml version="1.0" encoding="UTF-8"?>
<dpiva xmlns="http://www.at.gov.pt/schemas/dpiva" xmlns:cr="urn:crystal-reports:schemas:report-detail" xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="05">
	<rosto>
		<apuramento>
			<temOperacoesDedutiveis>N</temOperacoesDedutiveis>
		</apuramento>
		<desenvolvimento/>
		<inicio>
			<anoDeclaracao>2020</anoDeclaracao>
			<apresentouDeclRecapitulativa>false</apresentouDeclRecapitulativa>
			<atividadesImobiliarias>false</atividadesImobiliarias>
			<localizacaoSede>1</localizacaoSede>
			<nif>XXXXXXXXX</nif>
			<nifCC>YYYYYYYYY</nifCC>
			<periodoDeclaracao>05</periodoDeclaracao>
			<prazo>1</prazo>
			<semOperacoes>true</semOperacoes>
			<temAnexoRAcores>false</temAnexoRAcores>
			<temAnexoRContinente>false</temAnexoRContinente>
			<temAnexoRMadeira>false</temAnexoRMadeira>
		</inicio>
	</rosto>
</dpiva>

Qualquer ajuda é bem vinda

Edited by jmsimoes

Share this post


Link to post
Share on other sites
kalin

Parece que vamos ter novos vertificados a partir do dia 6 em produção

Share this post


Link to post
Share on other sites
chesser
Agora, kalin disse:

Parece que vamos ter novos vertificados a partir do dia 6 em produção

"Cheira-me" que segunda-feira vamos ter problemas!

  • Vote 1

Share this post


Link to post
Share on other sites
Bruno Barbosa

boas tardes

entao mas nao era dia 23 que expirava?
nao estou muito por dentro, mas na documentacao 401 está documentado como distribuição/Produção?
https://servicos.portaldasfinancas.gov.pt/sgdtws/documentosTransporte/ no "meu" projecto tenho este endereço que assumi que fosse a porta 80

estamos todos em apuros? como converter e actualizar dezenas de clientes numa manhã?

 
 

Share this post


Link to post
Share on other sites
Solskajer
Citação

O certificado digital de SSL do sítio servicos.portaldasfinancas.gov.pt (portos 4XX,5XX) irá expirar brevemente e, por isso, irá ser alterado no próximo dia 6 de Julho, durante a manhã.

Esta alteração implica a substituição do certificado digital de SSL e respetiva cadeia de certificação.

Recomendamos que testem os vossos produtos para que não haja problemas na comunicação para a AT por parte dos operadores económicos vossos clientes, designadamente, na invocação dos serviços referentes a Documentos de Transporte, Faturas, Declarações de IRC, Contratos de Arrendamento, ICS, ECS, SICEX, SICEU.
 
Para tal, a AT alterou hoje certificado SSL nos portos de testes (7XX, 8XX) para que cada produtor de software possa testar a continuidade do funcionamento dos seus produtos, contendo já estes endereços o novo certificado SSL.

Recomendamos que se valide a cadeia de certificação, conforme o exemplo indicado no “Código Fonte da aplicação em Java Applet”, o qual pode ser obtido através da ligação:
https://faturas.portaldasfinancas.gov.pt/testarLigacaoWebService.action

O ficheiro agora enviado contém no seu interior as chaves públicas do novo certificado digital SSL e as chaves públicas da cadeia de certificação, no formato “.p7b” e formato “.pem”. Estas chaves públicas são apenas utilizadas no estabelecimento da ligação SSL entre os sistemas dos clientes dos WebServices e a AT.

Os pedidos de esclarecimento deverão ser colocados ao e-balcão através do site do portal das finanças.

 
Na esperança de poder contribuir para o seu esclarecimento, enviamos-lhes os melhores cumprimentos,

ASI - Área de Segurança Informática
Av. Eng. Duarte Pacheco, nº 28 - 8º - 1099-013 Lisboa
Geral: (+351) 213 834 200 - Fax: (+351) 213 834 974
CAT - Centro de atendimento telefónico - (+351) 217 206 707
E-mail: asi@at.gov.pt Visite-nos em www.portaldasfinancas.gov.pt

 

Este vem sempre no verão para assustar a malta que está de férias. Normalmente não se precisa de fazer nada do "nosso" lado, não me lembro de qualquer intervenção necessária devido a este p7b/pem que é renovado anualmente.

Edited by Solskajer
formatação
  • Vote 1

Share this post


Link to post
Share on other sites
albertosilva
2 minutos atrás, Solskajer disse:

Este vem sempre no verão para assustar a malta que está de férias. Normalmente não se precisa de fazer nada do "nosso" lado, não me lembro de qualquer intervenção necessária devido a este p7b/pem que é renovado anualmente.

Atenção, isso depende se validam do lado do cliente que estão a "falar" com os servidores legítimos ou não. Só os que optam por descartar essa validação é que costumam ficar imunes.

Share this post


Link to post
Share on other sites
jorang
6 minutos atrás, Bruno Barbosa disse:

boas tardes

entao mas nao era dia 23 que expirava?
nao estou muito por dentro, mas na documentacao 401 está documentado como distribuição/Produção?
https://servicos.portaldasfinancas.gov.pt/sgdtws/documentosTransporte/ no "meu" projecto tenho este endereço que assumi que fosse a porta 80

estamos todos em apuros? como converter e actualizar dezenas de clientes numa manhã?

 
 

O certificado que expira no próximo dia 23 é o ChavePublicaAT2020.cer, utilizado para cifrar a informação enviada.
Já o email de hoje diz respeito ao certificado SSL usado pelos servidores da AT.

Share this post


Link to post
Share on other sites
Solskajer
3 minutos atrás, albertosilva disse:

Atenção, isso depende se validam do lado do cliente que estão a "falar" com os servidores legítimos ou não. Só os que optam por descartar essa validação é que costumam ficar imunes.

Exatamente!

Share this post


Link to post
Share on other sites
nunopicado
14 minutos atrás, chesser disse:

"Cheira-me" que segunda-feira vamos ter problemas!

Segunda feira vou de férias...
Algo me diz que vou ter de desligar o telefone.

 

7 minutos atrás, Bruno Barbosa disse:

boas tardes

entao mas nao era dia 23 que expirava?
nao estou muito por dentro, mas na documentacao 401 está documentado como distribuição/Produção?
https://servicos.portaldasfinancas.gov.pt/sgdtws/documentosTransporte/ no "meu" projecto tenho este endereço que assumi que fosse a porta 80

estamos todos em apuros? como converter e actualizar dezenas de clientes numa manhã?

A Chave Pública expira a 23 de Julho. O certificado de validação de cadeia expira pelos vistos a dia 6.

É uma alegria...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
eandrade
18 minutes ago, Solskajer said:

Este vem sempre no verão para assustar a malta que está de férias. Normalmente não se precisa de fazer nada do "nosso" lado, não me lembro de qualquer intervenção necessária devido a este p7b/pem que é renovado anualmente.

Passei por aqui só para atestar isto. Só têm que se preocupar com este certificado se nos vossos clientes validarem o certificado digital do serviço, ou seja, não tem nada que ver com os certificados usados para criar as credenciais de acesso de cada pedido. Se não estão a validar isso, não têm que se preocupar com esta alteração (mas deviam preocupar-se com os vossos clientes estarem mais vulneráveis a ataques MITM :P É boa prática validar este certificado)

Edited by eandrade

Share this post


Link to post
Share on other sites
Cu5co
17 minutos atrás, Solskajer disse:

Este vem sempre no verão para assustar a malta que está de férias. Normalmente não se precisa de fazer nada do "nosso" lado, não me lembro de qualquer intervenção necessária devido a este p7b/pem que é renovado anualmente.

Sim, correto, não é preciso fazer nada da nossa parte.

Share this post


Link to post
Share on other sites
oalves

A AT enviou os novos certificados, que vão atualizar dia 6.
Enviaram o ficheiro em ZIP com password, mas não deram a password... Alguém sabe onde posso encontrar?

Share this post


Link to post
Share on other sites
Cu5co
16 minutos atrás, albertosilva disse:

Atenção, isso depende se validam do lado do cliente que estão a "falar" com os servidores legítimos ou não. Só os que optam por descartar essa validação é que costumam ficar imunes.

Igualmente correto.

Share this post


Link to post
Share on other sites
jorang
3 minutos atrás, oalves disse:

A AT enviou os novos certificados, que vão atualizar dia 6.
Enviaram o ficheiro em ZIP com password, mas não deram a password... Alguém sabe onde posso encontrar?

Não disseram mas, depois de algumas tentativas, a password é: portal2020

  • Vote 2

Share this post


Link to post
Share on other sites
Cu5co
28 minutos atrás, oalves disse:

A AT enviou os novos certificados, que vão atualizar dia 6.
Enviaram o ficheiro em ZIP com password, mas não deram a password... Alguém sabe onde posso encontrar?

Espetacular. Grandes palhaços.

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.