一、生成Https协议需要的证书
https生成私钥和crt证书文件,可以参考之前的博客使用Nginx搭建旁路服务器获取客户端真实IP,不过Spring Boot项目不能直接使用crt证书,可以通过openssl命令将crt证书转成pkcs12类型证书
。
在openssl安装bin目录下通过CMD窗口执行如下命令:
openssl pkcs12 -export -in nginx-https.crt -inkey nginx-https.key.unsecure -out spring-boot.pkcs12
执行截图如下:
注意:执行过程中需要输入密码,请记住自己设置的密码,后面需要使用
。
二、Spring Boot项目配置
将上面生成的pkcs12类型证书文件拷贝到Spring Boot项目的resource目录
下:
yaml文件中增加ssl相关配置:
server:
port: 7090
ssl:
enabled: true
key-store: classpath:spring-boot.pkcs12
key-store-type: pkcs12
key-store-password: 123456 # 生成pkcs12证书时设置的密码
三、Https协议测试
1. 编写测试代码
@RestController
public class HelloController {
@GetMapping("https")
public String https() {
return "hello, https!!!";
}
}
2. 启动项目
注意:如果JDK版本过低,项目启动会报如下错误:
Caused by: java.io.IOException: ObjectIdentifier() -- data isn't an object ID (tag = 48)
at sun.security.util.ObjectIdentifier.<init>(ObjectIdentifier.java:253) ~[na:1.8.0_77]
at sun.security.util.DerInputStream.getOID(DerInputStream.java:281) ~[na:1.8.0_77]
at com.sun.crypto.provider.PBES2Parameters.engineInit(PBES2Parameters.java:267) ~[sunjce_provider.jar:1.8.0_71]
at java.security.AlgorithmParameters.init(AlgorithmParameters.java:293) ~[na:1.8.0_77]
at sun.security.pkcs12.PKCS12KeyStore.parseAlgParameters(PKCS12KeyStore.java:788) ~[na:1.8.0_77]
... 34 common frames omitted
此时需要升级JDK版本,JDK官网下载地址
我本地Java版本: