教你作一個簡單的SSL安全通信實例

一直想就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」(不填默認爲本地)。


第二步:爲客戶端生成證書

下一步是爲瀏覽器生成證書,以便讓服務器來驗證它。爲了能將證書順利導入至IEFirefox,證書格式應該是PKCS12,所以,使用以下命令生成:

%JAVA_HOME%\bin\keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore c:\my.p12

對應的證書庫存放在「C:\my.p12」,客戶端的CN能夠是任意值。稍候,咱們將把這個「my.p12」證書庫導入到IEFirefox中。

第三步:讓服務器信任客戶端證書

因爲是雙向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/

首先固然把jarCOPYlib下,以後在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安全通信就這麼作好了,你們一塊兒試一下吧,要是有什麼不理想的地方留言一塊兒討論哈!

相關文章
相關標籤/搜索