如何在C#中使用.key文件?
我正在设置AS2通信,以便向客户签署文件。据我所知,要通过AS2通信进行签名,我们将使用私钥对发送的数据进行签名,他们将使用我们的公钥进行验证 我的问题: 我的IT部门给了我一个.cer和一个.key文件。.cer文件中没有私钥,显然.key文件就是私钥。客户将把.cer文件添加到其受信任的根目录中,以验证我们的消息。我无法理解如何使用.key文件对数据进行签名。我无法将其添加到个人证书存储中,因此我无法简单地获取证书并执行以下操作:如何在C#中使用.key文件?,c#,C#,我正在设置AS2通信,以便向客户签署文件。据我所知,要通过AS2通信进行签名,我们将使用私钥对发送的数据进行签名,他们将使用我们的公钥进行验证 我的问题: 我的IT部门给了我一个.cer和一个.key文件。.cer文件中没有私钥,显然.key文件就是私钥。客户将把.cer文件添加到其受信任的根目录中,以验证我们的消息。我无法理解如何使用.key文件对数据进行签名。我无法将其添加到个人证书存储中,因此我无法简单地获取证书并执行以下操作: //Open my Personal cert store.
//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文件不能存储在证书存储中,作为RSACryptServiceProvider,我如何直接使用.key文件获取私钥?我以稍微不同的方式做了类似的事情。原谅我,如果这是没有任何帮助,我可以删除它 我没有在这里签字,但你也许能从中找到答案
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]);
我以稍微不同的方式做过类似的事情。原谅我,如果这是没有任何帮助,我可以删除它 我没有在这里签字,但你也许能从中找到答案
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]);
我只知道如何处理PFX文件,但将密钥文件转换为PFX应该不会有问题。见此帖: 稍后,您可以使用以下方法手动打开证书文件:
// This you should know
var certPath = @"path-to-file.pfx";
var certPass = @"password-goes-here";
// Create a collection object and populate it using the PFX file
X509Certificate2Collection collection = new X509Certificate2Collection();
collection.Import(certPath, certPass, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
//Then you can iterate over the collection:
foreach (X509Certificate2 cert in collection)
{
// Bingo
// Here you can do whatever you want with "cert"
}
我只知道如何处理PFX文件,但将密钥文件转换为PFX应该不会有问题。见此帖: 稍后,您可以使用以下方法手动打开证书文件:
// This you should know
var certPath = @"path-to-file.pfx";
var certPass = @"password-goes-here";
// Create a collection object and populate it using the PFX file
X509Certificate2Collection collection = new X509Certificate2Collection();
collection.Import(certPath, certPass, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
//Then you can iterate over the collection:
foreach (X509Certificate2 cert in collection)
{
// Bingo
// Here you can do whatever you want with "cert"
}
您有密钥的密码吗?我有密钥的密码。@Vahlkron您可以使用
pvk2pfx
或openssl
等工具将这两个文件转换为既包含私钥又包含公钥的.pfx
或.p12
证书文件。确定。我想知道我是否必须这样做。我唯一的问题是,如果我向我的客户提供这个.pfx,他们有权访问私钥吗?我假设没有,除非他们有或弄清楚密码。你不给客户pfx,你只是用它加密。他们用证书解密你有密钥的密码吗?我有密钥的密码。@Vahlkron你可以使用pvk2pfx
或openssl
等工具将这两个文件转换为既包含私钥又包含公钥的.pfx
或.p12
证书文件。确定。我想知道我是否必须这样做。我唯一的问题是,如果我向我的客户提供这个.pfx,他们有权访问私钥吗?我假设没有,除非他们有或弄清楚密码。你不给客户pfx,你只是用它加密。他们用certAhhh解密,我以前没见过这篇进口文章。我要试一试。非常感谢。导入是我将密钥导入项目所需要的。再次感谢你的帮助!啊,我以前没见过这件进口的作品。我要试一试。非常感谢。导入是我将密钥导入项目所需要的。再次感谢你的帮助!这看起来很有希望。我要试试看。非常感谢你!事实上,这正是我所需要的。它在代码中为我获取私钥。现在,在那之后我有问题,但这完全回答了我的问题。非常感谢。这看起来很有希望。我要试试看。非常感谢你!事实上,这正是我所需要的。它在代码中为我获取私钥。现在,在那之后我有问题,但这完全回答了我的问题。非常感谢。