为什么使用https?
- 项目中,有涉及到微信小程序,其要求接口通信必须通过https,因而后端需要支持https
- https更加安全
为什么重定向?
- 便于访问,通过浏览器访问时,通常会是http的方式,因此需要同时支持http与https,因此需要将http的请求重定向到https
- 项目中由于前期前端使用http连接的,因而需要支持。
SpringBoot 2.x 使用https
- 生成证书
这个可以通过购买或者直接生成 直接生成命令:
keytool -genkey -alias tomcat -dname "CN=Andy,OU=kfit,O=kfit,L=HaiDian,ST=BeiJing,C=CN" -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365
命令的各个参数的含义: -genkey :生成key; -alias :key的别名; -dname:指定证书拥有者信息 -storetype :密钥库的类型为JCEKS。常用的有JKS(默认),JCEKS(推荐), PKCS12,BKS,UBER。每个密钥库只可以是其中一种类型。 -keyalg :DSA或RSA算法(当使用-genkeypair参数),DES或DESede或AES算法(当使用-genseckey参数); -keysize :密钥的长度为512至1024之间(64的倍数) -keystore :证书库的名称 -validity : 指定创建的证书有效期多少天 dname的值详解: CN(Common Name名字与姓氏) OU(Organization Unit组织单位名称) O(Organization组织名称) L(Locality城市或区域名称) ST(State州或省份名称) C(Country国家名称)
这时候在目录:C:\Users\下就会看到一个文件keystore.p12。到这里SSL证书就有了。
- SpringBoot使用
yaml配置:
server:
ssl:
key-store: classpath:keystore.p12
key-alias: tomcat
enabled: true
key-store-type: PKCS12
key-store-password: 123456
port: 443
启动后,日志打印显示正确
INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 443 (https)
Http重定向Https
我的这个方式适合Spring 2.x的版本 添加Tomcat自定义配置:
@Component
public class TomcatWebServerCustom implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Override
public void customize(TomcatServletWebServerFactory factory) {
Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
connector.setPort(8088);
connector.setScheme("http");
connector.setSecure(false);
connector.setRedirectPort(443);
factory.addConnectorCustomizers(c -> c.setAttribute("relaxedQueryChars", "{}[]|"));
factory.addAdditionalTomcatConnectors(connector);
}
}
启动后,显示https与http同时加载
INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 443 (https) 8088 (http)
至此,项目可以支持http与https的访问。
|