zoukankan      html  css  js  c++  java
  • 关于密码学算法与数字证书相关的文章

    图片来源:三张图让你全面掌握加密解密技术

    什么是公钥和私钥?

    公钥和私钥就是俗称的不对称加密方式。公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。

    通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,则必须用另一个密钥才能解密。比如用公钥加密的数据就必须用私钥才能解密,如果用私钥进行加密也必须用公钥才能解密,否则将无法成功解密。

    数字证书的原理

    数字证书采用公钥体制,即利用一对互相匹配的密钥对进行加密、解密。每个用户自己设定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。

    由于密钥仅为本人所有,这样就产生了别人无法生成的文件,也就形成了数字签名。

    数字证书是一个经证书授权中心(CA)数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。

    主流数字证书都有哪些格式?

    一般来说,主流的Web服务软件,通常都基于OpenSSL和Java两种基础密码库。

    • Tomcat、Weblogic、JBoss等Web服务软件,一般使用Java提供的密码库。通过Java Development Kit (JDK)工具包中的Keytool工具,生成Java Keystore(JKS)格式的证书文件。
    • Apache、Nginx等Web服务软件,一般使用OpenSSL工具提供的密码库,生成PEM、KEY、CRT等格式的证书文件。
    • IBM的Web服务产品,如Websphere、IBM Http Server(IHS)等,一般使用IBM产品自带的iKeyman工具,生成KDB格式的证书文件。
    • 微软Windows Server中的Internet Information Services(IIS)服务,使用Windows自带的证书库生成PFX格式的证书文件。

    如何判断证书文件是文本格式还是二进制格式?

    您可以使用以下方法简单区分带有后缀扩展名的证书文件:

    • *.DER或*.CER文件: 这样的证书文件是二进制格式,只含有证书信息,不包含私钥。
    • *.CRT文件: 这样的证书文件可以是二进制格式,也可以是文本格式,一般均为文本格式,功能与 *.DER及*.CER证书文件相同。
    • *.PEM文件: 这样的证书文件一般是文本格式,可以存放证书或私钥,或者两者都包含。 *.PEM 文件如果只包含私钥,一般用*.KEY文件代替。
    • *.PFX或*.P12文件: 这样的证书文件是二进制格式,同时包含证书和私钥,且一般有密码保护。

    密钥管理工具

    MakeCert(已过期,推荐使用 Powershell New-SelfSignedCertificate)
    微软证书创建工具生成仅用于测试目的的 X.509 证书。它创建用于数字签名的公钥和私钥对,并将其存储在证书文件中。此工具还将密钥对与指定发行者的名称相关联,并创建一个 X.509 证书,该证书将用户指定的名称绑定到密钥对的公共部分。

    OpenSSL
    OpenSSL 是一个强大且应用广泛的安全基础库工具。

    OpenSSL 创建RSA私钥 (2048位)
    openssl genrsa -out  private_key.pem 2048
    openssl rsa -in private_key.pem -pubout -out public_key.pem

    Keytool
    Keytool工具是 JDK 中自带的密钥管理工具,可以制作Keystore(jks)格式的证书文件,可以从下载JDK工具包来获取Keytool工具。

    证书格式转换

    以下证书格式之间是可以互相转换的

    image

    • 将JKS格式证书转换成PFX格式

      您可以使用JDK中自带的Keytool工具,将JKS格式证书文件转换成PFX格式。例如,您可以执行以下命令将 server.jks证书文件转换成server.pfx证书文件:

      keytool -importkeystore -srckeystore D:server.jks -destkeystore D:server.pfx
              -srcstoretype JKS -deststoretype PKCS12
    • 将PFX格式证书转换为JKS格式

      您可以使用JDK中自带的Keytool工具,将PFX格式证书文件转换成JKS格式。例如,您可以执行以下命令将 server.pfx证书文件转换成server.jks证书文件:

      keytool -importkeystore -srckeystore D:server.pfx -destkeystore D:server.jks
              -srcstoretype PKCS12 -deststoretype JKS
    • 将PEM/KEY/CRT格式证书转换为PFX格式

      您可以使用 OpenSSL工具,将KEY格式密钥文件和CRT格式公钥文件转换成PFX格式证书文件。例如,将您的KEY格式密钥文件(server.key)和CRT格式公钥文件(server.crt)拷贝至OpenSSL工具安装目录,使用OpenSSL工具执行以下命令将证书转换成server.pfx证书文件:

      openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
    • 将PFX转换为PEM/KEY/CRT

      您可以使用 OpenSSL工具,将PFX格式证书文件转化为KEY格式密钥文件和CRT格式公钥文件。例如,将您的PFX格式证书文件拷贝至OpenSSL安装目录,使用OpenSSL工具执行以下命令将证书转换成server.pem证书文件KEY格式密钥文件(server.key)和CRT格式公钥文件(server.crt):

      openssl pkcs12 -in server.pfx -nodes -out server.pem
      openssl rsa -in server.pem -out server.key
      openssl x509 -in server.pem -out server.crt

    REFER:
    数字证书原理
    http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html
    数字签名是什么?
    http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
    数字证书常见标准
    https://www.cnblogs.com/cuimiemie/p/6442685.html
    keytool和openssl生成的证书转换
    https://www.cnblogs.com/cuimiemie/p/6442668.html
    数字证书应用综合揭秘(包括证书生成、加密、解密、签名、验签)
    https://www.cnblogs.com/leslies2/p/7442956.html
    浅谈常见的七种加密算法及实现
    https://juejin.im/post/5b48b0d7e51d4519962ea383
    证书及证书管理(keytool工具实例)
    https://www.cnblogs.com/benwu/articles/4891758.html
    https://www.alibabacloud.com/help/zh/faq-detail/42214.htm

    https://github.com/google/tink

  • 相关阅读:
    ZOJ2334 Monkey King 并查集 STL
    ZOJ2286 Sum of Divisors 筛选式打表
    ZOJ2105 终于找到错误
    ZOJ-2091-Mean of Subsequence (反证法的运用!!)
    【9929】潜水员
    【9928】混合背包
    【t077】宝物筛选
    【9927】庆功会
    【9926】完全背包
    【9925】0/1背包
  • 原文地址:https://www.cnblogs.com/Irving/p/9442247.html
Copyright © 2011-2022 走看看