开发者社区> 优惠券活动> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介:
+关注继续查看

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工具类之在服务器发送HTTP请求
版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80880234 使用之前首先添加maven依赖或者是jar包 org.
1484 0
Http请求和响应的编码问题
前言: 今天来谈谈Tomcat服务器和网页之间编码和解码之间的关系。关于URL编码的问题可以看链接:廖雪峰修正:百度现在编码也是UTF-8 关于编码之间的转换问题可以看链接:编码转换问题 浏览器端的编码: 默认解码是GB2312影响form提交数据的编码的因素包括:form的accept-charset属性、html文档的编码方案即document.charset。
8686 0
Http的请求流程
一次Http请求过程 客户端在输入域名后通过DNS服务器解析得到IP地址;得到IP地址后,通过三次握手进行TCP/IP连接;之后就进行通信。 TCP三次握手 TCP在建立连接的时候需要三次握手,第一次握手将Client标志位SY...
757 0
tornado学习笔记(1)HTTP请求及API测试
  Tornado是现在的主流 Web 服务器框架,它与大多数 Python 的框架有着明显的区别:它是非阻塞式服务器,而且速度相当快。
1550 0
高德地图web端笔记;发送http请求的工具类
1.查询所有电子围栏 package com.skjd.util; import java.io.BufferedReader; import java.io.InputStream; import java.
1470 0
Springboot用RestTemplate发送http请求
有时候后端需要接收别人的数据时,springboot也可以做到,一般是使用RestTemplate 需要先引入httpclient依赖 在pom.xml中加入如下代码(版本一般选择比较新的) org.
2653 0
+关注
优惠券活动
阿里云优惠码阿里云推荐券bieryun.com
393
文章
9
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载