J'ai passé en revue de nombreux forums et exemples, mais aucun ne m'a aidé. J'ai besoin de vérifier la signature de n'importe quel webservice. J'ai le fichier test.crt avec la clé publique pour vérifier.Comment vérifier la signature, chargement de la clé publique à partir du fichier 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);
}
mais le résultat est toujours faux :(
J'ai un exemple OpenSSL.
openssl base64 -d -in signature -out signature.bin
openssl dgst -sha1 -verify test-server.pub -signature signature.bin from_gateway
J'ai créé une application simple qui génère une signature pour un texte et vérifie immédiatement. Vous pouvez le vérifier ici: https://dl.dropbox.com/u/1171045/11221877/Program.cs –
Donc la méthode ci-dessus est plutôt ok. Êtes-vous sûr que vous utilisez des certificats appropriés pour signer et vérifier? –
J'ai fait la même chose avec l'application web, donc ce n'est pas une chose web. Comment passez-vous une signature du service Web à votre application? –