O NeoMatrix Tech está de casa nova!

Você deverá ser redirecionado em 6 segundos. Se não, visite:
http://www.leonelfraga.com/neomatrixtech
e atualize seus favoritos.

Aviso IMPORTANTÍSSIMO!

Aviso aos navegantes:

O NeoMatrix Tech mudou de casa!!!

A partir de agora, acessem pelo novo endereço:

http://www.leonelfraga.com/neomatrixtech

Ué... mas é só o domínio mudou de lugar?

R: Na verdade, não é bem assim hehe. Este domínio que você acessa agora aponta para um blog hospedado no Blogger, enquanto no novo, aponta para um blog na plataforma Wordpress, hospedagem própria, muito mais rápida e com um layout mais agradável de ler ;)

Não vou fechar este domínio igual ao que eu fiz com o NM Light (que já está 100% na nova plataforma). Talvez beeeeeeem depois eu faça isso.

Todos os posts daqui se encontram lá, e novos posts serão colocados somente no novo endereço.
A única coisa que não consegui importar foram os comentários. Mas em breve vai ter um post contando sobre a epopéia que foi migrar o NeoMatrix Tech!

Somente vou fechar a área de comentários daqui. Caso queiram comentar, favor ver o post correspondente no "Novo NeoMatrix Tech" e comentem por lá. É bem melhor! (pena que os permalinks "amigáveis para SEO" não funcionam lá, dá erro 404 e não consigo fazer a configuração funcionar. E olha que eu já vi vários artigos falando desse assunto :( ).

Quem assina o feed, já está lendo o conteúdo do novo NeoMatrix Tech!

sexta-feira, 5 de fevereiro de 2010

Assinando arquivos com certificados do tipo A3 (smartcard / token)

Já aprendermos como assinar arquivos digitalmente, no formato PKCS #7 a partir de certificados X.509 instalados através de arquivos .pfx, ou seja, certificados do tipo A1.

Programa SafeSign com um e-CNPJ A3 plugado

Os certificados do tipo A3 são armazenados em hardware, tais como smartcards (cartões inteligentes) e tokens (parecido com um pendrive). Para utilizá-los, primeiramente é necessário instalar os drivers necessários: driver do cartão / token e driver da leitora.

Após a instalação destes pré-requisitos, ao espetar o token na USB ou colocar o cartão na leitora, os certificados armazenados nestes dispositivos são exibidos pelo Gerenciador de Certificados do Windows, como mostra a imagem abaixo:

Gerenciador de Certificados do Windows

Veja só onde ele aparece: No armazenamento “Pessoal” do usuário que está logado na máquina! E ele pode ser acessado através da classe X509Store :).

Se você já teve a curiosidade e testou os códigos presentes na classe SignWrappers que foi postada anteriormente, ao passar um certificado do tipo A3 para o método SignFile você pode ter ficado decepcionado, pois dá uma mensagem de erro com alguma coisa remetendo a um modo silencioso (não me lembro da mensagem exata hehe).

E se você notou, cada vez que você utiliza o certificado A3 em um programa para assinar arquivos, como a suite Microsoft Office, ele sempre pede a senha PIN do certificado, coisa que não ocorre na nossa classe de assinatura digital.

Meus queridos, estes problemas podem ser resolvidos com uma minúscula alteração no método SignFile da nossa classe SignWrappers! Veja o código:

public static byte[] SignFile(X509Certificate2Collection certs, byte[] data)
{
	try
	{
		ContentInfo content = new ContentInfo(data);
		SignedCms signedCms = new SignedCms(content, false);
		if (VerifySign(data))
		{
			signedCms.Decode(data);
		}
		foreach (X509Certificate2 cert in certs)
		{
			CmsSigner signer = new CmsSigner(cert);
			signer.IncludeOption = X509IncludeOption.WholeChain;
			signedCms.ComputeSignature(signer, false);
		}
		return signedCms.Encode();
	}
	catch(Exception ex)
	{
		throw new Exception("Erro ao assinar arquivo. A mensagem retornada foi: " + ex.Message);
	}
}

Neste post tem o funcionamento completo da classe. A adição que fizemos foi passar o parâmetro “Silent”, do tipo booleano, no método ComputeSignature do objeto SignedCms. E o que ele faz?

Caso passemos true, a assinatura será calculada sem intervenção do usuário, ou seja, a senha para acessar a chave privada do(s) certificado(s) deverá(ão) ser informada(s) junto com o certificado. Isso é válido para os certificados A1, vide sobrecargas do método SignFile que possui passagem de senha.

Um certificado A3 geralmente pede a senha PIN (utilizada para acesso aos objetos privados do token / smartcard) através de uma caixa de diálogo do driver do dispositivo, e caso o método ComputeSignature esteja em modo silencioso, esta caixa não será exibida e disparará uma exceção com a mensagem de erro informando a respeito.

Para que a caixa de diálogo do PIN apareça quando o método ComputeSignature for chamado, devemos passar false como valor do parâmetro Silent do ComputeSignature.

E então é isso! Um grande abraço ;)

Ah, e na próxima vamos fazer um programinha que assina arquivos? ;)

0 comentários:


Postar um comentário

Para tornar este artigo ainda mais interessante, escreva suas críticas (desde que construtivas e sem ofenças), elogios, sugestões, complementos, dúvidas, etc, etc, etc!!!

Sobre o NeoMatrix Tech

Meu blog para assuntos profissionais, ligado com tecnologia.
Dicas de programação (grande parte de C# e ASP.NET, mas não limitado a essa plataforma :-) ), dicas de utilitários, análises de equipamentos e serviços, resenhas sobre sites que eu visito, relacionados com tecnologia, opinião sobre mercado de trabalho, metodologias de desenvolvimento, comportamento no mundo tecnológico...

NeoMatrix Light

  © Blogger templates ProBlogger Template by Ourblogtemplates.com 2008 - Editado e configurado por Leonel F.

Voltar ao TOPO