Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1967036
  • 博文数量: 606
  • 博客积分: 9991
  • 博客等级: 中将
  • 技术积分: 5725
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-17 19:07
文章分类

全部博文(606)

文章存档

2011年(10)

2010年(67)

2009年(155)

2008年(386)

分类: Java

2009-03-27 13:00:29

What is SSL

       虽然以前也对SSL有所闻,也常看到IE突然蹦出一个安全提示框,但是对于SSL的具体原理以及结构没有仔细看过。既然要用了,还是那个原则,先把原理搞清楚,然后再去实践。

       SSL(Secure Socket Layer)是一种通信交互协议,由Netscape公司在1994年制定,主要目的就是确保在web 服务器和浏览器之间数据传输安全。SSL协议层是在TCP/IP层和应用层之间。当前TLS(Transport Layer Security)正在逐渐替代SSL(最新版本v3)

       SSL协议分成以下几部分:

       Record ProtocalSSL的基础层,SSL所有的上层操作都是基于这个层次,这层主要负责消息内容的分段,压缩,加密和数字摘要等操作。

       Handshake Protocal故名思义就是握手协议,也是在正式应用数据传输前双方交换加密设置以及认证的流程规范协议。

       Change Cipher Spec Protocol是基于record协议层通知远端服务器修改record协议层中安全设置的协议。

       Alert Protocol是基于record协议发送警告到远端服务器的协议。

SSL的具体流程图:

       SSL的流程也体现了对于对称性密钥和非对称性密钥的使用,由于对称性密钥加密比非对称性密钥加密要快1000倍,那么对称性密钥被用来做对内容的加密,而非对称性密钥用来做传递对称性密钥的加密手段。

       服务端所需要具备的是一个拥有服务端的标示,公钥私钥对的证书。在握手的流程中,服务端将带有公钥的证书抽取出来发送给客户端,客户端就首先可以判断证书颁发者是否属于本机受信的CA,如果不是,就会类似于IE跳出提示,如果通过了这部分CA认证,双方就可以通过非对称性加密算法来交换客户端生成的临时对称密码,进行安全加密信息交互。

配置详解:
1
、使用JDK自带的工具创建密匙库和信任库。
  1
)通过使用以下的命令来创建服务器端的密匙库:


 keytool -genkey -alias Server -keystore server.keystore -keyalg RSA
  
输入keystore密码:
  changeit
  
您的名字与姓氏是什么?

  [Unknown]
  Server
  
您的组织单位名称是什么?

  [Unknown]
  ec
  
您的组织名称是什么?

  [Unknown]
  ec
  
您所在的城市或区域名称是什么?

  [Unknown]
  beijing
  
您所在的州或省份名称是什么?

  [Unknown]
  beijing
  
该单位的两字母国家代码是什么

  [Unknown]
  CN
CN=Server, OU=ec, O=ec, L=beijing, ST=beijing, C=CN 
正确吗?

  [
]  y

输入的主密码

        
(如果和 keystore 密码相同,按回车):


   
以上命令执行完成后,将获得一个名为server.keystore的密匙库。
   
  2)
生成客户端的信任库。首先输出RSA证书:
 


keytool -export -alias Server -file test_axis.cer -storepass changeit -keystore server.keystore


  
然后把RSA证书输入到一个新的信任库文件中。这个信任库被客户端使用,被用来验证服务器端的身份。
 


keytool -import -file test_axis.cer -storepass changeit -keystore client.truststore -alias serverkey -noprompt


  
以上命令执行完成后,将获得一个名为client.truststore的信任库。
  
  3
)同理生成客户端的密匙库client.keystore和服务器端的信任库server.truststore.方便起见给出.bat文件
     gen-cer-store.bat
内容如下:

    
     set SERVER_DN="CN=Server, OU=ec, O=ec, L=BEIJINGC, S=BEIJING, C=CN"
     set CLIENT_DN="CN=Client, OU=ec, O=ec, L=BEIJING, S=BEIJING, C=CN"
     set KS_PASS=-storepass changeit
     set KEYINFO=-keyalg RSA

     keytool -genkey -alias Server -dname %SERVER_DN% %KS_PASS% -keystore server.keystore %KEYINFO% -keypass changeit
     keytool -export -alias Server -file test_axis.cer %KS_PASS% -keystore server.keystore
     keytool -import -file test_axis.cer %KS_PASS% -keystore client.truststore -alias serverkey -noprompt

     keytool -genkey -alias Client -dname %CLIENT_DN% %KS_PASS% -keystore client.keystore %KEYINFO% -keypass changeit
     keytool -export -alias Client -file test_axis.cer %KS_PASS% -keystore client.keystore
     keytool -import -file test_axis.cer %KS_PASS% -keystore server.truststore -alias clientkey -noprompt


     
  
好的,现在我们就有了四个文件:server.keystoreserver.truststoreclient.keystoreclient.truststore
  
2
、更改Tomcat的配置文件(server.xml),增加以下部署描述符:(其实里面有,只是被注释掉了)

修改%TOMCAT_HOME%\conf\server.xml,以文字编辑器打开,查找这一行:
xml 代码
  1.   
将之后的那段的注释去掉,并加上 keystorePass及keystoreFile属性。
注意,tomcat不同版本配置是不同的:

Tomcat4.1.34配置:

xml 代码
  1.   
  2.    <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"  
  3.            port="8443" enableLookups="true" scheme="https" secure="true"  
  4.            acceptCount="100"  
  5.            useURIValidationHack="false" disableUploadTimeout="true"  
  6.            clientAuth="false" sslProtocol="TLS"    
  7.            keystoreFile="server.keystore"    
  8.            keystorePass="changeit"/>  

Tomcat5.5.9配置:
 
xml 代码
  1.   
  2. <Connector port="8443" maxHttpHeaderSize="8192"  
  3.            maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  
  4.            enableLookups="false" disableUploadTimeout="true"  
  5.            acceptCount="100" scheme="https" secure="true"  
  6.            clientAuth="false" sslProtocol="TLS"    
  7.            keystoreFile="server.keystore"    
  8.            keystorePass="changeit"/>  

Tomcat5.5.20配置(此配置同样可用于Tomcat6.0)
 

xml 代码
  1.   
  2. <Connector protocol="org.apache.coyote.http11.Http11Protocol"    
  3.                      port="8443" maxHttpHeaderSize="8192"  
  4.            maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  
  5.            enableLookups="false" disableUploadTimeout="true"  
  6.            acceptCount="100" scheme="https" secure="true"  
  7.            clientAuth="false" sslProtocol="TLS"                   
  8.            keystoreFile="server.keystore"    
  9.            keystorePass="changeit"/>  

Tomcat6.0.10配置:

xml 代码

            port="8443" minSpareThreads="5" maxSpareThreads="75"  
           enableLookups="true" disableUploadTimeout="true"    
           acceptCount="100"  maxThreads="200"  
           scheme="https" secure="true" SSLEnabled="true"  
           clientAuth="false" sslProtocol="TLS"  
           keystoreFile="D:/SSL certificate/server.keystore"    
           keystorePass="changeit"
    truststoreFile="D:/SSL certificate/server.truststore" truststorePass="changeit"
    /> 

tomcat6支持3种,请参考以下文档:

验证配置

访问

阅读(2027) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~