Fork me on GitHub

关于密码学算法与数字证书相关的文章

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

什么是公钥和私钥?

公钥和私钥就是俗称的不对称加密方式。公钥(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

posted @ 2018-08-08 13:28  花儿笑弯了腰  阅读(532)  评论(0编辑  收藏  举报