如今在作的項目,一部分功能時創建在小程序上的,因此就不得不面臨一個問題,就是小程序在發起請求,請求後臺的時候,只能使用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...