# spring boot 使用自签名证书
# 资料
SpringBoot使用自签名SSL证书配置HTTPS (opens new window)
keytool 用法总结 (opens new window)
【keytool】keytool查看jks证书详情 (opens new window)
【keytool】如何使用使用Java密钥库工作? (opens new window)
# keytool
java 环境下的安全钥匙与证书的管理工具
# keytool --help
密钥和证书管理工具
命令:
-certreq 生成证书请求
-changealias 更改条目的别名
-delete 删除条目
-exportcert 导出证书
-genkeypair 生成密钥对
-genseckey 生成密钥
-gencert 根据证书请求生成证书
-importcert 导入证书或证书链
-importpass 导入口令
-importkeystore 从其他密钥库导入一个或所有条目
-keypasswd 更改条目的密钥口令
-list 列出密钥库中的条目
-printcert 打印证书内容
-printcertreq 打印证书请求的内容
-printcrl 打印 CRL 文件的内容
-storepasswd 更改密钥库的存储口令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 生成证书
进入jdk的bin目录下打开命令行工具
# 生成含私钥的keystore文件
keytool -genkeypair -alias server -keyalg RSA -keystore D:\keys\server.keystore -validity 365 -keypass 123456 -storepass 123456 -dname "CN=*.example.com,OU=Test,O=Test,L=HangZhou,ST=ZheJiang,C=CN"
1
# 查看keystone
keytool -list -v -keystore D:\keys\server.keystore -storepass "123456"
1
# 安装证书
keytool -export -alias server -file D:\keys\server.crt -keystore D:\keys\server.keystore -storepass 123456
1
# 导入证书到信任库中
进入jdk的\jre\lib\security目录
keytool -import -alias server -keystore cacerts -file D:\keys\server.crt -storepass changeit
1
# SpringBoot中配置ssl证书
将生成出来的密钥文件放在resources目录中
# 配置application.yml
server:
port: 8888
ssl:
key-store: classpath:server.keystore
key-store-password: 123456
key-store-type: JKS
key-alias: server
1
2
3
4
5
6
7
2
3
4
5
6
7
# 创建配置类
@Configuration
public class KeyConfig {
/** http端口8381 转发到 https端口8391 存在 */
@Bean
public Connector connector(){
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8381);
connector.setSecure(false);
connector.setRedirectPort(8391);//配置文件的端口
return connector;
}
//springboot 1.x 可用
/*@Bean
public TomcatEmbeddedServletContainerFactory tomcatServletWebServerFactory(Connector connector){
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(connector);
return tomcat;
}*/
/** spring 2.X写法 */
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector){
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(connector);
return tomcat;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
使用 https://ip:port 访问即可