有时候在本地搞个http转https协议耍耍,购买域名又有点不划算,openssl和网络上的工具又有点花里胡哨,就找到了这个方法,简单易上手,使用java自带的keytool.exe(jdk1.4之后)工具生成SSL证书。
自己在做demo项目可以,做生产还是建议购买正规域名。
1,生成证书(demo.p12)
1.1,在jdk的bin目录下,打开cmd窗口并执行命令,生成.p12文件后建议留个备份
keytool.exe -genkey -alias demo -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore demo.p12 -validity 3650
示例
1.2,命令参数说明
-genkey: 生成SSL证书
-alias: 证书别名 后面配置要用
-storetype: 秘钥仓库类型
-keyalg: 生成证书算法
-keysize: 证书大小
-keystore: 生成证书保存路径
-validity: 证书有效期
2,spring boot的相关配置
2.1,application.yml
server:
port: 8080
ssl:
key-store: D:/SoftwareForJava/demo.p12 #证书路径+文件名称,我这里是本地项目,写的是绝对路径,可以考虑用classpath指定路径
key-store-type: PKCS12 #密钥文件类型,可不写
key-store-password: ggbbk123456 #密码,这里是上面设置的密钥
key-alias: demo #证书别名
enabled: true
2.2,pom.xml
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<!-- 过滤后缀为pem、pfx的证书文件 -->
<nonFilteredFileExtensions>
<nonFilteredFileExtension>p12</nonFilteredFileExtension>
<nonFilteredFileExtension>pem</nonFilteredFileExtension>
<nonFilteredFileExtension>pfx</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
</build>
3,碰到的问题
3.1,生成证书时,最后提示被拒绝
本人的JDK是安装在C盘,这个位置是不被允许的,换了D盘的就好了,我使用的是IDEA的keytool.exe
3.2,启动报错,提示too big
在build标签里加上
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
</resources>
.p12文件是无需maven编译的,filtering标签默认是false但不排除特殊情况(特别是在公司里),注意报错后此被引用的文件已经损坏;
加上此配置后记得把备份复制过来覆盖之前读取的文件。
这时候就可以在本地使用https协议了:
http://localhost:8080 ==>> https://localhost:8080
感谢这位大佬提供的思路:
https://blog.csdn.net/weixin_42009068/article/details/104749324