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安全訪問層。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
