spring boot / cloud (五) 自籤SSL證書以及HTTPS

spring boot / cloud (五) 自籤SSL證書以及HTTPS

前言

什麼是HTTPS?

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,所以加密的詳細內容就須要SSL。 它是一個URI scheme(抽象標識符體系),句法類同http:體系。用於安全的HTTP數據傳輸。https:URL代表它使用了HTTP,但HTTPS存在不一樣於HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。這個系統的最初研發由網景公司(Netscape)進行,並內置於其瀏覽器Netscape Navigator中,提供了身份驗證與加密通信方法。如今它被普遍用於萬維網上安全敏感的通信,例如交易支付方面。java

什麼是SSL證書?

SSL證書是數字證書的一種,相似於駕駛證、護照和營業執照的電子副本。由於配置在服務器上,也稱爲SSL服務器證書。
SSL 證書就是遵照 SSL協議,由受信任的數字證書頒發機構CA,在驗證服務器身份後頒發,具備服務器身份驗證和數據傳輸加密功能。
SSL證書經過在客戶端瀏覽器和Web服務器之間創建一條SSL安全通道(Secure socket layer(SSL)安全協議是由Netscape Communication公司設計開發。該安全協議主要用來提供對用戶和服務器的認證;對傳送的數據進行加密和隱藏;確保數據在傳送中不被改變,即數據的完整性,現已成爲該領域中全球化的標準。因爲SSL技術已創建到全部主要的瀏覽器和WEB服務器程序中,所以,僅需安裝服務器證書就能夠激活該功能了),即經過它能夠激活SSL協議,實現數據信息在客戶端和服務器之間的加密傳輸,能夠防止數據信息的泄露。保證了雙方傳遞信息的安全性,並且用戶能夠經過服務器證書驗證他所訪問的網站是不是真實可靠。數位簽名又名數字標識、簽章 (即 Digital Certificate,Digital ID ),提供了一種在網上進行身份驗證的方法,是用來標誌和證實網路通訊雙方身份的數字信息文件,概念相似平常生活中的司機駕照或身份證類似。 數字簽名主要用於發送安全電子郵件、訪問安全站點、網上招標與投標、網上籤約、網上訂購、安全網上公文傳送、網上辦公、網上繳費、網上繳稅以及網上購物等安全的網上電子交易活動git

思路

  • 使用自籤ssl證書的方式本地搭建https服務

實現

1.使用keytool生成keystore文件,而且拷貝至項目的根目錄下

注意 : 生成證書時,名稱應使用域名,(本機的話,設置hosts文件)spring

keytool -genkey -alias udf_demo -keyalg RSA -keystore d:\udf_demo.keystore

2.將應用的端口號更改成8443(測試用,https默認端口號爲443)

server.port=8443

3.進行ssl配置

server.ssl.enabled=true
server.ssl.key-store=udf_demo.keystore
server.ssl.key-store-password=123456
server.ssl.key-store-type=JKS
server.ssl.key-alias=udf_demo

4.啓動應用,使用https://xxxx:8443訪問應用

注意:正常狀況下,瀏覽器會提示不安全,這個是由於咱們使用的是自籤的證書,瀏覽器並不信任,這時候須要將證書導入,瀏覽器,重啓後,瀏覽器就會顯示當前連接是安全的了,導出證書瀏覽器

keytool -selfcert -alias udf_demo -keystore d:\udf_demo.keystore

keytool -export -alias udf_demo -keystore d:\udf_demo.keystore -storepass 123456 -rfc -file d:\udf_demo.cer

而後將導出的cer文件,導入到瀏覽器信任證書裏,而且重啓瀏覽器

5.使用restTemplate訪問https服務

String url = "https://wangkang.com:8443/demo/b";
ResponseEntity<RestResponse<Date>> result = restTemplate.exchange(url, HttpMethod.GET, null,
        new ParameterizedTypeReference<RestResponse<Date>>() {
        });

不過正常狀況下,以上代代碼會報出以下錯誤安全

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: 
unable to find valid certification path to requested target

由於在這個示例裏,當前應用又作了服務方,也作了調用方,其實跟前面瀏覽器訪問應用是同樣的,調用方也會由於不信任當前所調用的這個服務,而拒絕調用,因此說,很簡單,信任這個服務便可,以下代碼,將前面 得到的cer證書導入jre服務器

keytool -importcert -alias udf_demo -file 
d:/udf_demo.cer -keystore D:/develop/Java/jdk1.8.0_92/jre/lib/security/cacerts

而後重啓應用,再進行調用,便可正常調用框架

代碼倉庫 (博客配套代碼)

結束

使用了keytool和spring boot的ssl配置,完成了基本的https的樣例.spring-boot


想得到最快更新,請關注公衆號

想得到最快更新,請關注公衆號

相關文章
相關標籤/搜索