SpringBoot 配置 SSL 证书实现 https 访问

生成 ssl 证书

keytool.exe -genkey -alias test -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore test.p12 -validity 3650

完整过程:

C:\Users\Mr yang>keytool.exe -genkey -alias test -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore test.p12 -validity 3650
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
  [Unknown]:  li
您的组织单位名称是什么?
  [Unknown]:  yz
您的组织名称是什么?
  [Unknown]:  yz
您所在的城市或区域名称是什么?
  [Unknown]:  gz
您所在的省/市/自治区名称是什么?
  [Unknown]:  gd
该单位的双字母国家/地区代码是什么?
  [Unknown]:  china
CN=li, OU=yz, O=yz, L=gz, ST=gd, C=china是否正确?
  []:  y

-genkey: 生成SSL证书
-alias: 证书别名
-storetype: 秘钥仓库类型
-keyalg: 生成证书算法
-keysize: 证书大小
-keystore: 生成证书保存路径
-validity: 证书有效期

因为没有指定存储路径,默认以命令执行路径作为证书保存路径,生成完成 C:\Users\Mr yang 下即可找到名为 test.p12 的证书文件

配置 ssl 证书

把证书放到资源根中
在这里插入图片描述

增加配置项:

# ssl证书路径
server.ssl.key-store=classpath:test.p12
# 别名
server.ssl.key-alias=test
# 证书设置密码
server.ssl.key-store-password=123456

访问测试

http 访问失败
在这里插入图片描述

https 访问成功

把证书添加到信任库

因为是用 keytools 生成的,所以并不被认可,此时可以通过手动的方式奖服务器证书导入到客户端的信任证书库中,让客户端信任这个证书

keytool -import -alias client -file test.cer -keystore servertrust.keystore

-file 要导入的证书文件(test.cer 既从服务端下载的证书)
-keystore 要导入的证书库(servertrust.keystore 既服务信任证书库)

完整过程:

C:\Users\Mr yang>keytool -import -alias client -file test.cer -keystore servertrust.keystore
输入密钥库口令:
再次输入新口令:
所有者: CN=li, OU=yz, O=yz, L=gz, ST=gd, C=china
发布者: CN=li, OU=yz, O=yz, L=gz, ST=gd, C=china
序列号: 14658239
有效期为 Mon Jul 04 08:53:07 CST 2022 至 Thu Jul 01 08:53:07 CST 2032
证书指纹:
         MD5:  89:B5:25:EA:75:FF:ED:9D:A8:74:03:20:D5:30:EE:D6
         SHA1: A9:2C:A2:47:DB:E5:57:0C:69:93:B1:D5:23:B7:BC:F2:CD:06:79:9D
         SHA256: CE:70:3F:C2:92:49:4C:6F:44:17:E2:FC:3B:71:9C:0F:A7:77:EC:05:1F:79:AA:16:20:41:AA:EF:DC:89:62:1D
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 61 7F C3 51 C1 39 FD C1   0B 6B 02 71 97 0E 20 42  a..Q.9...k.q.. B
0010: E4 81 4A AD                                        ..J.
]
]

是否信任此证书? []:  y
证书已添加到密钥库中

查看某个库的信任证书列表

key -list -v -keystore server.keystore

拓展

TLS 握手过程

发送https请求的时候,还是要与http一样先走TCP的三次握手:在这里插入图片描述
然后就开始TLS握手:TLS握手过程包含了非对称加密和对称加密两种方式
在这里插入图片描述
① 客户端发送自己支持的TLS版本、自己的加密套件(可以理解为不同的加密算法组合)和一个随机数(第一随机数)
② 服务端接收到后,保存第一随机数,响应自己确认的TLS版本、选择的加密套件和一个随机数(第二随机数)
③ 服务端发送自己的ssl证书
④ 服务端发送自己的公钥
⑤ 服务端发送完成信号
⑥ 客户端保存服务端发送过来的第二随机数和公钥、响应一个随机数(第三随机数/预主密钥)回去。
⑦ 服务端此时就用第一随机数+第二随机数+第三随机数通过加密套件生成一个会话密钥,客户端同样如此操作,生成的会话密钥是对称的。此后的数据传输就用这个会话密钥加密数据

所以TLS是先用非对称的方式加密预主密钥,最终是用对称加密的方式传递数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值