昨天,自己做伺服器的安全傳輸,在登入時用的是http協議,結果自己用抓包的軟體抓到後,探索資料完全可以看到。組長說這樣明文傳輸太不安全了,必須要加密才可以。在網上搜尋了資料,發現https的安全性較高,所有嘗試用tomcat做一個https的伺服器。網上很多教程都是不正確的,自己花了很多時間才把tomcat的https伺服器搭起來,然後用android用戶端進行訪問,最終做了出來。
1.用jdk產生tomcat的伺服器與用戶端需要的認證。
1、產生伺服器憑證庫
keytool -validity 3650 -genkey -v -alias server -keyalg RSA -keystore D:\ssl\server.keystore -dname "CN=192.168.1.190,OU=icesoft,O=icesoft,L=Haidian,ST=Beijing,c=cn" -storepass 123456 -keypass 123456
2、產生用戶端認證庫
keytool -validity 3650 -genkeypair -v -alias client -keyalg RSA -storetype PKCS12 -keystore D:\ssl\client.p12 -dname "CN=client,OU=icesoft,O=icesoft,L=Haidian,ST=Beijing,c=cn" -storepass 123456 -keypass 123456
3、從用戶端認證庫中匯出用戶端認證
keytool -export -v -alias client -keystore D:\ssl\client.p12 -storetype PKCS12 -storepass 123456 -rfc -file D:\ssl\client.cer
4、從伺服器憑證庫中匯出伺服器憑證
keytool -export -v -alias server -keystore D:\ssl\server.keystore -storepass 123456 -rfc -file D:\ssl\server.cer
5、產生用戶端信任認證庫(由服務端認證產生的認證庫)
keytool -import -v -alias server -file D:\ssl\server.cer -keystore D:\ssl\client.truststore -storepass 123456
6、將用戶端認證匯入到伺服器憑證庫(使得伺服器信任用戶端認證)
keytool -import -v -alias client -file D:\ssl\client.cer -keystore D:\ssl\server.keystore -storepass 123456
7、查看認證庫中的全部認證
keytool -list -keystore D:\ssl\server.keystore -storepass 123456
此時已經產生有效期間是10年的自訂認證,其中1、產生伺服器憑證庫的CN=192.168.1.190必須是tomcat伺服器的ip地址,自己需要根據自己的ip地址設定。此時在d盤的ssl檔案夾下產生了5個檔案,如果的盤之前沒有ssl檔案夾,記得建立一個,然後運行之前的代碼。會得到server.cer、client.cer(公開金鑰)、server.keystore(伺服器密鑰庫)等幾個檔案。server.cer會在Android用戶端的時候使用,用來加密資訊。
2.Tomcat配置
編輯${catalina.base}/conf/server.xml檔案(${catalina.base}指Tomcat的安裝目錄)。找到Connector port="8443"的標籤,取消注釋,並修改成如下:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="${catalina.base}/key/server.keystore" keystorePass="123456"
truststoreFile="${catalina.base}/key/server.keystore" truststorePass="123456"/>
備忘:
keystoreFile:指定伺服器密鑰庫,可以配置成絕對路徑,如“D:\apache-tomcat-7.0.55/key/server.keystore”,這是我的tomcat的絕對路徑,根據自己的情況修改。本例中使用相對路徑,且在Tomcat目錄中建立了一個名稱為key的檔案夾,僅供參考。
keystorePass:密鑰庫產生時的密碼
truststoreFile:受信任密鑰庫,和密鑰庫相同即可
truststorePass:受信任密鑰庫密碼
此時點擊server.cer,瀏覽器會提示是否安裝認證,點擊安裝即可。
此時啟動tomcat,用https://localhost:8080/訪問即可。