由于HTTPS对于个人开发者而言,一个HTTPS证书的价格还是有点贵,国内有一些云服务器厂商提供免费的HTTPS证书,一个账号可以申请数个。
购买后我们申请,填写资料,很快就好了
我们这里springboot用的是tomcat,所以我们下载tomcat的
于是我们下载下来,有个xxxx.pfx文件和一个密码文件,我们把xxxx.pfx改名后放到resource目录下,然后我们在配置文件中这样配置
yml配置文件
#服务器配置
server:
port: 443
ssl:
key-store: classpath:aliyu.pfx
key-store-password: xxxxxx
key-store-type: PKCS12
这样就行了。
不过在jdk中提供了一个Java数字证书管理工具keytool,在\jdk\bin目录下,通过这个工具可以自己生成一个数字证书,生成命令如下:
Keytool -genkey -alias tomcat https -keyalg RSA -keysize 2048 -keystore sang -validity 365
配置HTTPS
在cmd窗口中直接执行如上命令,在执行的过程中需要输入密钥口令等信息,根据提示输入即可。命令执行完成后,会在当前用户目录下生成一个名为sang.pl2的文件,将这个文件复制到项目的根目录下,然后在application.properties中做如下配置:
server.ssl.key-store=sang
server.ssl.key-alias=tomcathttps
server.ssl.key-store-password=l23456
配置成功后,启动项目就可以了 但是HTTP就不能访问了,因为SpringBoot不支持同时在配置中启动HTTP和TTPS。这个时候可以配置请求重定向,将请求重定向为HTTPS请求。
HTTP重定向为HTTPS请求
@Configuration
public class TomcatConfig {
@Bean
TomcatServletWebServerFactory tomcatServletWebServerFactory() {
TomcatServletWebServerFactory factory= new TomcatServletWebServerFactory () {
@Override
protected void postProcessContext(Context context){
SecurityConstraint constraint=new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection=new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
factory.addAdditionalTomcatConnectors(createTomcatConnector());
return factory;
}
private Connector createTomcatConnector(){
Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(80);
connector.setSecure(false);
connector.setRedirectPort(443);
return connector;
}
}
首先配置一个TomcatServletWebServerFactory,然后添加一个Tomcat中的Connector(监昕80端口),并将请求转发到443上去。
原创来源:滴一盘技术