Jump to content

rmpt

Member
  • Posts

    44
  • Joined

  • Last visited

rmpt's Achievements

boolean user

boolean user (2/5)

  • 1 Year

Recent Badges

2

Reputation

  1. Boas, este post está parado há algum tempo, mas deixo na mesma o link para uma nova versão da solução que tinha partilhado há uns tempos. É um servidor HTTP que permite ler os dados do cartão de cidadão a partir de qualquer cliente http (browser ou outro cliente), funciona em qualquer sistema operativo e apenas requer ter o java instalado. A quem interessar, pode dar uma olhada aqui: https://github.com/rmpt/citizen-card-reader
  2. Olá, se ainda for a tempo, experimenta esta: https://github.com/rmpt/citizen-card-reader/releases Faz exatamente o que descreveste.
  3. Boas, este post está parado há algum tempo, mas deixo na mesma o link para uma nova versão da solução que tinha partilhado há uns tempo. É um servidor HTTP que permite ler os dados do cartão de cidadão a partir de qualquer cliente http (browser ou outro cliente), funciona em qualquer sistema operativo e apenas requer ter o java instalado. A quem interessar, pode dar uma olhada aqui: https://github.com/rmpt/citizen-card-reader
  4. Boas, este post está parado há algum tempo, mas deixo na mesma o link para uma nova versão da solução que tinha partilhado há uns tempo. É um servidor HTTP que permite ler os dados do cartão de cidadão a partir de qualquer cliente http (browser ou outro cliente), funciona em qualquer sistema operativo e apenas requer ter o java instalado. A quem interessar, pode dar uma olhada aqui: https://github.com/rmpt/citizen-card-reader
  5. Boas, Alguém sabe como deve ser exportado o SAF-T, e se tal é possível, para esta nova funcionalidade no portal e-fatura?
  6. Qual o formato da data para a versão 1 de comunicação das séries? No PDF do manual de integração indica que o formato é: 2013-01-01T19:20:30.45Z. No entanto quando testamos no portal das finanças (v2) o formato apresentado é 013-01-01T19:20:30.450Z. Alguém que tenha isto a funcionar me diga por favor. Continuo sem conseguir registar séries apesar do formato do ficheiro, cifras e geração de chaves estar identica a de outros utilizadores que estão a conseguir registar.
  7. No e-fatura, quando testamos o webservice de registo de series, a password tem o seguinte formato: <wss:Password Digest="Up6d6fFJhhbZvY9VAzSsCh12HFknYquQVbqyw8OeVDg=&#10;">+EOz+3TzaehpDyUhRZ0bkA== </wss:Password> Alguém sabe se o digest é obrigatório? Se sim, como se obtem? Na documentação não refere nada...
  8. Continuo com o erro na autenticação, e continuo sem perceber o que se passa. A nível de formato do request, já validei e revalidei e está tudo ok. Relógio sincronizado com o observatório, Created no formato certo, tudo de acordo com o formato dos requests dos testes no portal das finanças. A única siutação que me ocorre é ter algo errado nas funções de cifra/encriptação. Vou deixar as minhas funções em kotlin/java, se alguém implementou isto em java ou kotlin e tem a funcionar, por favor confirme se está de acordo ou se estou a fazer algo de errado. carregar chave pública para cifrar a chave simétrica private fun loadATCUDPublicKey(): Certificate { val certFactory = CertificateFactory.getInstance("X.509") val classPathFile = ClassPathResource(certificatePath) val certs = certFactory.generateCertificates(classPathFile.inputStream) return certs.first() } criar nonce val aesKeygen = KeyGenerator.getInstance("AES") aesKeyGen.init(128) val secretKey = aesKeyGen.generateKey() rsaCipher.init(Cipher.ENCRYPT_MODE, publicCertificate) // publicCertificate = chave publica carregada em loadATCUDPublicKey val encryptedSecretKey = rsaCipher.doFinal(secretKey.encoded) return secretKey to encodeBase64String(encryptedSecretKey) cifrar password e data fun encrypt(content: String, key: SecretKey): String { val aesCipher = Cipher.getInstance("AES/ECB/PKCS5Padding") aesCipher.init(Cipher.ENCRYPT_MODE, key) // key = SecretKey criada no nonce return encodeBase64String(aesCipher.doFinal(content.toByteArray(Charsets.UTF_8))) } NOTAS: ao criar o nonce, já tentei também usar a publicKey do publicCertificate, mas o resultado é o mesmo. rsaCipher.init(Cipher.ENCRYPT_MODE, publicCertificate.publicKey) algum código foi alterado/simplificado para colocar aqui, mas a base que está a ser utilizada é esta a nível de algoritmos e relação entre chaves/cifras Se alguém conseguir dar uma ajuda ficaria muito agradecido.
  9. testei a ligação na página do portal das finanças e só funciona se não colocar o "/1" no final do NIF. Ou seja, colocando o NIF do produtor sem qualquer subutilizador funciona. O que não faz grande sentido pois o subutilizador existe e no manual indica que a autenticação deve ser feita através do subutilizador.
  10. estás a testar diretamente em produção?! Carregaste corretamente o certificado digital para o request? Eu estava a ter um SslHandshakeException e tinha a ver com o carregamento/configuração do certificado digital do cliente
  11. A data tem de estar encriptada. Pode ser esse o problema.
  12. Segundo o manual... E acabei de testar exatamente o request que enviaste e não funcionou, continuo a receber o erro: <?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header/> <env:Body> <env:Fault> <faultcode>1110</faultcode> <faultstring>Erro de Autentica&#231;&#227;o/Autoriza&#231;&#227;o - Pedido do Cliente </faultstring> <detail> <transactionID>0000000:5c457ae96313d56b047bff94</transactionID> <timestamp>2022-09-03 22:30:03.000+00:00</timestamp> </detail> </env:Fault> </env:Body> </env:Envelope> Só para confirmar que não estou a utilizar algo de forma errada. Dos certificados de teste que a AT envia por email: TesteWebservices.pfx serve para autenticação nos requests http ChaveCifraPublicaAT2023.cer serve para encriptar o nonce no SOAP certo?!
  13. Tenho progressos e vou deixar aqui as notas para alguém que possa passar pelas mesmas situações. 2 aspectos: 1. No pedido SOAP, o conteúdo da acção não pode ter prefixos, isto é, o meu pedido estava a ser feito assim: <?xml version="1.0" encoding="utf-8"?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Header> .... </S:Header> <S:Body> <at:registarSerie xmlns:at="http://at.gov.pt/"> <at:serie>2022.FS</at:serie> <at:tipoSerie>N</at:tipoSerie> <at:classeDoc>SI</at:classeDoc> <at:tipoDoc>FS</at:tipoDoc> <at:numInicialSeq>1</at:numInicialSeq> <at:dataInicioPrevUtiliz>2022-09-02</at:dataInicioPrevUtiliz> <at:numCertSWFatur>****</at:numCertSWFatur> <at:meioProcessamento>PI</at:meioProcessamento> </at:registarSerie> </S:Body> </S:Envelope> Mas tem de ser feito assim, sem o prefixo "at:" do namespace dentro do registarSerie: <?xml version="1.0" encoding="utf-8"?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Header> .... </S:Header> <S:Body> <at:registarSerie xmlns:at="http://at.gov.pt/"> <serie>2022.FS</serie> <tipoSerie>N</tipoSerie> <classeDoc>SI</classeDoc> <tipoDoc>FS</tipoDoc> <numInicialSeq>1</numInicialSeq> <dataInicioPrevUtiliz>2022-09-02</dataInicioPrevUtiliz> <numCertSWFatur>****</numCertSWFatur> <meioProcessamento>PI</meioProcessamento> </at:registarSerie> </S:Body> </S:Envelope> 2. A versão do TLS a usar tem de ser TLSv1.2. Eu estava a usar 1.3 mas não funciona e vai dar o tal erro SSLHandshake que estava a ter. Com TLS 1.2 a coisa já funciona. Agora estou a obter outro erro mas desta vez que tem a ver com autenticação 😅 <?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header/> <env:Body> <env:Fault> <faultcode>1051</faultcode> <faultstring>Erro de Autentica&#231;&#227;o/Autoriza&#231;&#227;o - Pedido do Cliente </faultstring> <detail> <transactionID>0000000:5c457ae963134b48045428b4</transactionID> <timestamp>2022-09-03 12:40:40.000+00:00</timestamp> </detail> </env:Fault> </env:Body> </env:Envelope> Mais uma sessão...
  14. De facto a minha DataInicioPrevUtiliz estava errada, bem apanhado, obrigado. A password, de acordo com um exemplo que a AT me enviou, a forma como estou a enviar está correta. Sobre a data, de certeza que isso está a funcionar sem a data encriptada? Do documento de especificação:
  15. Tenho algum progresso. Mudei o meu http client para Apache, já que há muito mais documentação, e apesar da solução ser semelhante à solução do ktor, o pedido já passa da camada de transporte! No entanto agora tenho um erro na minha mensagem SOAP, mas parece-me tudo ok de acordo com um exemplo que a AT me enviou. Pedido: <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Header> <wss:Security xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secex"> <wss:UsernameToken> <wss:Username>*********/1</wss:Username> <wss:Nonce>V//AiWU16oZn9HSYG2G+ra0cUyHyHaemWW/P2yk1Q+vIDM5/WZHUkF5Ot/bS8a8VR5X042JIMDp9+pqdm1A5tDR5LRGQ1q+ds02TqroemIyy8M2wSSBh7FXvF6u2lrNQDthPgbH94uZg13YOT5IZ2ZwJpAZMRP7yvzupVExqMQg7GGCrM1eKLAx26F4Ljvxt3QXkIlDXsAuwJ3ycOgf9lyQvUnciBK2EKMXlT4+MbnDvHrTP5CTSDF+BS7cRTueHUeMSrJiWLYi3kqE6QeWxn9WX+tgLo7uMX7mAsTbGslSi/yVWf3EeoUoYPK6IItBG0LjmN968ahxi4lDSVL6V4w==</wss:Nonce> <wss:Password>BTOOGQaxuSQek708hjp3oQ==</wss:Password> <wss:Created>qNCbfBwYJRzsXNaxuLlI0snAaqJvo7X50RsV6tykzk0=</wss:Created> </wss:UsernameToken> </wss:Security> </S:Header> <S:Body> <at:registarSerie xmlns:at="http://at.gov.pt/"> <at:serie>2022.FS</at:serie> <at:tipoSerie>N</at:tipoSerie> <at:classeDoc>SI</at:classeDoc> <at:tipoDoc>FS</at:tipoDoc> <at:numInicialSeq>1</at:numInicialSeq> <at:dataInicioPrevUtiliz>2022-09-02T12:24:16</at:dataInicioPrevUtiliz> <at:numCertSWFatur>****</at:numCertSWFatur> <at:meioProcessamento>PI</at:meioProcessamento> </at:registarSerie> </S:Body> </S:Envelope> Resposta: <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header/> <env:Body> <env:Fault> <faultcode>env:Client</faultcode> <faultstring>Erro - Pedido do Cliente </faultstring> <detail> <transactionID>0000000:5c457ae96311ea3004d589f0</transactionID> <timestamp>2022-09-02 11:34:08.000+00:00</timestamp> </detail> </env:Fault> </env:Body> </env:Envelope>
×
×
  • 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.