Ho esaminato molti forum ed esempi, ma nessuno mi ha aiutato. Ho bisogno di verificare la firma da qualsiasi webservice. Ho un file test.crt con chiave pubblica per la verifica.Come verificare la firma, caricando il TASTO PUBBLICO dal file CRT?
static bool Verify(string text, string signature)
{
X509Certificate2 cert = new X509Certificate2(
HttpContext.Current.Server.MapPath("test-server.cert"));
RSACryptoServiceProvider csp = (RSACryptoServiceProvider) cert.PublicKey.Key;
// Hash the data
SHA1Managed sha1 = new SHA1Managed();
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] data = encoding.GetBytes(text);
byte[] sign = Convert.FromBase64String(signature);
byte[] hash = sha1.ComputeHash(data);
return csp.VerifyHash(hash, CryptoConfig.MapNameToOID("SHA1"), sign);
}
Ma risultato è sempre falsa :(
Ho un esempio OpenSSL:.
openssl base64 -d -in signature -out signature.bin
openssl dgst -sha1 -verify test-server.pub -signature signature.bin from_gateway
Ho creato una semplice applicazione che genera una firma per un testo e subito la verifica. Puoi controllare qui: https://dl.dropbox.com/u/1171045/11221877/Program.cs –
Quindi il metodo sopra è piuttosto ok. Sei sicuro di utilizzare i certificati appropriati per la firma e la verifica? –
Ho fatto lo stesso con l'app Web, quindi non è una cosa del web. Come passi una firma dal servizio web alla tua app? –