asp.net - 无法使用 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 + "\"");
解决方案
推荐阅读
- xml - 如何从 Android Text Preference 中接受多个值?
- angular - Angular TypeError:对象原型可能只是一个对象或空:未定义
- css - 背景图像报告 404
- python-3.x - Google Drive API Python 服务帐户示例
- python - 如何创建动态上传路径 Django
- java - 空对象引用上的自定义对话框错误“android.text.Editable android.widget.EditText.getText()”
- autofac - Autofac 服务未注册,但已注册
- c++ - 在创建 Integer 类时,C++ 中的头文件未定义引用
- java - 为什么会更改 java 类的签名
- node.js - 结合多个 async/await 调用的结果(再次)