Assinar arquivo XML através de uma apliacação java web

Olá! Gostaria de saber se existe alguma forma de realizar a assinatura digital de um arquivo XML através de uma aplicação java web (JSF + Primefaces pra ser mais específico) sem a necessidade de uma aplicação local instalada na máquina do cliente para reconhecer o certificado digital. Sei que não podemos mais utilizar applets devido ao fato de que os navegadores não mais os suportarem. Também sei que existem bibliotecas javascript, como a Web PKI, porém é paga. Existe alguma que seja gratuita? Gostaria de saber a opinião e as experiências dos membros aqui do fórum sobre o assunto. Toda e qualquer ajuda será muito bem vinda.

com o próprio java vc consegue assinar um xml

Sei que o java consegue assinar, porém no meu caso, possuo uma aplicação web e preciso que ela reconheça o certificado digital na máquina de cada cliente sem o uso de applets.

Um idéia ter uma parte da aplicação onde o usuário enviasse o certificado pro seu servidor ( e a aplicação guardaria para usar nas próximas vezes como parte das configurações específiicas do usuário) e a partir dele vc faria leitura e assinaria o xml.

Interessante a ideia Luiz, mas para realizar esse envio, eu precisaria necessariamente de uma aplicação rodando na máquina do cliente, certo?

Não precisaria, bastava ter um form na sua aplicação que permitise o usuário fazer o upload do certificado, tipo uma área administrativa ou de configuração; daí vc armazenaria num banco ou em sistema de arquivos do servidor de aplicação.

1 curtida

O problema é que tratam-se de certificados A3 em sua maioria, e o processo de assinatura, e até onde tenho pesquisado, não dá pra armazenar certificados A3 em bases de dados, pois o processo de assinatura se dá justamente no token ou no cartão.

Meio complicado isso, afinal, você tem que entender que o ambiente que uma aplicação web estará sujeito é o browser (navegador) e não o próprio SO.
Como não se tem applets, isso se torna ainda mais complicado.
É possível (e aceitável) trocar a aplicação web por JNLP?

Olha leitura de dispositivo token via web é complicado…

Esqueça JNLP está depreciado (aliás tecnologias desktop) e vai ser descontinuado, se quizer seguir por conta e risco.

Isso mesmo Darlan, depois de muito pesquisar, e pelo que o pessoal aqui tem dito, o melhor caminho mesmo será através de uma aplicação java web start. Agradeço a todos que contribuíram com as respostas.

Bom dia, tive esse problema recentemente na empresa, a unica forma q eu achei foi com o JNLP e ta funcionando perfeito.

A equipe de Java aqui também usou Java Web Start para este caso, funciona perfeitamente usando a API da certisign. Foi uma migração rápida usando a maior parte do código que era feito via applet. Se vão mesmo descontinuar totalmente JNLP, ai não sei como estão planejando, mas como a solução atual custou pouco, foi uma saída rápida para se livrar do applet. Mas o ideal é se livrar do Java, ClickOnce do .NET/C# é outra opção, mas não sei se ainda é uma tecnologia em plena atividade, estou por fora de desktop. Web PKI funciona com e-token lendo a chave privada do token físico local?

Sim, o Web PKI funciona na máquina do cliente, desde que antes seja instalado o plugin deles para o navegador que o usuário esteja utilizando.

Então é uma ótima saída mesmo por extensão do browser, assim se livra do Java ou outras soluções externas, ficando tudo via navegador. E quem não quiser depender de solucoes fechadas de terceiros, pode desenvolver a extensao para o(s) navegadores utilizados pela empresa.

Pessoal, estou com um problema semelhante, mas envolvendo Delphi. A aplicação também é web. Alguém poderia me dar algumas dicas ou ver se essa solução em Java poderia ser adaptada para nosso uso?

Aqui o link da pergunta.

Agradeço a todos!

Boa noite.
Recebi uma proposta para desenvolvier uma aplicação similar, no inicio pautei ser via WEB com Angular no Front e Java Spring no back.
Porem o cliente usa A3 como certificado,
Eu desenvolvi em 2010 a NFe que assina XML da nota numa aplicação Java SE Swing rodando localmente no cliente. Esta aplicação le o certificado disponivel, sem se importar se A1 ou A3, pois é o Windows que fornece. E funciona bem ate hoje.
Então vai ser Java Swing.
Para o cliente o importante é entrega,e não como voce fez.