证书准备
首先需要生成一个 SSL 证书,可以使用 OpenSSL 工具或者自己的 CA 颁发机构来生成证书,这里就不赘述了。如果是测试阶段,也可以使用 self-signed certificate。
直接使用jdk的keytool生成,具体操作方法如下:
- 使用管理员身份运行命令提示符
- 使用命令进入到jdk安装路径的bin文件夹下
- 随后使用命令:keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650生成密钥。
以上步骤如下图所示:
生成的证书如下:
把它粘贴到项目的classpath下即可使用。
项目配置
把证书文件移动到此:
而后在application.yml中进行一些配置:
注意key-store-password
不要写成key-password
了。
server:
ssl:
enabled: true #启用SSL
key-store: classpath:keystore.p12 #文件位置
key-store-password: root123 #密钥存储密码(即生成时要求输入两遍的那个的密钥库口令)
key-store-type: PKCS12 #密钥存储类型
重启项目,启动成功即说明配置成功。
访问项目原来的swagger界面测试一下。
出现以上说明正确。
在前面加上前缀https://
再试一次,可能会出现如下界面:
由于访问的是 HTTPS,浏览器会进行 SSL 验证,如果服务器没有配置合法的 SSL 证书,浏览器会给出安全警告。如果只是测试阶段,可以先信任自己的 SSL 证书,例如在 Chrome 中将证书添加到受信任的根证书颁发机构中。生产环境中,则需要购买合法的 SSL 证书。
此处我们是个人测试,故而点击详情直接访问即可。
成功进入swagger界面:
测试接口,发现已经成功放入HTTPS了:
前端怎么做?
前端访问 HTTPS 上的接口与 HTTP 上的接口是类似的,只需要将 URL 中的 http 改成 https。例如,如果原本访问的是 http://localhost:8080/api/user,修改为 https://localhost:8080/api/user 即可。
这里需要注意一个问题:HTTP默认端口是80,而HTTPS默认端口是443,建议指定端口,避免搞错。