图片来源:三张图让你全面掌握加密解密技术html
什么是公钥和私钥?java
公钥和私钥就是俗称的不对称加密方式。公钥(Public Key)与私钥(Private Key)是经过一种算法获得的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥一般用于加密会话密钥、验证数字签名,或加密能够用相应的私钥解密的数据。node
经过这种算法获得的密钥对能保证在世界范围内是惟一的。使用这个密钥对的时候,若是用其中一个密钥加密一段数据,则必须用另外一个密钥才能解密。好比用公钥加密的数据就必须用私钥才能解密,若是用私钥进行加密也必须用公钥才能解密,不然将没法成功解密。git
数字证书的原理github
数字证书采用公钥体制,即利用一对互相匹配的密钥对进行加密、解密。每一个用户本身设定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。算法
因为密钥仅为本人全部,这样就产生了别人没法生成的文件,也就造成了数字签名。shell
数字证书是一个经证书受权中心(CA)数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书受权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。windows
主流数字证书都有哪些格式?安全
通常来讲,主流的Web服务软件,一般都基于OpenSSL和Java两种基础密码库。oracle
如何判断证书文件是文本格式仍是二进制格式?
您可使用如下方法简单区分带有后缀扩展名的证书文件:
密钥管理工具
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工具。
证书格式转换
如下证书格式之间是能够互相转换的
您可使用JDK中自带的Keytool工具,将JKS格式证书文件转换成PFX格式。例如,您能够执行如下命令将 server.jks证书文件转换成server.pfx证书文件:
keytool -importkeystore -srckeystore D:\server.jks -destkeystore D:\server.pfx
-srcstoretype JKS -deststoretype PKCS12
您可使用JDK中自带的Keytool工具,将PFX格式证书文件转换成JKS格式。例如,您能够执行如下命令将 server.pfx证书文件转换成server.jks证书文件:
keytool -importkeystore -srckeystore D:\server.pfx -destkeystore D:\server.jks
-srcstoretype PKCS12 -deststoretype JKS
您可使用 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
您可使用 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
数字证书常见标准
http://www.javashuo.com/article/p-ytojebef-o.html
keytool和openssl生成的证书转换
http://www.javashuo.com/article/p-bvmusymq-dh.html
数字证书应用综合揭秘(包括证书生成、加密、解密、签名、验签)
http://www.javashuo.com/article/p-gwfgcrxz-bq.html
浅谈常见的七种加密算法及实现
http://www.javashuo.com/article/p-waofxqez-bn.html
证书及证书管理(keytool工具实例)
https://www.cnblogs.com/benwu/articles/4891758.html
https://www.alibabacloud.com/help/zh/faq-detail/42214.htmhttps://github.com/google/tink