項目需要,在Android上實施SSL的雙向驗證。
準備環境:
Windows 2003 EE;
OpenSSL;
Tomcat 7;
簡單的過程:
1.用OpenSSL和keytools做CA,Client,Server的認證、私密金鑰。
2.搭建Tomcat的雙向驗證的Web伺服器。
3.用IE驗證SSL的雙向驗證的有效性。
上面的三步參見下面的文檔: tomcat下https ssl 雙向認證
唯一的問題是:Tomcat7的配置不同。server.xml
[xhtml] view
plaincopy
- <Connector
- className="org.apache.catalina.connector.http.HttpConnector"
- protocol="org.apache.coyote.http11.Http11NioProtocol"
- port="8443" minSpareThreads="5" maxSpareThreads="75"
- enableLookups="true" disableUploadTimeout="true"
- acceptCount="100" maxThreads="200"
- scheme="https" secure="true" SSLEnabled="true"
- clientAuth="true" sslProtocol="TLS"
- keystoreFile="C:/OpenSSL/server/server_keystore"
- keystorePass="66666"/>
keystorePass 是自己server_keystore的密碼
單向驗證把clientAuth="true" 修改為false
4.編寫Android的SSL驗證程式,但只能做到單向驗證伺服器的認證。參看下面的連結,其還有源碼
Android OpenSSL分析及執行個體 - zhenyongyuan123的專欄
5.編寫Java版本的Client/Server程式驗證SSL的雙向驗證。
java實現 SSL雙向認證
6.為了瞭解SSL的握手過程,測試用OpenSSL命令列直接驗證Tomcat的SSL雙向驗證過程。
用openssl串連TomCat SSL雙向驗證的命令列。
[python] view
plaincopy
- openssl s_client -connect localhost:8443 -cert client/client-cert.pem -key client/client-key.pem -CAfile ca/ca-cert.pem -state
7.通過上面的過程,發現了步驟4的問題所在,解決了Android訪問TomCat的雙向SSL驗證的WEB伺服器。
8.最有一步,直接用Android 的WebView訪問Tomcat的雙向SSL伺服器,正在研究中... 可能需要修改WebView的源碼,研究完成單獨書寫文檔表述實現方法。
http://blog.csdn.net/win2k3net/article/details/6165690