2017-07-03 4 views
2

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を使用したもの、先端を持っていますか?

+0

1.「コンテンツ」はUTF8でエンコードされていますか? 2.別のアルゴリズムを試しましたか? – ChrisM

+0

1.はい、内容は確かにUTF8です。 2.私はSystem.Security.Cryptography.X509Certificatesクラスを試しました。しかしそれはまた働いていない。それはドットネットをクラッシュさせている。 – Duglah

答えて

0

共有したコードからは正しいようです。残りのコードを見ることなく、あなたが持っている署名が正しいかどうかわかりません。あなたはhttps://github.com/sophtron/Alexa-Skill-Sophtronで認定を通過したC#コードを見て、自分と比較して違いがあるかどうかを調べることができます。

署名検証のために.netライブラリからRSACryptoServiceProviderを試しましたが、これは決して働いていませんでした。だから私はBouncyCastle.1.8.1に切り替える必要があったし、それは私のために働いた。

関連する問題