一、為伺服器生成證書
keytool -genkey -alias tomcat -keyalg RSA -keystore /www/wdlinux/my.keystore -dname "CN=mytomcat.com, OU=mytomcat.com, O=mytomcat.com, L=SH, ST=SH, C=CN" -keypass changeit -storepass changeit -validity 36500
-genkey表示要建立一個新的密鑰
-alias密鑰的别名
-keyalg使用加密的算法,這裡是RSA
-keystore 密鑰儲存在D:盤目錄下的mykeystore檔案中
-keypass私有密鑰的密碼,這裡設定為changeit
-storepass 存取密碼,這裡設定為changeit,這個密碼提供系統從mykeystore檔案中将資訊取出
-validity該密鑰的有效期為 36500表示100年 (預設為90天)
使用-dname一次性将參數填寫完。
-dname表示密鑰的Distinguished Names,
CN=mytomcat.com
OU=mytomcat.com
O=mytomcat.com
L=SH
S=SH
C=CN
Distinguished Names表明了密鑰的發行者身份
輸入密鑰庫密碼:
再次輸入新密碼:
您的名字與姓氏是什麼?
[Unknown]: mytomcat.com # 此處要寫域名或者: localhost
您的組織機關名稱是什麼?
[Unknown]: mytomcat.com
您的組織名稱是什麼?
[Unknown]: mytomcat.com
您所在的城市或區域名稱是什麼?
[Unknown]: SH
您所在的省/市/自治區名稱是什麼?
[Unknown]: SH
該機關的雙字母國家/地區代碼是什麼?
[Unknown]: CN
CN=mytomcat.com, OU=mytomcat.com, O=mytomcat.com, L=SH, ST=SH, C=CN是否正确?
[否]: y
正在為以下對象生成 2,048 位RSA密鑰對和自簽名證書 (SHA256withRSA) (有效期為 36,50
0 天):
CN=mytomcat.com, OU=mytomcat.com, O=mytomcat.com, L=SH, ST=SH, C=CN
輸入 <tomcat> 的密鑰密碼
(如果和密鑰庫密碼相同, 按回車):
再次輸入新密碼:
[正在存儲/www/wdlinux/my.keystore]
将mytomcat.com寫入/etc/hosts中, 127.0.0.1 mytomcat.com
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL0cTM4UzM0UTM5IDOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
二、為用戶端生成證書
keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore /www/wdlinux/client.p12 -validity 36500
"CN=mytomcat.com, OU=mytomcat.com, O=mytomcat.com, L=SH, ST=SH, C=CN"
三. 讓伺服器信任用戶端證書
keytool -export -alias client -keystore /www/wdlinux/client.p12 -storetype PKCS12 -storepass changeit -rfc -file /www/wdlinux/clientforserver.cer
- 将該檔案導入到伺服器的證書庫,添加為一個信任證書:
keytool -import -v -file /www/wdlinux/clientforserver.cer -keystore /www/wdlinux/tomcat.keystore
- 檢視證書資訊:完成之後通過list指令檢視伺服器的證書庫,可以看到兩個證書,一個是伺服器證書,一個是受信任的用戶端證書:
keytool -list -v -keystore /www/wdlinux/my.keystore -storepass changeit
四、讓用戶端信任伺服器證書
keytool -export -alias tomcat -keystore /www/wdlinux/my.keystore -file /www/wdlinux/CA.cer
五、用戶端安裝證書
現得到如下四個證書檔案
CA.cer
client.p12
clientforserver.cer
my.keystore
注:在用戶端輕按兩下運作client.p12,一直點選下一步,直到顯示導入成功。
六、修改tomcat參數釋出服務
tomcat/bin/server.xml中修改
1、注釋掉8080端口配置 (不是必須,也可以不注釋,不注釋的話,則http 8080端口也可以通路)
<!--<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />-->
2、取消注釋8443端口配置,修改内容:
tomcat8.5版本以上修改方式:
tomcat8.5以上版本的修改方式:
将
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
修改成:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true"
keystoreFile="/www/wdlinux/my.keystore" keystorePass="changeit"
>
<!--<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>-->
</Connector>
tomcat8.0版本修改方式:
tomcat8.0的server.xml檔案應該這樣改動:
server.xml配置:
将
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
修改成:
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
maxThreads="150"
scheme="https"
secure="true"
clientAuth="true"
sslProtocol="TLS"
keystoreFile="/www/wdlinux/my.keystore"
keystorePass="changeit"
truststoreFile="/www/wdlinux/my.keystore"
truststorePass="changeit" />
屬性說明:
clientAuth:設定是否雙向驗證,預設為false,設定為true代表雙向驗證
keystoreFile:伺服器證書檔案路徑
keystorePass:伺服器證書密碼
truststoreFile:用來驗證用戶端證書的根證書,此例中就是伺服器證書
truststorePass:根證書密碼
注意:
① 設定clientAuth屬性為True時,需要手動導入用戶端證書才能通路。
② 要通路https請求 需要通路8443端口,通路http請求則通路Tomcat預設端口(你自己設定的端口,預設8080)即可。
注:強制https通路
在 tomcat /conf/web.xml 中的 </welcome- file-list> 後面加上這
<login-config>
<!-- Authorization setting for SSL -->
<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>