Je n'arrive pas à faire fonctionner la vérification de la signature, comme cela est décrit here. J'utilise BouncyCastle.NetCore 1.8.1.3 et le projet est .NETCoreApp 1.0. Je suis en train de développer sur macOS 10.12.1, exécutant dotnet core 1.0.4 et mon serveur exécute Ubuntu 16.04.2-x64 exécutant la version finale, build as netcore1.0 et ubuntu16.04-x64 app.Alexa Skill La validation de la signature échoue
Le reste du système s'exécute sans problème, à l'exception de la vérification de signature. Ma validation retourne toujours false.
Voici mon service pour valider la signature et du corps:
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
namespace MySkill.Main.Services
{
public class CertificationValidationService : ICertificationValidationService
{
private const string Algorithm = "SHA1withRSA";
public async Task<bool> IsValidSiganture(Stream body, Stream certData, string signature)
{
var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(new StreamReader(certData));
var cert = (Org.BouncyCastle.X509.X509Certificate)pemReader.ReadObject();
using (var sr = new StreamReader(body))
{
var content = await sr.ReadToEndAsync();
var result = CheckRequestSignature(Encoding.UTF8.GetBytes(content), signature, cert);
return result;
}
}
private static bool CheckRequestSignature(byte[] bodyData, string signature, Org.BouncyCastle.X509.X509Certificate cert)
{
byte[] sig = Convert.FromBase64String(signature);
var pubKey = (Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters)cert.GetPublicKey();
var signer = Org.BouncyCastle.Security.SignerUtilities.GetSigner(Algorithm);
signer.Init(false, pubKey);
signer.BlockUpdate(bodyData, 0, bodyData.Length);
return signer.VerifySignature(sig);
}
}
}
Est-ce que quelqu'un a une astuce, ce que je fais mal ou a utilisé un cadre différent ou apis?
1. Êtes-vous sûr du "contenu" codé en UTF8? 2. Avez-vous essayé un autre algorithme? – ChrisM
1. Oui, le contenu est UTF8 à coup sûr. 2. J'ai essayé les classes System.Security.Cryptography.X509Certificates. mais ça ne marche pas non plus. C'est l'écrasement de dotnet. – Duglah