Jump to content
ruidias

Assinar com o Cartão de Cidadão

Recommended Posts

ruidias

Boas!

Para um projecto que estou a desenvolver, necessito de assinar um PDF com o cartão de cidadão.

Para as funções de PDF utilizo o iTextSharp.

Para Criptografia, experimentei o bouncycastle, mas este só permite assinar com certificados JÁ INSTALADOS na maquina, e não é isso que pretendo. O que pretendo é ASSINAR recorrendo ao SmartCard do Cartão de Cidadão.

Também já explorei a livraria DevScope, mais uma vez sem sucesso...

Estou a ficar sem ideias...

Alguma pista?

Desde já agradeço.

Share this post


Link to post
Share on other sites
M6

Livraria? Não quererás dizer biblioteca?


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
ruidias

Livraria? Não quererás dizer biblioteca?

Sim!

Obrigado pela resposta. Muito útil...

Share this post


Link to post
Share on other sites
M6

Sim!

Obrigado pela resposta. Muito útil...

De nada.

Saber comunicar correctamente é imprescindível nos tempos de hoje.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
ruidias

Vê se alguma destas threads ajuda:

Obrigado pela resposta, mas...

Eu já tinha dado uma vista de olhos pelo forum, e já conhecia estas threads, senão, repara:

Esta thread não tem nada a ver com o que quero, isto é para autenticação e o que eu quero assinatura.

Esta thread refere o BouncyCastle (que aliás eu já tinha referido na minha thread inicial).

O BouncyCastle suporta funções de assinatura, o grande problema é que os certificados TEM que estar instalados na maquina onde se vai assinar, e não é isso que se pretende. o que se pretende é usar o Cartão de Cidadão para esse efeito.

Nesta thread refere-se apenas à leitura de dados do cartão do cidadão.

Já explorei o Livraria DevScope que faz uso do Middleware do Cartão do Cidadão para obter dados, mas a literatura é pouca ou mesmo inexistente. Até acredito que faça o que quero, mas não tenho como o saber visto não existir um manual ou algo parecido.

Assim, fico muito agradecido a quem me possa dar "uma luzes" acerca disto.

Antecipadamente Agradecido.

Share this post


Link to post
Share on other sites
ruidias

Problema resolvido e a funcionar 5 estrelas. muito obrigado a todos os que ajudaram.  :)

Share this post


Link to post
Share on other sites
Baderous

Podias dizer como fizeste para ficar registada a solução, pode ser útil para outros no futuro.

Share this post


Link to post
Share on other sites
ruidias

Caro Amigo,

em resposta ao teu pedido para colocar a solução encontrada para a minha pergunta, tenho, em minha defesa, a dizer o seguinte:

Não irei colocar neste forum a solução encontra pela seguinte razão:

Sou licenciado em informática e trabalho como profissional de programação já à 10 anos.

Sempre gostei de ajudar os outros (quem me conhece não desmente).

Em tempos, quando tive conhecimento deste forum, vim para ajudar e logo fui achincalhado e gozado, quando respondi EXACTAMENTE SOBRE O QUE SEI, fiquei admirado quando fui contradito e apresentei as minhas razões para afirmar o que dizia, inclusive desafiei quem me contradizia (alguém do staff, não me recordo quem) a apresentar provas em contrário (claro que nunca chegaram) e a resposta que tive foi:

"não conheces quem cá anda já há muito tempo, claro que não tens razão nenhuma porque nós somos os gurus da informática do universo inteiro e o que dizemos é a lei"

(claro que isto não está escrito tal-e-qual me foi dito, porque não me recordo ao certo, mas era mais ou menos esta a mensagem que me transmitiram).

Obviamente que após ler isto, eliminei todas as mensagens que tinha colocado e jurei nunca mais cá voltar.

Infelizmente, estava desesperado por uma solução e nas situações de aflição todos voltam... decidi então voltar a este forum e prometi que, caso tivesse algum tipo de ajuda, iria dar uma segunda oportunidade.

Ora bem, qual o meu espanto quando a primeira resposta à minha pergunta........ nada tinha a ver com a pergunta ou resposta, mas sim um problema de...... imagine-se, tradução.......

Ainda por cima escrita por um "querido líder" de uma qualquer Coreia...perdão, revista.

Na minha (nossa) actividade leio (lemos?) muito em inglês... habituei-me a traduzir "library" para livraria (mais simples) do que biblioteca (muito mais complicado de dizer e escrever). Nunca, em lado nenhum, veio mal ao mundo... excepto aqui.

Claro que há diferenças entre uma Livraria e uma Biblioteca, sobretudo naquilo que vendem... uma vende material de escritório e a outra tem livros para alugar... mas caramba... para um bom entendedor, meia palavra basta... (Num Abia Nexexidade)

Resumindo... duas vezes achincalhado e caso para dizer: não volta a acontecer uma terceira vez.

Nota: O amigo "Baderous" ainda tentou ajudar, vale o esforço que MUITO agradeço, mas neste caso o "Querido Lider" estragou tudo (mais uma vez?).

Abraço e

Desejos de sucesso para a vossa revista.

Share this post


Link to post
Share on other sites
M6

ruidias, lamento que te tenhas sentido ofendido e lamento ainda mais essa tua postura de menino mimado que não ajuda os outros por uma questão de, imagine-se, birra.

A correcção da tradução faz parte das regras de moderação, é um fórum em Português e uma das regra é a escrita correcta na língua de Camões. Se escreveste mal é porque não sabias a tradução correcta, é uma inferência perfeitamente correcta, dai ter feito a correcção para que de futuro a tua comunicação melhorasse.

Mas nem sequer tiveste a humildade de dizer "eh pá, tens razão, enganei-me", e imediatamente achaste isso ofensivo, não faço ideia porquê

No entanto esse comportamento não me espanta porque aqui vê-se um pouco de tudo.

O que já me espanta é que sendo um profissional há 10 anos era de esperar que soubesse, pelo menos, a tradução correcta para library...

Agradeço os teus votos de sucesso para a revista.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
IceBrain

É pena, também estava curioso, apesar de não me ser útil neste momento.


❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Share this post


Link to post
Share on other sites
Pedro Lamas

Bem, tendo em conta que eu trabalho na DevScope, gostava de saber que library, livraria ou biblioteca te referes cujo nome é... DevScope!!!! :)

Share this post


Link to post
Share on other sites
M6

Pedro, o fórum tem regras sobre publicidade e spam.

Espero que de futuro a tua participação no P@P seja algo mais do que isto...

PS: continuo sem compreender como é que alguém que é profissional nesta área não sabe a diferença entre biblioteca e livraria...


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Pedro Lamas

Caro "M6", antes de mais desculpa lá a piada (sim, que foi num tom de algum gozo apenas que coloquei o link para a empresa)!

Eu pelo meu lado, para além de trabalhar na empresa citada (não por mim!), sou um dos Administradores da que actualmente é a maior comunidade de Windows Mobile em Portugal (de forma a evitar a publicidade, não colocarei o nome, quem quiser pode ir ao Google que será fácil de encontrar!), e como tal acho que tenho "algumas" noções de como devo ou não participar em fóruns, mas compreendo que as regras são para cumprir e assim farei de futuro.

No entanto, e como não gostava de deixar passar a tua intervenção inicial em branco, deixo-te aqui um texto que não é da minha autoria, mas que espero que o autor me desculpe por agora o citar de forma anónima:

Deixo aqui um ensinamento que já existe desde 1997 pelo menos, senão de antes, e que é a base da Netiquette, que no fundo são regras de bom senso de como estar em comunidade na internet ou em qualquer comunidade direi mesmo.

"When someone makes a mistake -- whether it's a spelling error or a spelling flame, a stupid question or an unnecessarily long answer -- be kind about it. If it's a minor error, you may not need to say anything. Even if you feel strongly about it, think twice before reacting. Having good manners yourself doesn't give you license to correct everyone else. If you do decide to inform someone of a mistake, point it out politely, and preferably by private email rather than in public. Give people the benefit of the doubt; assume they just don't know any better. And never be arrogant or self-righteous about it. Just as it's a law of nature that spelling flames always contain spelling errors, notes pointing out Netiquette violations are often examples of poor Netiquette. (S. Virginia, Netiquette.(1997) http://www.albion.com/netiquette/book/index.html)"

Quanto ao componente citado, entretanto e em conversa com alguns elementos da empresa, fiquei a saber que se referem a este aqui: http://cartaodecidadao.codeplex.com/

Share this post


Link to post
Share on other sites
M6

Obrigado pelo link, sem dúvida é útil para quem se depare com este problema.

Quanto à piada, não tens de pedir desculpa, mas sabes que na escrita o tom, seja jocoso/brincalhão ou outro, é algo que é difícil de transmitir, dando azo interpretações distintas da da original.

Por fim a etiqueta. Sendo um fórum de partilha de conhecimento entendo que devemos corrigir o que está mal de forma a que toda a comunidade ganhe com isso.

Não é uma crítica nem um apontar de dedo a quem cometeu o erro, é uma partilha de conhecimento e tem também o propósito de evitar que outros façam este erro.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
P3d3r0s0

Boa tarde, estou a tentar fazer o mesmo que a pessoa que iniciou esta thread sem grande sorte.

Quero fazer inserir uma assinatura digital em um documento usando o itext em ambiente java (para o meu problema até podia ser c#) através de um leitor smartcard .

Para já estou com o problema de como detectar o cartão do cidadão quando o leitor smartcard está na máquina cliente.

Quanto tenho o leitor na máquina do servidor, a minha aplicação detecta o cartão e consigo aceder a dados (nome, foto). Mas quando o leitor está numa máquina onde a aplicação não está a correr (cliente, como o login no site da sapo) não consigo aceder aos dados.

Alguma sugestão do que eu possa fazer para resolver este problema?

Cumprimentos.

Share this post


Link to post
Share on other sites
Pedro Jorge Silva

ASSINAR PDF COM CARTÃO DE CIDADÃO

Apesar de tarde, fiz um projeto sobre este assunto e encontrei uma solução (neste caso estou a assinar PDF):

necessário:

X509Store st;
X509Certificate2Collection col;
Org.BouncyCastle.X509.X509CertificateParser certParse;
Org.BouncyCastle.X509.X509Certificate[] chain;
IExternalSignature externalSignature;
Stream output;
PdfStamper stamper;
PdfSignatureAppearance sap;
// para listar ao utilizador os certificados:
st = new X509Store(StoreName.My);
st.Open(OpenFlags.ReadOnly);
col = X509Certificate2UI.SelectFromCollection(st.Certificates, "Lista de Certificados", "Escolha um Certificado", X509SelectionFlag.SingleSelection);
if (col.Count <= 0)
 return;
certificateData = new X509Certificate2(col[0]);
certParse = new Org.BouncyCastle.X509.X509CertificateParser();
chain = new Org.BouncyCastle.X509.X509Certificate[] { certParse.ReadCertificate(certificateData.RawData) };

externalSignature = new X509Certificate2Signature(certificateData, "SHA-1");
stamper = PdfStamper.CreateSignature(reader, output, '\0', null, true);
sap = stamper.SignatureAppearance;
MakeSignature.SignDetached(sap, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
stamper.Close();

no meu computador tive um problema a correr este código pois o middleware do cartão de cidadão não me pedia o PIN do mesmo (o meu pc tem o Windows 7 64bit), mas noutro pc com Windows 7 64bit funcionou, em XP 32bit também funcionou. Se der erro, o problema provavelmente não será do código.

Edited by Pedro Jorge Silva
  • Vote 2

Share this post


Link to post
Share on other sites
Pedro Jorge Silva

Ya espero que sim, foi complicado encontrar soluções para este problema e como passei aqui e procurei aqui ajuda, acho no mínimo decente postar a minha solução, mas o que me incentivou mais foi uma certa pessoa que veio pedir ajuda e depois diz que encontrou uma solução e não diz nada a ninguém, pessoas assim é que portugal NÃO precisa, "ah e tal sou licenciado em informática" pois mas de programação não percebe muito...

Edited by Pedro Jorge Silva
  • Vote 2

Share this post


Link to post
Share on other sites
hfc

Olá Pedro Silva,

Desde já obrigado por ajudares a comunidade, tenho uma duvida em relação ao código que colocas-te,

estas duas referências vêm de onde ?

Org.BouncyCastle.X509.X509CertificateParser certParse;

Org.BouncyCastle.X509.X509Certificate[] chain;

Obrigado.

Share this post


Link to post
Share on other sites
Salvador Oliveira

Boas pessoal,

Estou a desenvolver uma applet que assina pdf's com o cartão de cidadão...

A minha dúvida está em assinar essa applet para a publicar numa página web...

Sou novato nestas áreas, e estive a ler que o jar que a applet gera, tem de ser assinado por uma entidade de certificação.

Como é que o pessoal fez para assinar esse jar ? para permitir a leitura do cartao de cidadao ?

Obrigado.

Share this post


Link to post
Share on other sites
rmpt

Criei um projecto em C# para assinar digitalmente a partir do cartão de cidadão.

Podem fazer download da dll e ver o código fonte aqui:

https://github.com/rmpt/CCSignature

NOTA: esta dll NÃO SERVE para assinar documentos PDF, serve sim para assinar qualquer string e ter o resultado em Base64. É util para quem tem de integrar com serviços externos que peçam para enviar alguns dados assinados, que por norma, pedem para assinar com cartão de cidadão e enviar o resultado em base64. Coloquei o link pois o título do post apenas diz "Assinar com cartão de cidadão", não menciona pdf especificamente. De qualquer modo, como mencionado, a biblioteca iTextSharp cumpre na perfeição o assinar de documentos pdf.

Edited by rmpt

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.