1.服務器端單項認證
在Tomcat的server.xml文件中,已經提供了現成的配置SSL連接器的代碼,只要把<Connector>元素的注釋去掉即可:
<!— Define a SSL HTTP/1.1 Connector on port 8443 This connector uses the JSSE configuration, when using APR, the connector should be using the OpenSSL style configuration described in the APR documentation -->
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="F:/server.keystore" keystorePass="123456" />
實際上,基於SSL的HTTPS使用的默認端口是443。但Tomcat在這里將HTTPS端口設置為8443。<Connector>配置里的一些屬性參數如下表:
clientAuth如果設為true(即雙向認證)
keystoreFile指定keystore文件的存放位置
keystorePass指定keystore的密碼
2.服務器和客戶端雙向認證
Server需要:
1)KeyStore: 其中保存服務端的私鑰
2)Trust KeyStore:其中保存客戶端的授權證書
同樣,Client需要:
1)KeyStore:其中保存客戶端的私鑰
2)Trust KeyStore:其中保存服務端的授權證書
生成key和證書
1)生成服務端私鑰,並且導入到服務端KeyStore文件中
keytool -genkey -alias serverkey -keystore serverKey.keystore
2)根據私鑰,導出服務端證書
keytool -export -alias serverkey -keystore serverKey.keystore -file server.crt
server.crt就是服務端的證書
3)將服務端證書,導入到客戶端的Trust KeyStore中
keytool -import -alias serverkey -file server.crt -keystore serverCrt.keystore
tclient.keystore是給客戶端用的,其中保存着受信任的證書
采用同樣的方法,生成客戶端的私鑰,客戶端的證書,並且導入到服務端的Trust KeyStore中
1)keytool -genkey -alias clientkey -keystore clientKey.keystore
2)keytool -export -alias clientkey -keystore clientKey.keystore -file client.crt
3)keytool -import -alias clientkey -file client.crt -keystore clientCrt.keystore
如此一來,生成的文件分成兩組
服務端保存:serverKey.keystore clientCrt.keystore
客戶端保存:clientKey.keystore serverCrt.kyestore
client采用clientKey.keystore中的clientkey私鑰進行數據加密,發送給server
server采用clientCrt.keystore中的client.crt證書(包含了clientkey的公鑰)對數據解密,如果解密成功,證明消息來自client,進行邏輯處理
server采用serverKey.keystore中的serverkey私鑰進行數據叫米,發送給client
client采用serverCrt.kyestore中的server.crt證書(包含了serverkey的公鑰)對數據解密,如果解密成功,證明消息來自server,進行邏輯處理
如果過程中,解密失敗,那么證明消息來源錯誤。不進行邏輯處理。這樣就完成了雙向的身份認證。
tomcat配置:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS"
keystoreFile="f:/serverKey.keystore" keystorePass="123456" keystoreType="JKS"
truststoreFile="f:/clientCrt.keystore" truststorePass="123456" truststoreType="JKS"
/>
truststoreFile指定truststore(受信任的客戶端證書庫)文件的存放位置
truststorePass指定truststore(受信任的客戶端證書庫)的密碼
- 對單個WEB項目使用默認SSL安全訪問
要使你自己的WEB程序應用SSL安全訪問,請遵循如下配置
在你應用的 web.xml 文件的 <web-app></web-app> 中加入如下配置
<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>
你會發現,即使使用 http://....:8080 來訪問你的應用程序,它也會重定向為 https://....8443 訪問,也就是說,你的應用已經強制使用SSL安全訪問層。