教你作一个简单的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安全通信就这么作好了,你们一块儿试一下吧,要是有什么不理想的地方留言一块儿讨论哈!

相关文章
相关标签/搜索