背景
1、生成服務器證書:
CMD進入JDK安裝目錄:cd c:/"Program Files"/Java/jdk1.6.0_43/bin。輸入命令:
keytool -genkey -v -alias tomcat -keyalg RSA -keystore F:/ssl/tomcat.keystore -validity 365
(其中365代表有效期天)
注:以上的keystore密碼建議設置成一致,避免混亂。這里設置測試密碼為123456。輸入密碼后,提示輸入名字與姓氏,這里輸入瀏覽器訪問域名。其他項直接回車跳過即可。
2、生成客戶端證書:
keytool -genkey -v -alias clientkey -keyalg RSA -storetype PKCS12 -keystore F:/ssl/clientkey.p12
3、這里服務端跟客戶端生成完證書,雙向需要認證。首先,讓服務器信任客戶端證書:
由于不能直接將PKCS12格式的證書庫導入,所以必須先把客戶端證書導出為一個單獨的CER文件。
keytool -export -alias clientkey -keystore F:/ssl/clientkey.p12 -storetype PKCS12 -storepass 123456 -rfc -file F:/ssl/clientkey.cer
注:alias的別名clientkey必須與客戶端證書別名一致。storepass為上述設置的密碼。
4、將客戶端證書導入服務器證書庫。(服務器信任客戶端證書)
keytool -import -v -file f:/ssl/clientkey.cer -keystore f:/ssl/tomcat.keystore
5、客戶端信任服務器證書:
keytool -keystore f:/ssl/tomcat.keystore -export -alias tomcat -file f:/ssl/tomcat.cer
導入后,本地安裝證書。雙擊tomcat.cer根據提示安裝。
6、配置tomcat種server.xml種8443端口。觀察tomcat中端口配置:
這里有配置redirectPort="8443" 。猜測這里如果添加了SSL/TLS證書后,利用http協議8080端口訪問將自動重定向到8443端口。所以這里修改8443為TLS認證協議:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="d:/122-ssl/tomcat.keystore" keystorePass="123456"
ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_
CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_C
BC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RS
A_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
/>
參數說明:keystoreFile證書路徑。keystorePass設置證書密碼。ciphers設置這個參數,避免chrome瀏覽器由于安全機制過濾,提示“
有時候tomcat會報錯,此時需要修改protocol為上述便可以解決
7、配置工程web.xml,添加ssl認證,將http請求全部需要ssl認證:
<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>
<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>
8、本地使用http://localhost:8443/測試訪問。
9、如果使用分布式工程。需要將另一個tomcat訪問端口重定向redirectPort="8443"進行修改。比如修改為8444,此時ssl配置Connector 也應改為8444。否則將提示端口被占用。
10. 有的網站需要將cer證書轉換成pem證書才能用,此時
安裝好openssl之后,進入openssl目錄:
輸入openssl命令,即進入命令模式:
先將要轉換的cer證書也放到openssl目錄下面,然后執行以下命令:
x509 -inform der -in tomcat.cer -out tomcat.pem