首页 > 解决方案 > 无法使用 RSA-SHA512 算法通过 X509Certificate2 验证获取 httpRequest 签名参数

问题描述


以客户端错误“消息未签名”结束

keyId= 私钥附带的 X509 证书的 Base64 编码

算法= rsa-sha512

签名= base 64 编码的数字签名。它必须使用私钥签名

附带 base64 与 keyId 关联的 X509 证书

string CalcMD5HasKey = "密码的 MD5 哈希";


      X509Certificate2 certificate = new X509Certificate2(DirectoryCERT, 
 CalcMD5HasKey2,X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet | 
 X509KeyStorageFlags.PersistKeySet);
            
     var export = certificate.Export(X509ContentType.Pkcs12, CalcMD5HasKey2);
     string BinarySecurityToken = Convert.ToBase64String(export);
                
      string url = "";
      url = "https://www.HELLO.com/ABC/webservice/v1/handshake";
     string today = String.Format(@"{0:ddd,' 'dd' 'MMM' 'yyyy' 'HH':'mm':'ss' 'G\MT}", 
     DateTime.Now);
                
           var SignatureParm = "(request-target): get /ABC/webservice/v1/handshake\nhost: 
           www.HELLO.com\ndate: " + today;
    
                    UTF8Encoding ByteConverter = new UTF8Encoding();
                    byte[] originalData = ByteConverter.GetBytes(SignatureParm);
                    byte[] signedData;
                    RSACryptoServiceProvider privateKey = (RSACryptoServiceProvider)certificate.PrivateKey;
                    RSACryptoServiceProvider privateKey1 = new RSACryptoServiceProvider();
                    privateKey1.ImportParameters(privateKey.ExportParameters(true));
                    signedData = privateKey1.SignData(originalData, "SHA512");
                    var SignatureHash = Convert.ToBase64String(signedData);
                
                    webRequestCall.Headers.Add("Signature", "keyId=\"" + BinarySecurityToken + "\", algorithm=\"rsa- 
                    sha512\", headers=\"(request-target) host date\", signature=\"" + SignatureHash + "\"");

标签: asp.netrestx509certificate2system.net.httpwebrequest

解决方案


推荐阅读