Closed FexaMachado closed 1 year ago
Bom dia,
o pacote Flatpak tem de facto a limitação de que serve como meio de distribuição da aplicação e não do SDK.
Atualmente o que recomendamos aos utilizadores de Linux que pretendam utilizar o SDK é a instalação a partir do código fonte.
Deve sempre garantir que o SDK Java que está a utilizar (pteidlibj.jar) foi originado no mesmo build que as bibliotecas nativas que ficam em /usr/local/lib
.
Para facilitar esta consistência fizemos hoje push de uma alteração (e99942f3ee365b22b883f650997392baf2db8750) para instalar o ficheiro pteidlibj.jar que foi compilado na localização esperada ao executar make install
.
Deve atualizar o repositório e reinstalar em Ubuntu 22, Ubuntu 18 não suportamos porque esta distribuição não tem no repositório as dependências externas nas versões que usamos atualmente.
Bom dia,
Depois de atualizar o repositório e executar os passos de compilação e execução como root, o ficheiro pteidlibj.jar não foi para /usr/local/lib/
.
Independentemente, fui buscá-lo à pasta pteid-mw-pt/_src/eidmw/jar/
e coloquei-o na pasta indicada.
Posteriormente, no momento da utilização da biblioteca ocorreu o mesmo erro que acima indiquei.
pt.gov.cartaodecidadao.PTEID_Exception at pt.gov.cartaodecidadao.pteidlibJava_WrapperJNI.PTEID_Address_getCountryCode(Native Method) at pt.gov.cartaodecidadao.PTEID_Address.getCountryCode(PTEID_Address.java:54)
O pteidlibj.jar é instalado em /usr/local/lib/pteid_jni
tal como indica o manual:
https://amagovpt.github.io/docs.autenticacao.gov/manual_sdk.html#linux
De qualquer forma pode ser carregado de outra localização desde que esteja consistente com as bibliotecas nativas.
Para podermos despistar o que acontece deve ativar o modo debug adicionando estas linhas ao ficheiro $HOME/.config/pteid.conf
:
[logging]
log_level=debug
Depois de voltar a executar a leitura de morada, pedimos para partilhar as últimas linhas do ficheiro de log, que deverá estar em $HOME/.PTEID_0.log
Já encontrei o problema, estava na conecção a morada.cartaodecidadao.pt
do meu lado.
Para concluir, é possível, simplesmente, copiar estes ficheiros .so e colocá-los nas diversas máquinas dos clientes?
Sim, é possível distribuir esses ficheiros .so junto com a aplicação se adicionar a seguinte pasta de certificados /usr/local/share/certs/
e todo o seu conteúdo e o executável /usr/local/bin/pteiddialogsQTsrv
.
Funcionará em máquinas também com Ubuntu 22 desde que tenham instalados os seguintes pacotes dos repositórios:
pcscd libcurl4 libopenjp2-7 libpcsclite1 libpng16-16 libqt5gui5 libqt5widgets5 libssl3 libxerces-c3.2 libxml-security-c20 libzip4
Já estive a experimentar numa VM Ubuntu22 instalar o flatpak e copiar os ficheiros previamente gerados, os *.so, certs e o pteiddialogsQTsrv. No entanto, está-me a dar um erro quando a o SDK tenta usar os certificados.
2023-07-17 17:13:47 - 17342|140154712094272 - applayer - DEBUG: APL_Certifs::foundCertificate: problem with file /usr/local/share/certs/DigicertRoot.der
2023-07-17 17:13:47 - 17342|140154712094272 - applayer - DEBUG: APL_Certifs::foundCertificate: problem with file /usr/local/share/certs/CartaodeCidadao003.der
2023-07-17 17:13:47 - 17342|140154712094272 - applayer - DEBUG: APL_Certifs::foundCertificate: problem with file /usr/local/share/certs/Multicert_Root_01.der
2023-07-17 17:13:47 - 17342|140154712094272 - applayer - DEBUG: APL_Certifs::foundCertificate: problem with file /usr/local/share/certs/BaltimoreCyberTrustRoot.der
2023-07-17 17:13:47 - 17342|140154712094272 - applayer - DEBUG: APL_Certifs::foundCertificate: problem with file /usr/local/share/certs/CartaodeCidadao006.der
2023-07-17 17:13:47 - 17342|140154712094272 - applayer - DEBUG: APL_Certifs::foundCertificate: problem with file /usr/local/share/certs/CartaodeCidadao004.der
2023-07-17 17:13:47 - 17342|140154712094272 - applayer - DEBUG: APL_Certifs::foundCertificate: problem with file /usr/local/share/certs/Usertrust_RSA_Certification_Authority.der
2023-07-17 17:13:47 - 17342|140154712094272 - applayer - DEBUG: APL_Certifs::foundCertificate: problem with file /usr/local/share/certs/ECRaizEstado_MC.der
2023-07-17 17:13:47 - 17342|140154712094272 - applayer - DEBUG: APL_Certifs::foundCertificate: problem with file /usr/local/share/certs/ECRaizEstado002.der
2023-07-17 17:13:47 - 17342|140154712094272 - applayer - DEBUG: APL_Certifs::foundCertificate: problem with file /usr/local/share/certs/CartaodeCidadao005.der
2023-07-17 17:13:47 - 17342|140154712094272 - applayer - DEBUG: APL_Certifs::foundCertificate: problem with file /usr/local/share/certs/GlobalChambersignRoot-2008.der
2023-07-17 17:13:47 - 17342|140154712094272 - applayer - DEBUG: APL_Certifs::foundCertificate: problem with file /usr/local/share/certs/CartaodeCidadao002.der
2023-07-17 17:13:47 - 17342|140154712094272 - applayer - DEBUG: DEBUG: countSODCAs returns 0
2023-07-17 17:13:47 - 17342|140154712094272 - applayer - ERROR: EidFile_Sod:: Error validating SOD signature. OpenSSL errors:
40F6D34F787F0000:error:10800075:PKCS7 routines:PKCS7_verify:certificate verify error:../crypto/pkcs7/pk7_smime.c:293:Verify error: unable to get local issuer certificate
2023-07-17 17:13:47 - 17342|140154712094272 - eidlib - DEBUG: PTEID_Exception generated from CardPteid.cpp:1477 error code: e1d01c08
É necessário fazer mais alguma coisa depois de copiar os certs para a pasta /usr/local/share/certs/
?
Já andei a tentar mexer com o openssl, mas sem sucesso.
Esses erros indicam que uma função do SDK encontrou esses ficheiros mas não os consegue abrir ou ler. Deve verificar se o utilizador tem permissão para ler os ficheiros.
Para corrigir as permissões deve funcionar o comando chmod 644 /usr/local/share/certs/*.der
Já conseguiu ler. Agora dá o seguinte erro depois de pedir o PIN da morada.
2023-07-18 10:27:29 - 3889|140020750673472 - applayer - DEBUG: post_json_remoteaddress called for endpoint_url: https://morada.cartaodecidadao.pt/readaddress/sendDHParams
2023-07-18 10:27:29 - 3889|140020750673472 - applayer - ERROR: RemoteAddress call to /sendDHParams failed! Using proxy: 0 curl error code: 77 curl message: Problem with the SSL CA cert (path? access rights?)
2023-07-18 10:27:29 - 3889|140020750673472 - eidlib - DEBUG: PTEID_Exception generated from RemoteAddressRequest.cpp:76 error code: e1d01d59
Já tentei adicionar o cacerts.pem a /usr/local/share/ca-certificates/
e fazer update-ca-certificates
, mas sem sucesso.
Obrigado pela ajuda.
Deverá ser um problema idêntico no /usr/local/share/certs/cacerts.pem
Também precisa de permissão de leitura que pode ser aplicada com chmod 644 /usr/local/share/certs/cacerts.pem
Já experimentei com essas permissões. Até com chmod 777, mas continua com o mesmo erro.
Para fornecer mais informação, os passos que faço numa nova VM Ubuntu22 são:
apt install flatpak
apt install gnome-software-plugin-flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
reboot
flatpak install pteid-mw-linux.x86_64.flatpak
apt install -y pcscd libcurl4 libcurl4-nss-dev libopenjp2-7 libpcsclite1 libpng16-16 libqt5gui5 libqt5widgets5 libssl3 libxerces-c3.2 libxml-security-c20 libzip4
systemctl enable pcscd.socket
systemctl enable pcscd
# usando os ficheiros que copiei de outra máquina aonde instalei a partir do repositório e a minha aplicação funcionou
cp -r ./usr_local_bin/* /usr/local/bin/ # pteiddialogsQTsrv
cp -r ./usr_local_lib/* /usr/local/lib/ # ficheiros .so
# crio os symlinks
ln -s /usr/local/lib/libCMDServices.so.1.0.0 /usr/local/lib/libCMDServices.so
...
chmod +rx /usr/local/lib/*
ldconfig
mkdir -p /usr/local/share/certs && cp -r ./usr_local_share_certs/* /usr/local/share/certs/ # certs
chmod 644 /usr/local/share/certs/*
reboot
Adicionei o pacote libcurl4-nss-dev ao apt install, porque me dá erro ao carregar as bibliotecas sem ele. E verifico que continua com o mesmo erro que mencionei anteriormente.
Deverá estar instalada a libcurl4
e não a libcurl4-nss-dev
nem a libcurl3-nss
, sugiro desinstalar estes pacotes se possível. O backend openssl da libcurl é o que nós utilizamos no projeto.
Os 4 primeiros comandos de instalação do pacote flatpak são desnecessários já que a instalação do flatpak fica dentro de um sandbox como tal as bibliotecas incluidas no .flatpak não são acessíveis para outras aplicações.
Quando só instalo a libcurl4
mostra-me o seguinte erro:
java.lang.UnsatisfiedLinkError: /usr/local/lib/libpteidlibj.so.2.0.0: libcurl-nss.so.4: cannot open shared object file: No such file or directory
A libcurl4-nss-dev
é a que é recomendada, no README do vosso repositório, na instalação através do código-fonte.
Tem razão está errada essa dependência no README, o que usamos nas builds oficiais é sempre libcurl com o backend openssl.
Terá de recompilar o projeto com o pacote libcurl4-openssl-dev
instalado em vez do libcurl4-nss-dev
.
No sistema de execução (VM) ficará com dependência da libcurl4
ou seja o pacote libcurl4-openssl-dev
não é necessário.
Já esta tudo a correr bem.
Envio no zip, os ficheiros usados e um script com os comandos em linux que usei para pôr tudo a funcionar em ubuntu 22.
Agradeço ao @agrr pelo tempo e pela ajuda que têm dado. ubuntu22_AutenticacaoGov_install.zip
Nos novos ficheiros de instalação Linux para a versão mais recente (3.11.0), que estão no formato .flatpak, as bibliotecas não são criadas na pasta /usr/local/lib/.
Já tentei usar as bibliotecas que vêm da instalação dos pacotes .deb de versões anteriores. No entanto, no meu caso, é necessário a obtenção da morada pelos webservices online que são usados a partir da versão 3.9.0.
Além disto, também tentei instalar a aplicação através do source code, mas no momento da utilização acontece o seguinte erro: pt.gov.cartaodecidadao.PTEID_Exception
at pt.gov.cartaodecidadao.pteidlibJava_WrapperJNI.PTEID_Address_getCountryCode(Native Method)
at pt.gov.cartaodecidadao.PTEID_Address.getCountryCode(PTEID_Address.java:54)
De momento ando a utilizar Ubuntu 22 e Ubuntu 18 cujos ficheiros de instalação .deb são para as versões 3.8.1 e 3.1.1 respetivamente.
Se fosse possível, gostaria que disponibilizassem as bibliotecas na pasta /usr/local/lib como têm feito em versões anteriores.