我正在设置AS2通信,以便将文件签名给客户。据我所知,签署通过AS2通信工作,我们将使用我们的私钥对我们发送的数据进行签名,他们将使用我们的公钥对其进行验证。
我的问题: 我的IT部门给了我一个.cer和一个.key文件。 .cer文件中没有私钥,显然.key文件是私钥。客户将.cer文件添加到其受信任的根目录以验证我们的消息。我无法理解如何使用.key文件签署我的数据。这不是我可以添加到个人证书商店的东西,因此我无法获得证书并执行此操作:
//Open my Personal cert store.
X509Store my = new X509Store(StoreName.My, StoreLocation.LocalMachine);
my.Open(OpenFlags.ReadOnly);
RSACryptoServiceProvider csp = null;
foreach (X509Certificate2 cert in my.Certificates)
{
if (cert.Subject.Contains("My certificate subject"))
{
// We found it.
// Get its associated CSP and private key
csp = (RSACryptoServiceProvider)cert.PrivateKey;
}
}
// Hash the data
SHA256Managed sha256 = new SHA256Managed();
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] hash = sha256.ComputeHash(arMessage);
// Sign the hash
return csp.SignHash(hash, CryptoConfig.MapNameToOID("SHA256"));
如何直接使用.key文件将我的私钥作为RSACryptoServiceProvider获取,因为.key文件不能存储在证书存储中?
答案 0 :(得分:1)
我以稍微不同的方式完成了类似的事情。请原谅我,如果这根本没用,我可以删除它。
我在这里没有做任何签名,但你可以从中弄清楚如何。
var collection = new X509Certificate2Collection();
collection.Import(System.Web.Hosting.HostingEnvironment.MapPath(pathToPrivateKey), privateKeyPassword, X509KeyStorageFlags.MachineKeySet);
var requestToPing = (HttpWebRequest)WebRequest.Create(dropOffURL);
requestToPing.Method = "POST";
requestToPing.PreAuthenticate = true;
requestToPing.ClientCertificates.Add(collection[0]);
答案 1 :(得分:1)
我只知道如何处理PFX文件,但将KEY文件转换为PFX应该不是问题。看这篇文章:
Is it possible to convert an SSL certificate from a .key file to a .pfx?
稍后,您可以使用以下方法手动打开证书文件:
{{1}}