证书获取:
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
根据提示信息填写后 会生成一个PKCS12格式的叫做keystore.p12的证书,之后启动Spring Boot时会引用这个证书
将生成的证书keystore.p12放置在classpath路径下
application.properties文件增加如下配置
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=123456
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias:tomcat
若为application.yml,则相应增加如下配置
运行服务器,会看到打印如下:
此时访问https链接,提示如下:
表明配置成功。不安全的提示,是因为证书是免费的。
此时访问http地址是不成功的。让我们的应用支持HTTP是个好想法,但是需要重定向到HTTPS。
这需要在配置类中配置一个TomcatEmbeddedServletContainerFactory bean,代码如下:
@Bean
public EmbeddedServletContainerFactory servletContainer() {
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(initiateHttpConnector());
return tomcat;
}
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(5555);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
运行服务器,会看到打印如下:
访问http://localhost:5555 会自动跳转到https://localhost:8443 表明配置成功