SpringBoot配置使用SSL,使用https(单向认证)
1.生成证书,可以使自签名或者从SSL证书授权中心获得的
JDK中keytool是一个证书管理工具,可以生成自签名证书。
我这里是windows系统,打开命令行,执行:
keytool -genkey -alias bitservice -keypass bitservicepwd -keyalg RSA -keysize 1024 -validity 365 -keystore D:/bitservice.keystore -storepass bitservice
参数说明:
keytool
-genkey
-alias bitservice(别名)
-keypass bitservicepwd(别名密码)
-keyalg RSA(算法)
-keysize 1024(**长度)
-validity 365(有效期,天单位)
-keystore D:/bitservice.keystore(指定生成证书的位置和证书名称)
-storepass bitservicepwd(获取keystore信息的密码)
命令执行完成后,窗口下方有个建议“迁移到行业标准格式PKCS12”,只需要执行它建议的命令即可。
图示:
此时证书已在D盘根目录生成,文件名称“bitservice.keystore”
2.SpringBoot配置SSL
1. 把bitservice.keystore拷贝到项目的src/main/resources下,和application.properties同级
2. 修改application.properties文件,添加如下内容:
server.port=443
server.ssl.key-store: src/main/resources/bitservice.keystore
server.ssl.key-store-password: bitservice
3. 配置同时支持http和https访问项目,在启动类中添加如下内容:
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) { //org.apache.catalina.Context
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
return tomcat;
}
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(80);
connector.setSecure(false);
connector.setRedirectPort(443);
return connector;
}
到此整个配置完成,启动项目进行测试,在浏览器地址栏输入http://127.0.0.1/和https://127.0.0.1/均可访问(http会自动跳转到https)