我們想要通過https訪問程序,首先需要獲得一個數字證書,自己給自己簽發而來的證書也叫自簽名ssl證書,這種類型的證書可以隨意簽發,不受任何約束和監督,也不受各大瀏覽器的信任,基本沒什麼安全性可言,所以https證書獲取不建議使用這種。
而由受信任的CA機構簽發的https證書,纔是用戶們正確的選擇。這種CA機構簽發證書需要經過一系列的審覈,而且是有有效期的,一般不超過2年,能兼容市面上大部分的瀏覽器,也就是受各大瀏覽器的信任,安全性有保障。目前比較受歡迎的幾大國際品牌有Symantec、Geotrust、Comodo、Thawte以及RapidSSL等。想要獲取靠譜的https證書可以從他們當中選擇一款。
我們這裏使用JDK自帶keytool工具,來創建本地SSL證書。
目錄
3 Spring boot 內置Tomcat使用Https請求
1 Window 10中Tomcat使用Https請求
1.1 jdk中找到keytool.exe
進入到jdk的安裝目錄,也就是環境變量中配置%JAVA_HOME%/bin的目錄下,在bin目錄下按住shift+右鍵,打開Powershell窗口
1.2在打開的dos窗口中,輸入以下命令:
以下命令將生產一對非對稱密鑰和自我簽名的證書
keytool -genkey -v -alias keystoreKey -keyalg RSA -validity 3650 -keystore E:\tomcat\apache-tomcat-8.0.53\conf\tomcat.keystore
keytool -genkey:自動使用默認的算法生成公鑰和私鑰
-alias 名稱 :給證書取個別名,這裏設置的是keystoreKey
-keyalg:制定密鑰的算法,如果需要制定密鑰的長度,可以再加上keysize參數,密鑰長度默認爲1024位,使用DSA算法時,密鑰長度必須在512到1024之間,並且是64的整數倍
-validity:證書的有效日期,默認是90天,這裏設置的3650天
-keystore:參數可以指定密鑰庫的名稱,密鑰庫其實是存放祕鑰和證書文件,會將生成的證書存放到指定的目錄下。
1.3 輸入證書信息
注意:域名以tomcat地址爲例
在覈對信息的時候,如果直接Enter,或者輸入其它,會重新開始錄入信息
keystore指定證書存放目錄必須存在,否則報系統找不到錯誤
進入到tomcat\conf目錄下,發現證書已經存在
1.4 修改tomcat配置信息
打開tomcat的目錄下conf/server.xml 文件
找到以下代碼段
將註釋去掉後修改代碼如下: 這裏Https端口設置的是8443(https 訪問默認是443端口, HTTP 訪問默認是80)
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="E:\tomcat\apache-tomcat-8.0.53\conf\tomcat.keystore" keystorePass="123456" />
增加了keystoreFile 和 keystorePass 兩個參數
keystoreFile :表示證書文件的放置位置
keystorePass :證書密鑰庫設置的密碼
注意:redirectPort 端口號和port端口號可以自定義,端口號必須相同
1.5 驗證https
進入到tomcat\bin目錄下啓動tomcat
http:啓動成功後在瀏覽器中輸入http://localhost:8080
Https:tomcat配置的端口爲8443,在瀏覽器中輸入https://localhost:8443/
點擊高級->繼續前往localhost(不安全)進入到tomcat
在谷歌瀏覽器查看證書信息
點擊不安全->選擇證書
可以看到我們配置的證書信息,以及有效期
1.6將HTTP訪問跳轉到HTTPS訪問
打開tomcat\conf目錄,找到web.xml
找</welcome-file-list>標籤
在</welcome-file-list>標籤下添加如下信息
<!--強制使用https,http請求會自動轉爲https -->
<login-config>
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<!--配置網站支持https,/* 表示全部請求都走https, transport-guarantee 標籤設置爲 CONFIDENTIAL以便使應用支持 SSL。 如果需要關閉 SSL ,將 CONFIDENTIAL 改爲 NONE 即可 -->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
保存後用默認的http訪問你的web項目 就會自動跳轉用https訪問
比如訪問在瀏覽器中輸入http://localhost:8080 會自動跳轉到 https://localhost:8443/
2 Linux中Tomcat使用Https請求
Linux中配置Tomcat和 Window 中是一樣的,可以直接按照window步驟操作
務必使用root用戶連接到虛擬機後,進入到jdk安裝目錄bin目錄下,直接使用命令來生成SSL證書,唯一的區別是在安裝證書的過程中,可能語言不同(具體依虛擬機使用語言爲準)例:
需要注意的是linux和window路徑的不同,例:
keytool -genkey -v -alias keystoreKey -keyalg RSA -validity 3650 -keystore /tomcat/apache-tomcat-8.0.53/conf/tomcat.keystore
配置完成後別忘記在虛擬器中開啓Https端口號
3 Spring boot 內置Tomcat使用Https請求
3.1 使用JDK自帶keytool工具,創建本地SSL證書,生成方法參考Window 10 步驟
3.2 將生成的tomcat.keystore文件拷貝到springboot項目根目錄下,和pom.xml同級
3.3 修改application.properties文件,添加一下信息
#http端口號 / spring boot 默認端口號8080
#server.port=8081
#https端口號
server.port=8443
#https證書信息
#設定持有SSL certificate的key store的路徑
server.ssl.key-store=tomcat.keystore
#訪問key store中key的密碼.
server.ssl.key-store-password=123456
#設定key store的類型.
server.ssl.key-store-type=JKS
#設定key store中key的別名
server.ssl.key-alias=keystoreKey
3.4 啓動服務以後,https通過訪問 https://localhost:8443來訪問項目