在完成配置客戶端證書認證后,瀏覽器以https訪問服務器的時候,會提示選擇證書,之后,服務器端會驗證證書。也就意味着只有擁有有效證書的客戶端才能打開該網站。
以下是具體的配置過程。
1. 在服務器端生成相關證書
(1) 生成服務器證書容器。
/usr/java/jdk1.6.0_43/bin/keytool -validity 36500 -genkey -v -alias server_test -keyalg RSA -keystore server.keystore -dname "CN=105.12.201.31,OU=test,O=test,L=shanghai,ST=shanghai,c=cn" -storepass test001 -keypass test001
其中,
validity 指定了有效期多少天,
dname 設定了簽名中包含的一些信息,其中注意,據說CN指定的ip地址需和訪問的ip一致(未測試過不相同的時候是否就會拒絕)。
keyalg 指定簽名的算法,RSA或者DSA
storepass和keypass分別指定容器存儲密碼和讀取密碼。設置成相同的密碼,因為tomcat里只有一個密碼的設置。
(2) 生成信賴的客戶端證書容器
/usr/java/jdk1.6.0_43/bin/keytool -validity 36500 -genkey -v -alias server_test_trust -keyalg RSA -keystore server_trust.keystore -dname "CN=105.12.201.31,OU=test,O=test,L=shanghai,ST=shanghai,c=cn" -storepass test002 -keypass test002
(3) 生成客戶端用秘鑰對
/usr/java/jdk1.6.0_43/bin/keytool -validity 36500 -genkeypair -v -alias client_1 -keyalg RSA -storetype PKCS12 -keystore client_1.p12 -dname "CN=client_1,OU=test,O=test,L=shanghai,ST=shanghai,c=cn" -storepass test003 -keypass test003
導出客戶端用證書
/usr/java/jdk1.6.0_43/bin/keytool -export -v -alias client_1 -keystore client_1.p12 -storetype PKCS12 -storepass test003 -rfc -file client_1.cer
(4) 將客戶端用的證書導入至服務端信賴的客戶端的證書容器
/usr/java/jdk1.6.0_43/bin/keytool -import -v -alias client_1 -file client_1.cer -keystore server_trust.keystore -storepass test002
2. 修改tomcat的配置文件 conf/server.xml
找到原先的https的配置部分,默認是處於注釋狀態,將它放開
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" />
修改為:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="${catalina.base}/keystore/server.keystore" keystorePass="test001" truststoreFile="${catalina.base}/keystore/server_trust.keystore" truststorePass="test002" />
3. web app中設置強制SSL訪問
WEB-INF/web.xml中
<!-- 強制SSL,即http請求自動跳轉成https --> <security-constraint> <web-resource-collection> <web-resource-name>SSL</web-resource-name> <url-pattern>/*</url-pattern><!-- 全站使用SSL --> </web-resource-collection> <user-data-constraint> <description>SSL required</description> <!-- CONFIDENTIAL: 確保傳輸數據不被修改,不能被查看 --> <!-- INTEGRAL: 確保傳輸數據不被修改 --> <!-- NONE: 不做特殊限制--> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
4. 客戶端PC導入上面生成的 client_test.cer 以及 client_test.p12 后,重啟瀏覽器,即可訪問
初次訪問會彈出選擇證書的對話框,選中導入的cer證書即可。