• 证书导入和显示


    方式一,直接导入到证书管理器中,可选中导入地点,是否可导出等选项。

     1 /// <summary>
     2         /// 证书导入
     3         /// </summary>
     4         public static bool ImportCert(string certPath, string certPwd)
     5         {
     6             try
     7             {
     8                 //添加个人证书
     9                 X509Certificate2 certificate = new X509Certificate2(certPath, certPwd, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.UserKeySet | X509KeyStorageFlags.PersistKeySet);
    10                 X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
    11                 store.Open(OpenFlags.ReadWrite);
    12                 store.Remove(certificate);//可省略
    13                 store.Add(certificate);
    14                 store.Close();
    15                 return true;
    16             }
    17             catch
    18             {
    19                 return false;
    20             }
    21         }
    22 
    23 /// <summary>
    24         /// 证书导入
    25         /// </summary>
    26         public static bool ImportCert(byte[] certBytes, string certPwd)
    27         {
    28             try
    29             {
    30                 //添加个人证书
    31                 X509Certificate2 certificate = new X509Certificate2(certBytes, certPwd, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.UserKeySet | X509KeyStorageFlags.PersistKeySet);
    32                 X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
    33                 store.Open(OpenFlags.ReadWrite);
    34                 store.Remove(certificate);//可省略
    35                 store.Add(certificate);
    36                 store.Close();
    37                 return true;
    38             }
    39             catch
    40             {
    41                 return false;
    42             }
    43         }
    c#直接导入方式

    方式二,通过注册表导入,可将现有的证书导出byte[]数组的形式,然后在重新导入到另一台计算机。

     1 string Sub_Dir_Name = "BA5F0ABFE02EE1019C2C42080C99AB015D70EBFB";
     2                         if (Environment.Is64BitOperatingSystem)
     3                         {
     4                             Program.WriteLog("导入根证书64:");
     5                             RegistryKey hklm = Registry.LocalMachine.OpenSubKey(@"SOFTWAREWOW6432NodeMicrosoftSystemCertificatesAuthROOTCertificates", true);
     6 
     7                             RegistryKey aimdir = hklm.CreateSubKey(Sub_Dir_Name);
     8                             aimdir.SetValue(
     9                                 "Blob",
    10                                 Convert.FromBase64String(Key_Value)
    11                                 , RegistryValueKind.Binary);
    12                             Program.WriteLog("导入根证书64:");
    13                         }
    14                         else
    15                         {
    16                             Program.WriteLog("导入根证书32:");
    17                             RegistryKey hklm = Registry.LocalMachine.OpenSubKey(@"SOFTWAREMicrosoftSystemCertificatesAuthRootCertificates", true);
    18 
    19                             RegistryKey aimdir = hklm.CreateSubKey(Sub_Dir_Name);
    20                             aimdir.SetValue(
    21                                 "Blob",
    22                                 Convert.FromBase64String(Key_Value)
    23                                 , RegistryValueKind.Binary);
    24                             Program.WriteLog("导入根证书32:");
    25                         }
    注册表导入方式

    两种导入方式各有优劣,方式一简单易懂,方式二复杂,但是可以将当前设置的证书属性这些导入到计算机(如友好名称、证书目的、扩展的验证);根据需要各取所需。

        显示证书,可以用winfrom调用即可:

     1 try
     2             {
     3                 if (_smtpCertBytes != null)
     4                 {
     5                     X509Certificate2 cert = new X509Certificate2(_smtpCertBytes);
     6                     X509Certificate2UI.DisplayCertificate(cert);
     7                 }
     8             }
     9             catch (Exception)
    10             { }
  • 相关阅读:
    推荐一款国内首个开源全链路压测平台
    面试必备:接口自动化测试精选面试干货!
    测试开发:你所需要掌握了解的性能测试知识
    推荐一款自动化测试神器,不会写代码也能做!
    测试开发进阶:一文教你从0到1搞懂大数据测试!
    Java 在PPT中插入OLE对象
    Java 在Word中创建多级项目符号列表和编号列表
    C# / vb.net 给PDF 添加可视化和不可见数字签名
    Java 给Word添加印章
    Java 加载、操作和保存WPS文字文档
  • 原文地址:https://www.cnblogs.com/zuimengaitianya/p/8183862.html
Copyright © 2020-2023  润新知