如今在作的项目,一部分功能时创建在小程序上的,因此就不得不面临一个问题,就是小程序在发起请求,请求后台的时候,只能使用https
,会对服务器的域名进行https证书校验
,因此,咱们就不得不去考虑配置证书的问题。web
这里须要先声明一下,因为我这里尚未一个域名证书,因此使用的是本地自签证书
。自签证书
只能在开发的时候使用,一旦小程序上线,证书将会失效。
你们能够经过各类途径获取到证书,而后配置的过程基本一致,本身配置的时候注意替换就行了。
为了开发试验,咱们须要本地生成一个自签证书
。咱们直接使用JDK
自带的keytool
工具来生成证书。spring
首先先找到jdk的bin
目录:apache
而后命令行进入文件对应的路径,输入以下命令:编程
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
而后按照提示,输入相应的信息:小程序
要注意记住
秘钥库口令
,这个后面会用到
最后,就会在当前目录下生成一个证书:浏览器
先将咱们生成的证书移到项目目录下:tomcat
而后配置application.properties
文件:安全
# SSL证书相关配置 # https加密端口 server.port=7443 # 证书路径 server.ssl.key-store=classpath:keystore.p12 # 证书秘钥 server.ssl.key-store-password=生成证书时候输入的密钥库口令 # 证书类型 server.ssl.key-store-type=PKCS12 # 证书别名 server.ssl.key-alias=tomcat
细心的读者会发现这里的配置和咱们上面建立证书时使用的命令式对应的。服务器
由于咱们原来的请求方式都是http
, 如今咱们想使用https,就须要作一下重定向,不能跟以前的冲突。app
package com.yunzhiclub.alice; import org.apache.catalina.Context; import org.apache.catalina.connector.Connector; import org.apache.tomcat.util.descriptor.web.SecurityCollection; import org.apache.tomcat.util.descriptor.web.SecurityConstraint; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.context.annotation.Bean; @SpringBootApplication public class AliceApplication { public static void main(String[] args) { SpringApplication.run(AliceApplication.class, args); } /** * 配置一个 TomcatServletWebServerFactory bean * 将http 重定向到 https * @return */ @Bean public TomcatServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory () { @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; } /** * 让咱们的应用支持HTTP是个好想法,可是须要重定向到HTTPS, * 可是不能同时在application.properties中同时配置两个connector, * 因此要以编程的方式配置HTTP connector,而后重定向到HTTPS connector * @return Connector */ private Connector initiateHttpConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(8080); // http端口 connector.setSecure(false); connector.setRedirectPort(7443); // application.properties中配置的https端口 return connector; } }
在浏览其中请求一下后台接口
正确请求。
本身生成的证书,会被浏览器看作不安全的,因此要上线的项目,仍是去申请一个正规的SSl证书吧。
相关参考:
https://blog.csdn.net/MasonQA...
https://blog.csdn.net/m0_3812...