SpringBoot使用jar包运行,需要配置SSL,如果使用Nginx等web服务器进行转发,又觉得麻烦,索性直接使用SpringBoot自带的SSL方法,实现HTTPS访问。
如果使用了上面的配置就表示springboot应用程序不再在端口8080上支持HTTP连接请求,SpringBoot不能通过配置application.properties来实现既支持HTTP连接又支持HTTPS连接,这是做不到的,如果要同时支持HTTP和HTTPS,则需要以编程方式配置其中的一个,建议使用application.yml文件来配置HTTPS,以编程方式配置HTTP,这是比较容易的方法;
首先准备P12证书,如果是本地证书生成,可以参考文字末尾本地证书生成方法(常规用于内网部署),如果使用公网,可以在各大平台进行免费申请,这里不再说明
将p12证书,拷贝到项目的“resources”目录下面
application.yml文件中server:下新增ssl配置,client.p12为证书文件名称
ssl:
key-store: classpath:client.p12
key-store-password: 12345678
key-store-type: PKCS12
key-alias: client
enabled: true
在启动程序中,进行Bean注入,8183为HTTP访问时使用的端口,443位SSL状态下访问端口
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(createHTTPConnector());
return tomcat;
}
private Connector createHTTPConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setSecure(false);
connector.setPort(8183);
connector.setRedirectPort(443);
return connector;
}
本地证书生成方法,使用JAVA的JDK自带生成SSL证书的工具(keytool)
第一步:
keytool -genkey -alias tomcat -keypass 12345678 -keyalg RSA -keysize 2048 -validity 365 -keystore ./tomcat.keystore -storepass 12345678
第二步
keytool -genkey -alias client -keypass 12345678 -keyalg RSA -keysize 2048 -validity 365 -storetype PKCS12 -keystore ./client.p12 -storepass 12345678
即可完成
HTTPS其实是有两部分组成:HTTP + SSL / TLS,
也就是在HTTP上又加了一层处理加密信息的模块,并且会进行身份的验证。