内容简介:之前文章《这部分知识非常重要,理解了关键的密钥知识,才能更好地在工作中去使用。需要注意的是,讲的主要是非对称加密的知识,对称加密比较好理解,就不讲述了。(1)对于非对称加密,密钥分为
1 简介
之前文章《 Springboot整合https原来这么简单 》讲解过一些基础的密码学知识和 Springboot
整合 HTTPS
。本文将更深入讲解密钥知识和密钥工具。
2 密钥知识-非对称加密
这部分知识非常重要,理解了关键的密钥知识,才能更好地在工作中去使用。需要注意的是,讲的主要是非对称加密的知识,对称加密比较好理解,就不讲述了。
(1)对于非对称加密,密钥分为 私钥(private key) 和 公钥(public key) ,它们是成对出现的,缺一不可,少一个都无法正常工作。
(2)如果用公钥加密,就必须使用对应的私钥解密,反之亦然。
(3)通常,私钥是自己才拥有,公钥是对外公开发布。因此,在服务器端一般我们使用的是私钥,而在客户端我们使用的则为公钥。所以我们是在服务端使用私钥对来自客户端的用公钥加密的数据进行解密,哈哈,这句话很绕。
(4)即使把公钥公开了,只要密钥长度合理(一般是1024或2048),目前的技术是无法通过公钥来计算出私钥的,所以我们认为它是安全的。
(5)那么我们通过什么来加密、什么来解密呢?从功能上来说,既可以用公钥加密、私钥解密,也可以用私钥加密,公钥解密。但实际上,通常采用的是 公钥加密、私钥解密 ,因为只想密文只有我知道,不希望别人也能获得我的信息,所以要使用私钥来加密。试想想,如果把用私钥加密后的信息暴露出去,而大家都可以拥有公钥,也就意味着大家都可以解密,那我的加密还有什么意义呢?
(6)对于 签名 功能,我不希望有人来冒充我来签名,所以是 私钥签名,公钥验证 ,这样才能确保签名只属于一个人呀,如果用公钥来签名,那不是大家都可以是 南瓜慢说 呢?
(7)非对称加密是运算效率比较低的,为了提高效率,可以采用这样的方案:使用非对称加密来交换密钥Key,然后用密钥Key来进行对称加密。不难理解,这个密钥是由客户端生成的,如果服务端来生成,那大家都知道了这个密钥,就失去了意义。
(8)密钥文件是用于存放私钥和公钥的文件,我们可以把私钥和公钥放一起,也可以分开放。而密钥文件有许多格式: jks
、 p12
、 pem
、 cert
等,要根据不用的服务器和客户端选取。
(9)一个密钥文件是可以同时存放多个私钥和公钥的,如 .jks
文件可以同时存放 localhost
和 www.pkslow.com
的私钥。但要注意别名和 CN
名是不同的。
(10)生成cert文件的两种方式:
第一种:自己生成密钥和 CSR(Certificate Signing Request,证书签名请求文件) ,把CSR给CA机构,机构会生成一个cert文件给你,然后要把该cert文件导入到自己的密钥文件里。
第二种:直接在CA生成所有,然后会给回private key和cert文件,配置到服务器端使用即可。
(11)如何更新将要过期的cert?
Private Key没有过期时间,可以通过自己的private key生成新的CSR,然后给CA重新生成cert;或者private key也重新生成,参加上面一条。
(12)更新了cert,客户端要不要做什么?
如果是通过CA来验证的,是不需要的。如果是Self-Signed的,需要把cert给客户端然后导入到客户端的密钥文件里。
(13)作为文本格式的时候,密钥的格式如下:
Private Key文件:
-----BEGIN ENCRYPTED PRIVATE KEY----- XXX -----END ENCRYPTED PRIVATE KEY-----
CSR文件:
-----BEGIN CERTIFICATE REQUEST----- XXX -----END CERTIFICATE REQUEST-----
Public key文件:
-----BEGIN PUBLIC KEY----- XXX -----END PUBLIC KEY-----
Cert文件:
-----BEGIN CERTIFICATE----- XXX -----END CERTIFICATE-----
3 密钥工具
密钥 工具 有许多,常用的有 openssl
和 keytool
。
3.1 keytool常用命令
keytool
是JDK提供的密钥命令行工具,功能强大,语义清晰明了。常用的命令有:
# 生成一个密钥对 keytool -genkey -alias localhost -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -keystore localhost.jks -dname CN=localhost,OU=Test,O=pkslow,L=Guangzhou,C=CN -validity 731 -storepass changeit -keypass changeit # 生成CSR文件 keytool -certreq -alias localhost -file localhost.csr -keystore localhost.jks -storepass changeit # 导出一个cert文件 keytool -export -alias xxx -file xxx.cer -keystore xxx.jks #导入一个cert文件 keytool -import -alais xxx -file xxx.cer -keystore xxx.jks # 查看cert列表详情 keytool -list -v -keystore xxx.p12 -storepass changeit -storetype PKCS12 keytool -list -v -keystore xxx.jks -storepass changeit -storetype JKS #转换JKS格式为P12 keytool -importkeystore -srckeystore xxx.jks -destkeystore xxx.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass changeit -deststorepassword changeit -srckeypass changeit -destkeypass changeit -srcalias xxx -destalias xxx -noprompt
更多命令请参考帮助文档或网上吧。
3.2 可视化工具Keystore Explorer
在 Linux 终端等只能通过命令行方式来操作密钥,但命令和参数这么多,记住是不太可能的,那总不能每次都要上网查吧,万一连不上网了呢?
还好有优秀免费的可视化工具 Keystore Explorer ,官方网址为 https://keystore-explorer.org/index.html ,可以在Windows或Mac开发使用,最后再把文件上传到服务器即可。界面如下:
非常简单易用又功能强大,大大减少了记忆劳动。不管是生成Key、导入导出、转换格式、生成CSR等,都很容易。所以,就不一一截图介绍了。
4 总结
本文主要讲解了密钥知识和密钥工具。密钥知识比较重要,暂时就想到这些,以后再慢慢补充,最新文章可以到(www.pkslow.com) 访问。密钥工具有命令行工具和可视化工具,大家按自己需求选择。
欢迎访问 南瓜慢说 www.pkslow.com 获取更多精彩文章!
欢迎关注微信公众号< 南瓜慢说 >,将持续为你更新...
多读书,多分享;多写作,多整理。
以上所述就是小编给大家介绍的《HTTPS之密钥知识与密钥工具Keytool和Keystore-Explorer》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- GitHound:一款针对GitHub的API密钥和敏感数据搜索工具
- 密钥繁多难记难管理?认识高效密钥管理体系
- 秘密的实质——密钥
- 密钥安全技术
- 密钥管理架构设计概述
- 代码审计 | SiteServerCMS密钥攻击
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
高扩展性网站的50条原则
[美] Martin L. Abbott、[美]Michael T. Fisher / 张欣、杨海玲 / 人民邮电出版社 / 2012-6-3 / 35.00元
《高扩展性网站的50条原则》给出了设计高扩展网站的50条原则,如不要过度设计、设计时就考虑扩展性、把方案简化3倍以上、减少DNS查找、尽可能减少对象等,每个原则都与不同的主题绑定在一起。大部分原则是面向技术的,只有少量原则解决的是与关键习惯和方法有关的问题,当然,每个原则都对构建可扩展的产品至关重要。 主要内容包括: 通过克隆、复制、分离功能和拆分数据集提高网站扩展性; 采用横向......一起来看看 《高扩展性网站的50条原则》 这本书的介绍吧!