<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      https 現(xiàn)在已經(jīng)越來越普及了,特別是做一些小程序或者公眾號開發(fā)的時候,https 基本上都是剛需了。

      不過一個 https 證書還是挺費(fèi)錢的,個人開發(fā)者可以在各個云服務(wù)提供商那里申請一個免費(fèi)的證書。我印象中有效期一年,可以申請 20 個。

      今天要和大家聊的是在 Spring Boot 項(xiàng)目中,如何開啟 https 配置,為我們的接口保駕護(hù)航。

      https 簡介

      我們先來看看什么是 https,根據(jù) wikipedia 上的介紹:

      超文本傳輸安全協(xié)議(HyperText Transfer Protocol Secure),縮寫:HTTPS;常稱為 HTTP over TLS、HTTP
      over SSL 或 HTTP Secure)是一種通過計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行安全通信的傳輸協(xié)議。HTTPS 經(jīng)由 HTTP 進(jìn)行通信,但利用 SSL/TLS
      來加密數(shù)據(jù)包。HTTPS 開發(fā)的主要目的,是提供對網(wǎng)站服務(wù)器的身份認(rèn)證,保護(hù)交換數(shù)據(jù)的隱私與完整性。這個協(xié)議由網(wǎng)景公司(Netscape)在 1994
      年首次提出,隨后擴(kuò)展到互聯(lián)網(wǎng)上。

      歷史上,HTTPS 連接經(jīng)常用于網(wǎng)絡(luò)上的交易支付和企業(yè)信息系統(tǒng)中敏感信息的傳輸。在 2000 年代末至 2010 年代初,HTTPS
      開始廣泛使用,以確保各類型的網(wǎng)頁真實(shí),保護(hù)賬戶和保持用戶通信,身份和網(wǎng)絡(luò)瀏覽的私密性。

      另外,還有一種安全超文本傳輸協(xié)議(S-HTTP),也是 HTTP 安全傳輸?shù)囊环N實(shí)現(xiàn),但是 HTTPS 的廣泛應(yīng)用而成為事實(shí)上的 HTTP
      安全傳輸實(shí)現(xiàn),S-HTTP并沒有得到廣泛支持。

      準(zhǔn)備工作

      首先我們需要有一個 https 證書,我們可以從各個云服務(wù)廠商處申請一個免費(fèi)的,不過自己做實(shí)驗(yàn)沒有必要這么麻煩,我們可以直接借助 Java 自帶的 JDK
      管理工具 keytool 來生成一個免費(fèi)的 https 證書。

      進(jìn)入到 %JAVVA_HOME%\bin 目錄下,執(zhí)行如下命令生成一個數(shù)字證書:
      keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore
      D:\javaboy.p12 -validity 365
      命令含義如下:

      * genkey 表示要創(chuàng)建一個新的密鑰。
      * alias 表示 keystore 的別名。
      * keyalg 表示使用的加密算法是 RSA ,一種非對稱加密算法。
      * keysize 表示密鑰的長度。
      * keystore 表示生成的密鑰存放位置。
      * validity 表示密鑰的有效時間,單位為天。
      具體生成過程如下圖:



      命令執(zhí)行完成后 ,我們在 D 盤目錄下會看到一個名為 javaboy.p12 的文件。如下圖:



      有了這個文件之后,我們的準(zhǔn)備工作就算是 OK 了。

      引入 https

      接下來我們需要在項(xiàng)目中引入 https。

      將上面生成的 javaboy.p12 拷貝到 Spring Boot 項(xiàng)目的 resources 目錄下。然后在
      application.properties 中添加如下配置:
      server.ssl.key-store=classpath:javaboy.p12 server.ssl.key-alias=tomcathttps
      server.ssl.key-store-password=111111
      其中:

      * key-store表示密鑰文件名。
      * key-alias表示密鑰別名。
      * key-store-password就是在cmd命令執(zhí)行過程中輸入的密碼。
      配置完成后,就可以啟動 Spring Boot 項(xiàng)目了,此時如果我們直接使用 Http 協(xié)議來訪問接口,就會看到如下錯誤:



      改用 https 來訪問 ,結(jié)果如下:



      這是因?yàn)槲覀冏约荷傻?https 證書不被瀏覽器認(rèn)可,不過沒關(guān)系,我們直接點(diǎn)擊繼續(xù)訪問就可以了(實(shí)際項(xiàng)目中只需要更換一個被瀏覽器認(rèn)可的 https
      證書即可)。



      請求轉(zhuǎn)發(fā)

      考慮到 Spring Boot 不支持同時啟動 HTTP 和 HTTPS ,為了解決這個問題,我們這里可以配置一個請求轉(zhuǎn)發(fā),當(dāng)用戶發(fā)起 HTTP
      調(diào)用時,自動轉(zhuǎn)發(fā)到 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(8081);
      connector.setSecure(false); connector.setRedirectPort(8080); return connector;
      } }
      在這里,我們配置了 Http 的請求端口為 8081,所有來自 8081 的請求,將被自動重定向到 8080 這個 https 的端口上。

      如此之后,我們再去訪問 http 請求,就會自動重定向到 https。

      結(jié)語

      Spring Boot 中加入 https 其實(shí)很方便。如果你使用了 nginx 或者 tomcat 的話,https
      也可以發(fā)非常方便的配置,從各個云服務(wù)廠商處申請到 https 證書之后,官方都會有一個詳細(xì)的配置教程,一般照著做,就不會錯了。

      關(guān)注公眾號【江南一點(diǎn)雨】,專注于 Spring Boot+微服務(wù)以及前后端分離等全棧技術(shù),定期視頻教程分享,關(guān)注后回復(fù) Java ,領(lǐng)取松哥為你精心準(zhǔn)備的
      Java 干貨!

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          波多野结衣亚洲 | 久草网大香蕉 | 白丝乱伦 | 国产经典午夜福利视频合集 | 操逼视频一区二区 | 久在操 | 极品美女a诱v惑在线观看免费 | 看一级操屄大黄片 | 男人天堂国产 | 色四五月|