[英]automate installation of p12 certificate file
我的目标是在没有任何用户交互的情况下自动安装证书。
要求:
代码:
using System.Security.Cryptography.X509Certificates;
X509Certificate2 cert = new X509Certificate2(
"file.p12", "password",
X509KeyStorageFlags.UserProtected
| X509KeyStorageFlags.UserKeySet
| X509KeyStorageFlags.Exportable);
X509Store store = new X509Store(StoreName.My);
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
上面的代码在个人商店下为当前用户安装证书,并且能够管理第一个 gui:截图 - 证书导入向导
但它无法设置安全级别,而是打开了一个 gui: Screenshot2
编辑:
实际上还有另一种方法可以通过 UWP 使用,称为 "UserCertificateEnrollmentManager.ImportPfxDataAsync Method" Link 。 “KeyProtectionLevel Enum”在这里为您提供“ConsentWithPassword”选项,但 UWP 对我来说是全新的,我更愿意坚持使用控制台 .net
使用 UWP 进行测试会显示一个额外的“UWP 样式”对话框,请求同意证书操作,然后要求创建密码,因此它会跳过屏幕截图 2 中显示的 GUI。 不知道有没有用?
private async Task<string> PickPfx()
{
var openPicker = new FileOpenPicker()
{
ViewMode = PickerViewMode.List,
SuggestedStartLocation = PickerLocationId.Desktop,
};
openPicker.FileTypeFilter.Add(".pfx");
openPicker.FileTypeFilter.Add(".p12");
var file = await openPicker.PickSingleFileAsync();
if (file == null)
return null;
int length = (int)(await file.GetBasicPropertiesAsync()).Size;
byte[] bytes = new byte[length];
using (var stream = await file.OpenStreamForReadAsync())
{
await stream.ReadAsync(bytes, 0, length);
}
return Convert.ToBase64String(bytes);
}
private async void InstallCert_Click(object sender, RoutedEventArgs e)
{
const string CERT_PASS = "123test";
string pfx64 = await PickPfx();
if (pfx64 == null)
return;
var importParams = new PfxImportParameters()
{
Exportable = ExportOption.Exportable,
FriendlyName = "My test cert",
KeyProtectionLevel = KeyProtectionLevel.ConsentWithPassword,
};
var ucem = CertificateEnrollmentManager.UserCertificateEnrollmentManager;
await ucem.ImportPfxDataAsync(pfx64, CERT_PASS, importParams);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.