內網環境Tomcat配置HTTPS,瞭解一下?

語言: CN / TW / HK

本文已參與「新人創作禮」活動,一起開啟掘金創作之路。

一、準備

首先你要有個伺服器,伺服器上要有JDK和Tomcat,JDK和Tomcat的安裝請自行百度,這裡不贅述。 我的JDK版本為1.8.0_311,Tomcat版本為10.0.14,其他版本請自行驗證。配置中我全程使用的是root使用者,如果你用的是其他使用者,請注意相應的Linux許可權問題。因為我用的是java的keytool工具,所以Windows生成證書的命令跟Linux的命令一樣,與作業系統無關。

二、為伺服器生成自簽證書(單雙向認證都需要)

1.在/opt目錄下建立ca資料夾

目的:方便證書管理,具體放在哪個資料夾沒有硬性要求,放在/opt資料夾下是我個人的習慣。

命令

(1)移動到/opt資料夾: cd /opt

(2)建立ca資料夾:mkdir ca

截圖在這裡插入圖片描述

2.建立伺服器證書(keystore格式)

命令

(1)移動到剛剛建立的ca資料夾下:cd /opt/ca

(2)利用Java自帶的keytool工具建立伺服器證書:keytool -genkey -v -alias tomcat -keyalg RSA -ext SAN=ip:82.156.193.157 -validity 365000 -keystore tomcat.keystore

命令引數說明

-genkey:在使用者主目錄中建立一個預設檔案".keystore",還會產生一個mykey的別名,mykey中包含使用者的公鑰、私鑰和證書。

-v:顯示金鑰庫中的證書詳細資訊

-alias:設定證書別名,設定後會替代預設的mykey。

-keyalg:設定祕鑰演算法。

-ext:擴充套件,可以設定域名資訊與內外網地址。如果是IP方式訪問用-ext SAN=ip:你的IP,如果是域名用-ext SAN=dns:你的域名

-validity:設定證書有效期,最大為9999年。

-keystore:指定金鑰和證書庫,如果是放到Windows系統的C盤,需要管理員許可權。

截圖在這裡插入圖片描述

三、為客戶端生成自簽證書(僅雙向認證需要,單向認證可忽略)

1.建立客戶端證書(p12格式)

目的:HTTPS比HTTP協議安全的主要原因就是HTTPS比HTTP多了證書驗證這一步,阻止了中間人攻擊。HTTPS的認證方式有兩種,一是單向認證,二是雙向認證。對於安全性要求不高的系統,採用單向認證就足夠了,也就是客戶端認證伺服器端。但是如果想使系統安全性更高,我們就需要利用客戶端證書來實現雙向認證。

命令

(1)利用Java自帶的keytool工具建立客戶端證書:keytool -genkey -v -alias client -keyalg RSA -validity 365000 -storetype PKCS12 -keystore client.p12

引數說明

-genkey:在使用者主目錄中建立一個預設檔案".keystore",還會產生一個mykey的別名,mykey中包含使用者的公鑰、私鑰和證書。

-v:顯示金鑰庫中的證書詳細資訊

-alias:設定證書別名。

-keyalg:設定祕鑰演算法。

-validity:設定證書有效期,最大為9999年。

-storetype:設定金鑰庫的型別。

-keystore:指定金鑰庫,如果是放到Windows系統的C盤,需要管理員許可權。

截圖在這裡插入圖片描述

2.將p12格式的客戶端證書轉換為cer格式

目的: p12格式的證書無法直接匯入客戶端證書(tomcat.keystore)中,需要先轉換成cer格式。

命令

(1)p12格式轉cer格式:keytool -export -alias client -keystore client.p12 -storetype PKCS12 -storepass 123456 -rfc -file client.cer

引數說明

-export:匯出證書

-alias:設定別名

-keystore:指定源證書的路徑與名稱

-storetype:指定源證書的型別

-storepass:驗證源證書的密碼

-rfc:將以可列印的編碼格式輸出證書

-file:指定目標證書的路徑、檔名和型別

截圖在這裡插入圖片描述

四、將客戶端證書匯入伺服器證書中(僅雙向認證需要,單向認證可忽略)

1.客戶端證書匯入伺服器證書

目的:伺服器端認證客戶端證書。

命令

(1)將客戶端證書匯入伺服器證書中:keytool -import -v -file client.cer -keystore tomcat.keystore

引數說明

-import:匯入證書

-v :顯示金鑰庫中的證書詳細資訊

-file:填寫被匯入證書的路徑與檔名,此處為客戶端證書

-keystore:填寫目標證書的路徑與檔名,此處為伺服器端證書

截圖在這裡插入圖片描述

2.檢視匯入情況

目的:驗證證書匯入情況

命令

(1)在螢幕列印證書詳情:keytool -list -keystore tomcat.keystore

證書資訊說明:由於在匯入時沒有給客戶端證書設定別名,因此客戶端證書別名預設為mykey

截圖在這裡插入圖片描述

五、Tomcat配置伺服器端證書(單雙向認證都需要)

目的:通過配置Tomcat的server.xml檔案,讓Tomcat能夠解析伺服器證書。其他伺服器配置證書的方式請自行百度。

操作步驟

(1)將以下程式碼加入到Tomcat的server.xml檔案中,注意Tomcat 8、9和Tomcat 10的新增寫法不一樣。配置項“clientAuth”設定為false,即可關閉Tomcat驗證 ```


```

六、客戶端安裝伺服器證書(單雙向認證都需要)

1.將伺服器證書keystore轉為cer格式

目的:cer格式便於在瀏覽器、Windows系統、iis證書安裝,~~便於用Hbuilder打包安卓APP等~~(Hbuilder直接用keystore就行) 。

命令: (1)keytool -keystore tomcat.keystore -export -alias tomcat -file server.cer

引數說明:可以參考客戶端p12格式轉cer格式

截圖在這裡插入圖片描述

2.瀏覽器、Windows安裝伺服器證書

這裡以Chrome瀏覽器為例,edge、火狐、360、2435、QQ等瀏覽器通用,IE瀏覽器配置方法請自行百度。

(1)複製伺服器證書到客戶端。我用的是WinSCP將伺服器端證書(server.cer)下載到客戶端電腦上的。

(2)雙擊伺服器證書檔案(server.cer),點選安裝證書。 在這裡插入圖片描述

(3)選擇安裝證書到當前使用者,或全部使用者,這裡我選擇安裝給這臺電腦上的全部使用者 在這裡插入圖片描述

(4)選擇證書儲存位置,這裡要選擇“受信任的根證書頒發機構” 在這裡插入圖片描述

(5)完成安裝 在這裡插入圖片描述

七、驗證奇蹟的時刻(客戶端成功單向認證伺服器!)

開啟瀏覽器,利用HTTPS訪問Tomcat伺服器的示例專案,可以看到已經實現了HTTPS連線,單向認證已經實現。

截圖在這裡插入圖片描述