一直想就SSL安全通信部分寫一些東西,今天就和你們一塊兒探討一下。 瀏覽器
首先來介紹一下什麼是SSL: SSL (Secure Socket Layer) 爲Netscape所研發,用以保障在Internet上數據傳輸的安全,利用數據加密(Encryption)技術,可確保數據在網絡上之傳輸過程當中不會被截取及竊聽,現已成爲該領域中全球化的標準。tomcat
那麼,應該如何將SSL應用到實際的項目開發當中去呢?咱們須要先了解一個叫作證書的東西。安全
SSL通信協議中有專用的SSL證書,其經過在客戶端瀏覽器和Web服務器之間創建一條SSL安全通道(Secure socket layer)。SSL技術已創建到全部主要的瀏覽器和WEB服務器程序中,所以,僅需安裝服務器證書就能夠激活該功能了,用戶能夠經過服務器證書驗證他所訪問的網站是不是真實可靠。服務器
接下來,咱們要作的第一步就是創建本地SSL證書。網絡
1. 首先,咱們應確認本身的電腦上已經安裝好了JDK1.6或以上版本。並配置好了相關路徑(JAVA_HOME,PATH,CLASSPATH),由於下面會用到其中自帶的一個keytool工具來生成密鑰文件。另外,還應安裝TOMCAT6.0或以上版本,後面會對其相關配置進行修改。框架
2.單擊開始—>運行—>cmd—>定位到你要生成keystore的路徑(定位路徑你們應該都會吧,基本操做命令,我就不寫了)—>按照下列步驟輸入命令:(注意:輸入命令時的%JAVA_HOME%爲你的JDK安裝目錄)socket
第一步:爲服務器生成證書jsp
假定目標機器的域名是「localhost」,keystore文件存放在「C:\tomcat.keystore」(此時應定位到c:\目錄下,不然會在相應目錄下生成keystore),口令爲「password」(本身設定),使用以下命令生成:工具
%JAVA_HOME%\bin\keytool -genkey -v -alias tomcat -keyalg RSA -keystore tomcat.keystore測試
若是Tomcat所在服務器的域名不是「localhost」,應改成對應的域名,如「www.sina.com.cn」,不然瀏覽器會彈出警告窗口,提示用戶證書與所在域不匹配。在本地作開發測試時,應填入「localhost」(不填默認爲本地)。
第二步:爲客戶端生成證書
下一步是爲瀏覽器生成證書,以便讓服務器來驗證它。爲了能將證書順利導入至IE和Firefox,證書格式應該是PKCS12,所以,使用以下命令生成:
%JAVA_HOME%\bin\keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore c:\my.p12
對應的證書庫存放在「C:\my.p12」,客戶端的CN能夠是任意值。稍候,咱們將把這個「my.p12」證書庫導入到IE和Firefox中。
第三步:讓服務器信任客戶端證書
因爲是雙向SSL認證,服務器必需要信任客戶端證書,所以,必須把客戶端證書添加爲服務器的信任認證。因爲不能直接將PKCS12格式的證書庫導入,咱們必須先把客戶端證書導出爲一個單獨的CER文件,使用以下命令:
%JAVA_HOME%\bin\keytool -export -alias mykey -keystore my.p12 -storetype PKCS12 -storepass password -rfc -file c:\my.cer
經過以上命令,客戶端證書就被咱們導出到「C:\my.cer」文件了。下一步,是將該文件導入到服務器的證書庫,添加爲一個信任證書:
%JAVA_HOME%\bin\keytool -import -v -file my.cer -keystore tomcat.keystore
經過list命令查看服務器的證書庫,咱們能夠看到兩個輸入,一個是服務器證書,一個是受信任的客戶端證書:
%JAVA_HOME%\bin\keytool -list -keystore tomcat.keystore
第四步:配置Tomcat服務器
打開Tomcat根目錄下的/conf/server.xml,找到以下配置段,修改以下:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="C:/tomcat.keystore" keystorePass="password"
truststoreFile="C:/tomcat.keystore" truststorePass="password"
/>(此處的相關文件目錄設置爲本身生成的key所在目錄便可,password爲本身設定的password)
第五步:導入客戶端證書
若是設置了clientAuth="true",則須要強制驗證客戶端證書。雙擊「C:\my.p12」便可將證書導入至IE:(也可用瀏覽器進行訪問時進行導入)
p12 證書直接雙擊而後按提示下一步就可導入。
呵呵 到這一步,咱們的全部證書就全搞定了,咱們能夠啓動tomcat服務器(去tomcat安裝目錄下的bin\startup.bat),在瀏覽器中輸入:https://localhost:8443,若是配置都正確的話,應該能夠跳轉到index.jsp。
下面要講的就是如何在咱們寫的JSP中使用SSL了。
我用的是從網上下載的一個不錯的基於Struts2框架的SSL插件,下載地址爲:http://code.google.com/p/struts2-ssl-plugin/
首先固然把jar包COPY到lib下,以後在struts.xml中設置:
<constant name="struts2.sslplugin.httpPort" value="8085"/>
<constant name="struts2.sslplugin.httpsPort" value="8443"/>
<package name="default" extends="ssl-default">
注意,default裏能夠繼承這個ssl-default,由於其實這個ssl-default也是繼承 struts-default的,放心用 。還要注意的是,須要使用SSL安全通信的action要放到extends=ssl-default的包內,否則用submit提交的時候是不會自動跳轉到https的。
以後在你要某個SSL的方法前,用註釋,就好了:
@Secured
public String execute1() throws Exception {
…
}
若是要整個類都要SSL,則
@Secured
public class LoginAction extends ActionSupport {
….
}
下面,啓動你的JSP項目,你會發現從http:…跳轉時變爲了https:…而且會有證書安全提示,呵呵,第一個SSL安全通信就這麼作好了,你們一塊兒試一下吧,要是有什麼不理想的地方留言一塊兒討論哈!