hereと書かれているように、署名の検証ができません。私はBouncyCastle.NetCore 1.8.1.3を使用していますが、プロジェクトは.NETCoreApp 1.0です。Alexaスキル署名の検証に失敗しました
私はMacOS 10.12.1で開発中で、dotnet core 1.0.4を実行しています。私のサーバは、netcore1.0とubuntu16.04-x64アプリケーションとしてビルドされたUbuntu 16.04.2-x64リリース版を実行しています。
システムの残りの部分は、署名の検証を除いて問題なく実行されます。
私の検証は常に偽を返します。
ここが署名し、身体を検証するための私のサービスです。
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);
}
}
}
誰も私が間違ってやっているか、別のフレームワークやAPIを使用したもの、先端を持っていますか?
1.「コンテンツ」はUTF8でエンコードされていますか? 2.別のアルゴリズムを試しましたか? – ChrisM
1.はい、内容は確かにUTF8です。 2.私はSystem.Security.Cryptography.X509Certificatesクラスを試しました。しかしそれはまた働いていない。それはドットネットをクラッシュさせている。 – Duglah