1.服務器端單項認證web
在Tomcat的server.xml文件中,已經提供了現成的配置SSL鏈接器的代碼,只要把<Connector>元素的註釋去掉便可:tomcat
<!— 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>配置裏的一些屬性參數以下表:app
clientAuth若是設爲true(即雙向認證)加密
keystoreFile指定keystore文件的存放位置url
keystorePass指定keystore的密碼server
2.服務器和客戶端雙向認證xml
Server須要:ssl
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.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安全訪問層。