前言:
因為數據安全性問題,需要將Web服務協議由http轉為https,這里使用Keytool 來生成證書,Keytool 是一個JAVA環境下的安全鑰匙與證書的管理工具,Keytool將密鑰(key)和證書(certificates)存在一個稱為keystore 的文件(受密碼保護)中。
(ps:我們可以在java安裝的bin目錄找到這個keytool.exe程序)
keytool的命令說明:
通過win+R輸入cmd,然后輸入以下命令: keytool -genkey -help,就會出現如下:
keytool -genkeypair [OPTION]…
命令說明:
-alias 要處理的條目的別名
-keyalg 密鑰算法名稱
-keysize 密鑰位大小
-sigalg 簽名算法名稱
-destalias 目標別名
-dname 唯一判別名
-startdate 證書有效期開始日期/時間
-ext X.509 擴展
-validity 有效天數
-keypass 密鑰口令
-keystore 密鑰庫名稱
-storepass 密鑰庫口令
-storetype 密鑰庫類型
-providername 提供方名稱
-providerclass 提供方類名
-providerarg 提供方參數
-providerpath 提供方類路徑
-v 詳細輸出
-protected 通過受保護的機制的口令
實現過程: (轉載自: https://blog.csdn.net/su_zp/article/details/93853054 )
1. 生成秘鑰文件
以管理員的身份進入 cmd,在cmd里進入jdk的bin路徑下,然后輸入 以下命令:keytool -genkey -alias tomcat -keyalg RSA -keysize 2048 -keypass 123456 -validity 36600 -keystore E:\key\m.jks -storepass 123456
輸入上面命令就會出現如下信息:
您的名字與姓氏是什么?
[Unknown]: 這里輸入你的ip,若是服務器的話,就輸入域名,后面的信息就隨便輸入即可
您的組織單位名稱是什么?
[Unknown]:
您的組織名稱是什么?
[Unknown]:
您所在的城市或區域名稱是什么?
[Unknown]:
您所在的省/市/自治區名稱是什么?
[Unknown]:
該單位的雙字母國家/地區代碼是什么?
[Unknown]:
CN=172.172.172.172, OU=x, O=x, L=x, ST=x, C=x是否正確?
[否]: y 這里輸入值是讓你確認你上面的信息是否正確,若不正確,除了y的其他都可以。輸入之后就會重復上面的操作。
執行完成之后就可以在e盤下面的key文件夾下生成一個密鑰m.jks
2. 導出證書
命令:keytool -export -alias tomcat -keystore E:\key\m.jks -file E:\key\m.crt -storepass 123456
執行后會出現如下提示:存儲在文件 <E:\key\m.crt> 中的證書
3. 客戶端導入證書
命令:keytool -import -keystore "%JAVA_HOME%\jre\lib\security\cacerts -file "E:\key\m.crt" -alias tomcat
ps: 參數路徑如果帶空格,一定要加" ",否則匯報Files錯誤
執行后
輸入密鑰庫口令: 這里輸入的口令必須是changeit; 輸入完成后就會出現如下信息,若%JAVA_HOME%\jre\lib\security\目錄下沒有cacerts,還要再輸入一次changeit;
所有者: CN=172.172.172.172, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
發布者: CN=172.172.172.172, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
序列號: 402163bd
有效期開始日期: Fri Feb 24 16:53:06 CST 2017, 截止日期: Tue May 11 16:53:06 CST 2117
證書指紋:
MD5: A8:ED:C3:13:24:F5:D9:7E:E1:AF:B0:BB:B4:8C:EA:EA
SHA1: 6B:69:79:1A:B0:AD:46:E2:98:74:FF:79:22:E6:A4:7B:7F:4E:9D:19
SHA256: B3:23:F5:DD:6E:42:A4:14:CF:6A:9D:83:43:7A:9E:FA:B1:69:24:E5:15:DD:A5:97:BB:94:A5:A9:29:8D:2D:BE
簽名算法名稱: SHA256withRSA
版本: 3
是否信任此證書? [否]: y 輸入y即可
證書已添加到密鑰庫中
4. 配置tomcat文件
找到tomcat目錄下的conf文件下的server.xml;
找到
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
在這個后面加入
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
//如果要修改端口號請注意一起修改其他相同的端口號。
maxThreads="1500"
SSLEnabled="true"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"
keystoreFile="E:\key\m.jks" 這里是你生成密鑰的路徑
keystorePass="123456" 這里是你生成密鑰時的密碼
keyAlias="tomcat" 這里是你設置的別名(記得保持一致)
keystoreType="JKS" />
到這里就配置完了,然后啟動tomcat,輸入https://您的名字與姓氏:8443/就會出現如下界面
5. 自動將http請求轉為https
在apache tomcat中的/conf/web.xml或者項目中 的web.xml文件前面面加上這樣一段:
<login-config> <auth-method>CLIENT-CERT</auth-method> <realm-name>Client Cert Users-only Area</realm-name> </login-config> <security-constraint> <!-- Authorization setting for SSL --> <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訪問tomcat或者項目進會自動跳轉到https請求地址。
6. 訪問頁面,使用IE瀏覽器訪問會出現以下問題
出現此頁面的原因是瀏覽器端需要安裝證書(當然,點擊轉到此頁也是可以繼續訪問的),IE證書安裝方式如下:
點擊轉到此頁,進入項目頁面,瀏覽器右上角會有證書錯誤的提示,如下圖
點擊查看證書
點擊安裝證書:
根據實際情況選擇,然后點擊下一步:
導入證書到受信任的證書頒發機構,下一步
點擊完成,開始安裝.
點擊是,完成安裝.
安裝完成后重啟瀏覽器,再次訪問就不會出現上面的提示頁面了
7. 使用chrome訪問,會自動導入證書,但是也會出現類似問題,如下圖
我們進入Chrome的設置,點擊安全
選擇管理證書
如果在受信任的證書頒發機構里面沒有找到對應的證書,導入相應的證書即可
PS: 證書文件的頁面可以下載到,如下圖,點擊到復制到文件即可下載出來

安裝證書后,如果還沒有解決, 原因是由於 Chrome停止使用個人自己簽署的SSL證書,就是說如果不是權威認證機構頒發的證書,此頁面提示會一直存在.
解決方式如下: 詳見: https://www.codenong.com/43665243/