欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数字证书

程序员文章站 2022-07-12 21:56:16
...

定义

  不对称算法

    公钥
    私钥

  证书

    证书的颁发机构的信息
      本证书的颁发机构标识
      颁发机构对本证书的签名得到的加密结果
    证书拥有者的信息
      标识
      公钥
    证书用到的算法
      散列算法
      不对称算法

  颁发机构

    给本证书签名的父证书与父证书的私钥的拥有者
      CA
      证书链
        根证书
          国际认证机构

  颁发主体

    本证书与其私钥的拥有者
      厂商
      软件发行者

  签名

    使用证书指定的算法对信息进行散列与不对称加密
    生成结果:
      用到的证书
      加密结果

  存储区

    是保留和管理证书的物理存储区
      StoreLocation
        LocalMachine
        CurrentUser
      StoreName
        Root
        My
        AddressBook
        AuthRoot
        CertificateAuthority
        Disallowed
        TrustedPeople
        TrustedPublisher

  **容器

    包含一个/对**与存储所需的相关信息:
      是否允许导出**

      **种类


工具

  CertMgr.msc
  MMC.exe
  MakeCert.exe
  Cert2Spc.exe
  SignTool.exe
  pvk2pfx.exe


解决

  颁发机构与厂商各藏有自己私有的私钥
  用户有颁发机构的公钥
  用户的操作系统中安装了知名颁发机构的证书
  信任关系可以传递
  厂商发布的产品若已签名,则此签名的安全信任关系可以一直追踪到用户信任的颁发机构,则此产品是安全的


实践

  测试

    创建自签名的发行证书同时导入本地计算机
      makecert -r -n "CN=我的自签名发行证书" -ss root
    使用此证书对ActiveX控件进行签名
      signtool sign /s root /n "我的自签名发行证书" MyMFCActiveXControl.ocx

  模拟

    模拟颁发机构
      创建自签名的根证书
        makecert -r -n "CN=模拟颁发机构根证书" -sv myroot.pvk myroot.cer
      创建使用根证书签名的厂商发行证书
        makecert -n "CN=模拟厂商发行证书" -iv myroot.pvk -ic myroot.cer -sv myspc.pvk myspc.cer
        cert2spc myspc.cer myspc.spc
        pvk2pfx -pvk myspc.pvk -pi 456 -po 456 -spc myspc.spc -pfx myspc.pfx
        拿到.pfx文件即可
    模拟厂商
      signtool sign /f myspc.pfx /p 456 test.ocx
    模拟用户
      将myroot.cer安装到“受信任的根证书颁发机构”存储区下
      使用厂商发行的软件

  正式

    厂商向证书颁发机构申请发行证书,得到.pfx文件后对发行软件进行签名。

应用

加解密

    class Program
    {
        static void Main(string[] args)
        {
            //实例化CspParameters对象
            var cspPara = new CspParameters
                {
                    //如果在证书库中此名称对应的**容器已经存在,RSA对象会使用这个**容器中的**进行实例化,否则会创建这个**容器
                    KeyContainerName = "myPK"
                };

            //加密解密用到的公钥与私钥 
            var rsa = new RSACryptoServiceProvider(cspPara);
            var publicKeyAndPrivateKey = rsa.ToXmlString(true);//私钥与公钥
            var publicKeyOnly = rsa.ToXmlString(false);//公钥 

            //需要加密的数据
            const string text = "你好";
            Console.WriteLine("要加密的文本:{0}",text);

            //公钥加密 
            var rsa1 = new RSACryptoServiceProvider();
            rsa1.FromXmlString(publicKeyOnly); //加密要用到公钥所以导入公钥 
            var cypherSource = Encoding.UTF8.GetBytes(text);
            var cypherResult = rsa1.Encrypt(cypherSource, false); //AOutput 加密以后的数据 

            //私钥解密
            var rsa2 = new RSACryptoServiceProvider();
            rsa2.FromXmlString(publicKeyAndPrivateKey);
            var plainResult = rsa2.Decrypt(cypherResult, false);
            var plainText = Encoding.UTF8.GetString(plainResult);
            Console.WriteLine("解密后的文本:{0}", plainText);
        }
    }


ActiveX

  若浏览的远程网页中包含未使用正规证书签名开发的ActiveX,则必须在访客端的浏览器上做以下设置:

    允许IE使用控件
      将站点加入可信站点(去除https限制选项框)
      将Internet级别降低为中(原为中高)
    允许脚本与控件交互
      设置
        对未标识为可安全执行脚本的ActiveX控件初始化并执行脚本
    允许IE下载并安装控件
      设置

        下载未签名的ActiveX控件

在Windwos中管理证书

cermgr.msc
mmc

使用代码安装证书


var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser); 
store.Open(OpenFlags.ReadWrite);
var certificate = new X509Certificate2(@"cer.cer");
store.Add(certificate);
store.Close();

参考

  .NET中非对称加密RSA算法的**保存
    
  数字签名、数字信封和数字证书
    
  签名工具 (SignTool.exe)
    
 证书创建工具(MakeCert.exe)
    
  微软代码签名证书使用指南
    
  ActiveX控件打包成Cab置于网页中自动下载安装

    

创建X509证书,并获取证书**的一点研究

思维导图下载

转载于:https://www.cnblogs.com/beta2013/archive/2013/04/08/3377268.html