• 数字证书


    定义

      不对称算法

        公钥
        私钥

      证书

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

      颁发机构

        给本证书签名的父证书与父证书的私钥的拥有者
          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证书,并获取证书密钥的一点研究

    思维导图下载

  • 相关阅读:
    android中Canvas使用drawBitmap绘制图片
    Java Metrics
    HDU 1051:Wooden Sticks
    APK ubuntu下 数字签名
    Qt计算器开发(二):信号槽实现数学表达式合法性检查
    session销毁
    C#多线程编程实例 螺纹与窗口交互
    POJ 1176 Party Lamps (DFS)
    Oracle 六闪回技术,flashback
    can't connect to mysql server on localhost <10061>
  • 原文地址:https://www.cnblogs.com/beta2013/p/3377268.html
Copyright © 2020-2023  润新知