HTTPS之密钥知识与密钥工具Keytool和Keystore-Explorer

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

HTTPS之密钥知识与密钥工具Keytool和Keystore-Explorer

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) 访问。密钥工具有命令行工具和可视化工具,大家按自己需求选择。

原文地址https://www.cnblogs.com/larrydpk/p/12785977.html

相关文章
|
Java
百度搜索:蓝易云【hutool Http 工具发送POST请求的几种方式。】
以上是使用Hutool发送POST请求的几种方式。根据实际需求和代码复杂度,选择合适的方式来发送POST请求。
319 0
|
2月前
|
存储 缓存 安全
https访问提示不安全,证书密钥验证上如何解决
【10月更文挑战第4天】访问提示不安全,证书密钥验证上如何解决
379 2
|
4月前
|
Web App开发 存储
常见抓包工具配置抓取HTTPS
常见抓包工具配置抓取HTTPS
|
6月前
|
运维 Java Serverless
Serverless 应用引擎产品使用合集之是否提供工具来给OSS配置HTTPS证书
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
7月前
|
算法 安全 网络协议
https原理--RSA密钥协商算法
https原理--RSA密钥协商算法
94 0
|
7月前
|
Web App开发 前端开发 网络安全
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
【2月更文挑战第21天】前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
110 1
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
|
7月前
|
API Python
Python 工具和库:如何使用 requests 库发送 HTTP 请求?
Python 工具和库:如何使用 requests 库发送 HTTP 请求?
80 0
|
7月前
|
Windows
Windows【工具 01】视频下载工具BBDown.exe详细使用说明(https://github.com/nilaoda/BBDown)mp4格式无法识别问题处理(最新版本1.6.1网盘分享)
Windows【工具 01】视频下载工具BBDown.exe详细使用说明(https://github.com/nilaoda/BBDown)mp4格式无法识别问题处理(最新版本1.6.1网盘分享)
599 0
|
7月前
|
资源调度 前端开发 JavaScript
Axios大揭秘:咱们怎么玩转这个牛X的HTTP工具
Axios大揭秘:咱们怎么玩转这个牛X的HTTP工具
71 0
|
Rust Dubbo 网络协议
通过 HTTP/2 协议案例学习 Java & Netty 性能调优:工具、技巧与方法论
通过 HTTP/2 协议案例学习 Java & Netty 性能调优:工具、技巧与方法论
12657 12