使用 Java 提供的工具生成 jks 自签证书
keytool
是 Java Development Kit (JDK) 中的一个工具,用于管理公钥和私钥对以及相关的证书。以下命令用于生成一个密钥对并将其存储在密钥库中:
shell
keytool -genkeypair -alias www.example.com -keyalg RSA -keypass 123456 -storepass 123456 -keysize 2048 -validity 3650 -keystore www.example.com.jks
其中部分参数解释如下:
-genkeypair
告诉keytool
生成一个新的密钥对。-alias
为生成的密钥对指定一个别名,可填写网站域名。-keyalg
指定生成密钥对时使用的算法,这里是RSA
。-keypass
设置私钥的密码。-storepass
设置密钥库的密码。-keysize
指定RSA
密钥对的大小,这里是2048
位。这是一个常见的选择,因为它提供了足够的安全性,同时也在性能上是可接受的。-validity
设置证书的有效期,这里是3650
天,即大约10
年。-keystore
指定密钥库文件的名称和位置。
可选操作:将 jks
密钥库转为 pkcs12
类型。
shell
keytool -importkeystore -srckeystore www.example.com.jks -destkeystore www.example.com.pkcs12 -deststoretype pkcs12
配置 SpringBoot
将生成的 jks
或者 pkcs12
文件放到项目的 src/main/resources
目录下,在项目的 application.yml
配置文件中添加以下内容:
yml
# 开启 SSL
server.ssl.key-store: classpath:www.example.com.jks
server.ssl.key-store-password: 123456
server.ssl.key-store-type: JKS
server.ssl.key-alias: www.example.com
如果是 pkcs12
密钥库:
yml
# 开启 SSL
server.ssl.key-store: classpath:www.example.com.pkcs12
server.ssl.key-store-password: 123456
server.ssl.key-store-type: PKCS12
server.ssl.key-alias: www.example.com
这时候启动 springboot
如果读取密钥库报错,大概率是 maven
对密钥文件进行了重新编码导致的,需要将密钥文件排除。在 pom.xml
文件中添加以下代码:
xml
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>jks</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
如果是 pkcs12
密钥库:
xml
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>pkcs12</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>