我怎样才能在 "Enterprise Trust" 商店中写信?
How can i write in the "Enterprise Trust" Store?
我有一个包含一些证书的 .p7b 文件,我想将它们安装在 "Enterprise Trust" 商店中。我想使用的程序期望它在那里。
我在 c# 中编写了代码,它从文件中提取所有证书并将它们安装到一个有效的 X509Store ("Storename.My") 中。
如果我尝试使用相同的代码在不同的存储中写入(它已经存在),它会创建一个新的空存储并写入其中。
StoreName.My 取自 system.Security.Cryptography.X509Certificates public enum StoreName,但没有 "Enterprise Trust" 商店的选项。
所以我尝试使用可以将 StoreName 作为字符串提供的构造函数。
我使用 windows 中的 certmgr 来检查哪些证书存储在哪些商店中。
// open file
var certificateStore = new CmsSignedData(new
FileStream(_tempFileName.ToString(), FileMode.Open));
// get all certificats
IX509Store x509Certs = certificateStore.GetCertificates("Collection");
var a = new ArrayList(x509Certs.GetMatches(null));
// this works
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
// this doesnt work
// var store = new X509Store("Enterprise Trust", StoreLocation.CurrentUser);
// open store
store.Open(OpenFlags.ReadWrite);
// write in store
foreach (object o in a) {
var cert = (Org.BouncyCastle.X509.X509Certificate)o;
var cert509 = new X509Certificate2();
cert509.Import(cert.GetEncoded());
store.Add(cert509);
}
store.Close();
我如何在不是 StoreName 枚举的商店中正确写入?
如果您想确定您不是在创建新商店,可以使用 OpenFlags 值 OpenExistingOnly
。断言该标志并检查,例如"Trust2"
产生 System.Security.Cryptography.CryptographicException: The system cannot find the file specified.
因此,我们通过将 "Trust"
指定为:
来获得最好的保证 "Trust"
是正确答案
using (X509Store store = new X509Store("Trust", StoreLocation.CurrentUser))
{
store.Open(OpenFlags.ReadWrite | OpenFlags.OpenExistingOnly);
...
}
(请注意,这不太适合在 Linux (.NET Core) 上使用,因为只有 Windows 预初始化存储)
我们可以通过 certutil.exe
命令行实用程序确认显示名称的编程名称:
>certutil -store trust
trust "Enterprise Trust"
CertUtil: -store command completed successfully.
(我只是那家店里什么都没有)
我有一个包含一些证书的 .p7b 文件,我想将它们安装在 "Enterprise Trust" 商店中。我想使用的程序期望它在那里。
我在 c# 中编写了代码,它从文件中提取所有证书并将它们安装到一个有效的 X509Store ("Storename.My") 中。
如果我尝试使用相同的代码在不同的存储中写入(它已经存在),它会创建一个新的空存储并写入其中。
StoreName.My 取自 system.Security.Cryptography.X509Certificates public enum StoreName,但没有 "Enterprise Trust" 商店的选项。 所以我尝试使用可以将 StoreName 作为字符串提供的构造函数。
我使用 windows 中的 certmgr 来检查哪些证书存储在哪些商店中。
// open file
var certificateStore = new CmsSignedData(new
FileStream(_tempFileName.ToString(), FileMode.Open));
// get all certificats
IX509Store x509Certs = certificateStore.GetCertificates("Collection");
var a = new ArrayList(x509Certs.GetMatches(null));
// this works
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
// this doesnt work
// var store = new X509Store("Enterprise Trust", StoreLocation.CurrentUser);
// open store
store.Open(OpenFlags.ReadWrite);
// write in store
foreach (object o in a) {
var cert = (Org.BouncyCastle.X509.X509Certificate)o;
var cert509 = new X509Certificate2();
cert509.Import(cert.GetEncoded());
store.Add(cert509);
}
store.Close();
我如何在不是 StoreName 枚举的商店中正确写入?
如果您想确定您不是在创建新商店,可以使用 OpenFlags 值 OpenExistingOnly
。断言该标志并检查,例如"Trust2"
产生 System.Security.Cryptography.CryptographicException: The system cannot find the file specified.
因此,我们通过将 "Trust"
指定为:
"Trust"
是正确答案
using (X509Store store = new X509Store("Trust", StoreLocation.CurrentUser))
{
store.Open(OpenFlags.ReadWrite | OpenFlags.OpenExistingOnly);
...
}
(请注意,这不太适合在 Linux (.NET Core) 上使用,因为只有 Windows 预初始化存储)
我们可以通过 certutil.exe
命令行实用程序确认显示名称的编程名称:
>certutil -store trust
trust "Enterprise Trust"
CertUtil: -store command completed successfully.
(我只是那家店里什么都没有)