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!

domingo, 31 de janeiro de 2010

Verificando uma assinatura digital PKCS #7 com C#

Há algum tempinho atrás, postei uma classe com métodos estáticos cuja finalidade é empacotar arquivos com assinatura digital em uma mensagem PKCS #7, utilizando certificados padrão X.509.

Em um dos comentários daquele post, fui questionado sobre como fazer a verificação da validade dessa assinatura digital.

Opa, mas na classe tem um método chamado VerifySign, que verifica se existe a assinatura em um arquivo que é passado como parâmetro. Sim, você leu direito: ele verifica apenas a existência da assinatura, não a sua validade.

Dando uma pesquisada, achei o método CheckSignature do objeto SignedCms, que faz exatamente o que o nosso leitor quer: verificar a validade da assinatura digital. Vamos ao código:

public static bool VerifySign2(byte[] data)
{
	try
	{
		SignedCms signed = new SignedCms();
		signed.Decode(data);
		signed.CheckSignature(true);
	}
	catch
	{
		return false;
	}
	return true;
}

Chamei-o de VerifySign2, para não “quebrar” o propósito do outro método.

A única adição que é necessária fazer ao método VerifySign existente no outro post é a chamada do método CheckSignature do objeto da classe SignedCms, que verifica a validade da assinatura digital, e recebe como parâmetro um booleano que indica se será verificada apenas a validade da assinatura (true) ou se além da validade da assinatura também serão verificados os dados dos certificados empregados, tais como a validade, revogação, propósito da chave privada, entre outros.

Vamos dar uma recapitulada no funcionamento do método VerifySign, já incluindo esta pequena adição.

O método recebe como parâmetro um arquivo qualquer, assinado ou não, e cria uma instância da classe SignedCms na variável signed, que manipula mensagens PKCS #7.

Em seguida, chamamos o método Decode() passando como parâmetro este arquivo. Ele serve para decodificar a mensagem PKCS #7, de maneira que possamos acessar os certificados utilizados para acessar o arquivo e o arquivo em si, para poder “detachá-lo” da mensagem PKCS #7.

Se o arquivo não contiver uma assinatura digital, será disparada uma exceção do tipo CryptographicException, que será interceptada pelo “catch” e fará o nosso método retornar false. Neste caso o retorno é false causado pela não existência de assinatura digital.

Se o arquivo estiver assinado, chamaremos o método CheckSignature do objeto “signed”, informando que apenas queremos verificar a validade da assinatura digital, sem verificar os detalhes dos certificados (se passarmos false, o processo de verificação dos certificados requer uma conexão com a Internet – o que nem sempre é possível -, para verificação de lista de certificados revogados – geralmente no servidor da entidade que emitiu o certificado - entre outras coisas).

Interessante é que este método retorna void! Caso a assinatura seja inválida, por exemplo, o arquivo foi alterado depois de assinar, também será disparada uma exceção do tipo CryptographicException, que será interceptada pelo “catch” e fará com que o nosso método VerifySign retorne false.

Caso o método não dispare nenhuma exceção, ele retornará true, informando que a assinatura digital é válida.

Simples, não é?

Abraços!

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