配置https安全連接(ssl加密連接)
https連接需要用到數字證書與數字簽名(MD5算法),網站https連接首先需要申請數字證書,配置加密連接器,瀏覽器安裝證書。
證書運用到RSA技術,RSA加密算法是一種非對稱加密算法,服務器保留私鑰,對外公開公鑰(cer證書)。
Tomcat秘鑰庫類型為JKS(Java Key Storage),很容易知道這是 JAVA 的專屬格式,利用 JAVA 的一個叫 keytool
的工具可以進行格式轉換。一般用於 Tomcat 服務器。
單向認證
生成服務端秘鑰庫
使用java的工具keytool產生數字證書,tomcat.keystore可以寫在需要生成的路徑。此句是生成tomcat.keystore(需要設置秘鑰庫密碼),並在tomcat.keystore中生成服務端證書私鑰(需要設置私鑰密碼)。
keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "tomcat.keystore" -validity 36500 //生成秘鑰庫,並生成別名為tomcat的私鑰(條目類型PrivateKeyEntry)
參數說明:
-genkeypair:生成一對非對稱密鑰;
-alias:指定密鑰對的別名,該別名是公開的; -keyalg:指定加密算法,本例中的采用通用的RAS加密算法; -keystore:密鑰庫的路徑及名稱,不指定的話,默認在操作系統的用戶目錄下生成一個".keystore"的文件;
-validity:設置秘鑰有效期,單位為天,36500即為100年;
中間根據提示設置密碼(秘鑰庫密碼、服務器證書私鑰密碼),生成文件.keystore。
注意:
1.密鑰庫的密碼至少必須6個字符,可以是純數字或者字母或者數字和字母的組合等等
2."名字與姓氏(CN)"應該是輸入域名,而不是我們的個人姓名,本機可用localhost,其他的可以不填
將文件.keystore放到Tomcat服務器的conf目錄下(不移動也可以,在xml中配置時寫指定路徑即可)
cp tomcat.keystore /usr/local/tomcat/server/conf/
根據秘鑰庫生成證書
這里根據keystore中服務端證書的私鑰生成cer的服務端公鑰cer證書。需要輸入秘鑰庫密碼
keytool -export -alias tomcat -keystore tomcat.keystore -rfc -file tomcatserver.cer //根據keystore秘鑰庫中別名為tomcat的條目(私鑰),生成cer證書(公鑰)
生成的服務端公鑰證書有效期為上面私鑰設置的有效期
參數說明:
-alias tomcat //要處理的條目的別名(秘鑰庫中的條目) -keystore tomcat.keystore //密鑰庫名稱,為剛才導出的秘鑰庫 -rfc //以 RFC 樣式輸出 -file tomcatserver.cer //輸出文件名
單向認證配置
在客戶端安裝tomcatserver.cer到受信任的根證書頒發機構;配置server.xml,clientAuth客戶端認證要設置為false。
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="conf/tomcat.keystore" keystorePass="秘鑰庫密碼"/>
測試
查看證書
IE瀏覽器 -> Internet選項 -> 內容 -> 證書 -> 受信任的根證書頒發機構,找到上面輸入的名字與姓氏(CN)輸入的東西。
打開IE測試,發現localhost的進不去,127.0.0.1的可以進去。因為生成證書時名字與姓氏(CN)輸入的127.0.0.1(客戶端訪問服務器端的IP)。
其他常用命令
導入其他的證書到密鑰庫
導入后條目類型為trustedCertEntry,配置文件要配置truststoreFile,這個一般用於客戶端證書(公鑰)的導入。
只是導入了cer證書的私鑰,不含有公鑰,要再根據秘鑰庫中導入的證書alias執行export操作。
keytool -import -file tomcatclient.cer -storepass -keystore tomcat.keystore -alias aeolian
參數說明:
-file tomcat-client2.cer //必須,證書文件名稱 -keystore tomcat.keystore //必須,密鑰庫名稱,創建服務端秘鑰庫的文件 -alias aeolian //推薦寫,要導入的證書別名(決定此證書導入到秘鑰庫中的別名),不寫默認為mykey,再次導入會提示別名mykey已存在 -storepass //不推薦寫,密鑰庫密碼。回車后會提示你輸入秘鑰庫密碼
在密鑰庫中刪除條目
這里一般也是刪除受信任的客戶端證書的公鑰
keytool -delete -keystore tomcat.keystore -alias mykey //刪除秘鑰庫中別名為mykey的條目
修改秘鑰庫中證書條目的口令
keytool -keypasswd -keystore tomcat.keystore -alias mykey //更改別名為mykey條目的密碼,需要輸入秘鑰庫密碼
查看秘鑰庫內容
keytool -list -v -keystore tomcat.keystore //要輸入秘鑰庫密碼
查看證書內容
keytool -printcert -file tomcatclient.cer
雙向認證
上面的為服務端證書,在此基礎上,雙向認證還需要客戶端證書。客戶端證書是先生成p12的客戶端私鑰,再根據p12轉成cer,把cer(公鑰)導入keystore並命名alias。
生成PKCS12格式的客戶端證書
為客戶端生成證書,為了讓證書順利導入IE和Firefox,證書格式應該是PKCS12。要輸入客戶端證書密碼。tomcat-client.p12為客戶端私鑰。這里也要輸入CN,和上面服務器證書的CN一樣即可。
keytool -genkey -v -alias tomcatclientp12 -keyalg RSA -storetype PKCS12 -keystore tomcat-client.p12 -validity 3650
讓服務器信任戶端證書
由於是雙向SSL認證,服務器必須要信任客戶端證書.由於不能直接將PKCS12直接將PKCS12的格式的證書導入證書庫,必須先把客戶端證書導出為一個單獨的cer文件,然后再把cer文件導入秘鑰庫。
keytool -export -alias tomcatclientp12 -keystore tomcat-client.p12 -storetype PKCS12 -storepass P12證書秘鑰 -rfc -file tomcat-client-p12.cer //導出客戶端公鑰,要輸入密碼
keytool -import -v -file tomcat-client-p12.cer -keystore tomcat.keystore -alias tomcatclientpub //將客戶端證書公鑰導入到服務器的秘鑰庫,並為客戶端公鑰起一個別名
瀏覽器安裝P12證書
IE瀏覽器 -> Internet選項 -> 內容 -> 證書 -> 個人 -> 導入 ->選擇tomcat-client.p12,安裝完成后個人欄顯示即可(p12發現直接安裝雖然顯示成功但是個人欄里面不顯示)。
配置文件
修改conf/server.xml文件,修改加密連接器,添加keystoreFile(服務端證書私鑰)與keystorePass(客戶端證書公鑰),把protocol換為HTTP/1.1。clientAuth表示客戶端是否認證,雙向認證設為true。
<Connector port="9443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="conf/tomcat.keystore" keystorePass="秘鑰庫密碼" truststoreFile="conf/tomcat.keystore" truststorePass="秘鑰庫密碼"/>
測試
訪問https://localhost:9443/cas/login依然進不去,因為證書CN不為localhost。
訪問https://127.0.0.1:9443/cas/login,首先彈出確認證書信息,點擊確認后可以正常訪問。
證書總結
tomcat-client-p12.cer:客戶端證書的公鑰(雙向認證特有,最終導入到tomcat.keystore里面)
tomcat-client.p12:客戶端證書的私鑰(雙向認證特有,客戶端安裝,導入到個人證書下面,否則不起作用)
tomcatserver.cer :服務端證書的公鑰(客戶端安裝,受信任的根證書頒發機構下面)
tomcat.keystore:服務端證書庫,既包含服務端私鑰,又包含客戶端公鑰(服務器conf下面)
瀏覽器安裝證書
雙擊tomcatserver.cer證書安裝到受信任的根證書頒發機構。
Internet導入p12證書到個人證書。
最好用IE瀏覽器測試(一般瀏覽器只信任大廠頒發的證書,所以看起來不明顯)。
若服務端公鑰不在受信任的根證書頒發機構下面,瀏覽器(IE)訪問時會提示不安全。
若客戶端私鑰證書安裝不在個人下面,可能會出現下面的情況。
Chrome出現:ERR_BAD_SSL_CLIENT_AUTH_CERT
IE出現:無法安全地連接到此頁面 這可能是因為該站點使用過期的或不安全的 TLS 安全設置。如果這種情況持續發生,請與網站的所有者聯系。 TLS 安全設置未設置為默認設置,這也可能導致此錯誤。
雙向認證最終效果圖: