SSL安全解决方案(转)

http://blog.csdn.net/photnman/article/details/388853

背景及部分安全知识
在高度保证应用程序安全的过程中我们不免会考虑到如下的安全需求,然后根据这些安全需求提出各种安全技术:
1. 完整性验证。即防止我们的内容在网络传输的过程中不被篡改,不失其真实性。我们可以采用消息摘要技术来保证数据的完整性。对于同一内容采用同一算法计算出来的摘要是唯一的,而且是不可逆,即不能由摘要计算出原文内容。目前较为常用的算法有:MD5, SHA 
2. 机密性保持。即防止内容被别人读懂。我们采用加密技术对内容进行加密,目前有对称密钥(如DES算法)和非对称密钥(如RSA)。具体知识可以查阅相关资料J
3. 认证和访问授权。通俗的说就是对来访者提供的信息进行分析和判断,从而确定来访者的身份,然后根据身份来决定他具有什么权限。这里我们一般采用证书认证。
4. 不可抵赖的证据。
5. 审计的证据。对一些安全性十分重要的数据操作进行纪录和观察。
SSL(Secure socket Layer) 安全套接层协议主要是使用公开密钥体制和X.509数字证书技术保护信息传输的机密性和完整性,它不能保证信息的不可抵赖性,主要适用于点对点之间的信息传输,常用Web Server方式。对于电子商务应用来说,使用SSL可保证信息的真实性、完整性和保密性。但由于SSL不对应用层的消息进行数字签名,因此不能提供交易的不可否认性。
实际上,SSL是允许WEB浏览器和WEB服务通过安全连接进行通信的技术。在这种安全连接上,数据在发送前经过加密码,然后服务器接收时先解密再进行处理。浏览器和服务器在发送任何数据之前都对所有流量加密。SSL是针对下面重要的安全性考虑的:
Ø 身份验证:在第一次尝试与web服务器通过安全连接通信时,服务器将以服务器证书的形式向浏览器发送一份凭证。这个证书的目的是验证这个站点就是它所宣称的那个。在有些情况下,服务器可能要求客户端提供证明它就是它所宣称的身份的证书(即客户端身份验证)。
Ø 机密性:数据通过网络在客户端和服务端进行传送时,第三方可以查看并截获数据。SSL响应是加密,这样数据就不会被第三方解密而保持其机密性。
Ø 完整性:数据通过网络在客户端和服务端进行传送时,第三方可以查看并截获数据。SSL可以保证数据不被第三方修改。
方案的选择
鉴于以上安全要求,我们初步设想了两种方案:
1. 客户端对传输数据进行摘要计算然后数字签名再加密传输,服务端再对接受到的数据进行解密验证。考虑的算法有摘要算法有MD5,加密算法有DES,RSA
2. 采用SSL,把加密验证的任务交给协议处理,客户端和服务端的程序不作任何处理。
       第一种方案由于delphi用同一算法加密出来的结果java无法解密而放弃。估计是编码的原因,但因时间问题所以不再深入研究。
       第二种方案目前已经配置好。下面的详细给出有关步骤。
所需软件
1. jboss3.2.1  用途:应用服务器
2. JDK1.4.1_02 其中已经包含了JSSE的最新版本。或者下载JSSE 1.0.3_01  用途:用来产生服务端使用的密钥对(keystore)。
3. Openssl 0.9.7b  用途:用来产生CA证书、签名并生成IE可导入的PKCS#12格式私钥
软件的安装
1. jboss(略)
2. 如果是JDK1.4.1_02,则jsse已经安装好。
3. 安装jsse:把JSSE包内的lib/*.jar拷贝到JAVA_HOME/jre/lib/ext/下,并且加入到CLASSPATH中;
4. .编辑JAVA_HOME/jre/lib/security/java.security文件,主要是添加:
security.provider.1=sun.security.provider.Sunsecurity.provider.2=com.sun.net.ssl.internal.ssl.Provider
5. 5. 确定你的系统有下面文件的其中一个:
1)JAVA_HOME/jre/lib/security/jssecacerts或者
2)JAVA_HOME/jre/lib/security/cacerts
这样,你的系统已经安装好了JSSE
6. Openssl 0.9.7b安装(略)
SSL配置步骤
1.  建立自己的CA证书(假设openssl安装到了c:/openssl)
1) 在适当的地方建立自己的CA目录,例如:e:/ca
2) 我的电脑-〉右键-〉属性-〉高级-〉环境变量-〉新建->administrator用户变量-〉变量名:OPENSSL_CONF->变量值:C:/openssl/ssl/openssl.cnf
3) 生成CA密钥
      openssl genrsa -out e:/ca/ca-key.pem 1024
genrsa [产生密钥命令] –out[密钥文件输出路径] 1024 [密钥位数]
4) 生成待签名的证书
      openssl req -new -out e:/ca/ca-req.csr -key e:/ca/ca-key.pem
req[产生证书命令]-new[新生成]-out[证书文件输出路径]-key[私钥文件路径]
    控制台显示并需要你输入:
    Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:gd
Locality Name (eg, city) []:sz
Organization Name (eg, company) [Internet Widgits Pty Ltd]:oaking
Organizational Unit Name (eg, section) []:its
Common Name (eg, YOUR name) []:itsCA
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:itsca
An optional company name []:oaking
[注]:粗体为输入值。在这里我们设置生成签名证书的密码为itsca
5) 用CA私钥自签名
    openssl x509 -req -in e:/ca/ca-req.csr -out e:/ca/ca-cert.pem -signkey e:/ca/ca-key.pem -days 365
x509[签发x509证书命令]-req[输入待签发证书]-in[输入待签发证书文件路径]-out[产生x509证书文件输出路径]-signkey[自签发密钥文件路径]-days[证书有效期]–CA[签发跟证书]-Cakey[根证书密钥文件] –-CAcreateserial[创建序列号]
2. 建立服务器证书
1) .建立工作目录, 在ca目录下建立自己的server目录
2) .生成server密钥对
     keytool -genkey -alias itsserver -validity 365 -keyalg RSA -keysize 1024 -keystore E:/ca/server/server_keystore
    -genkey[产生密钥对]-alias[密钥对别名]-validity[密钥有效期]-keyalg[密钥算法参数]-keysize[密钥位数]-keypass[密钥保护密码]-storepass[存储密码]-dname[别名相关附加信息]-keystore[密钥存储文件路径]
[注]  -alias后的tomcat是密钥对的名字可替换为自己需要的名字;
-keypass与-storepass后的密码为保护密码必须6位;
其中cn是服务器的名字一定要与WEB服务器中设置的一样。
    控制台显示需要我们输入的内容如下:
    输入keystore密码:  itskey
您的名字与姓氏是什么?
       [Unknown]:  192.168.70.95
您的组织单位名称是什么?
       [Unknown]:  its
您的组织名称是什么?
       [Unknown]:  oaking
您所在的城市或区域名称是什么?
       [Unknown]:  sz
您所在的州或省份名称是什么?
       [Unknown]:  gd
该单位的两字母国家代码是什么
       [Unknown]:  CN
CN=192.168.70.95, OU=its, O=oaking, L=sz, ST=gd, C=CN 正确吗?
       [否]:  y
输入<itsserver>的主密码
        (如果和 keystore 密码相同,按回车):
    [注]粗体为输入部分。-alias后的itsserver是密钥对的名字可替换为自己需要的名字;-keypass与-storepass后的密码为保护密码必须6位;-keypass与-storepass后的密码为保护密码必须6位,在这里我们设为itskey,而且最好一样,;其中cn是服务器的名字一定要与WEB服务器中设置的一样。
3) .生成待签名证书
    keytool -certreq -alias itsserver -sigalg MD5withRSA -file E:/ca/server/server.csr -keypass itskey -keystore e:/ca/server/server_keystore -storepass itskey
    -certreq[产生待签名证书]-alias[证书别名]-sigalg[证书算法参数]-file [产生文件输出路径]-keypass[密钥保护密码]-keystore[存储文件路径]-storepass[存储密码]
   [注] 这里的证书别名等于上面keystore的别名,keypass(主密码/密钥保护密码)和storepass也与上面的一致 
4) 拷贝C:/openssl/apps/ca-cert.srl文件到ca目录(必须在5前,顺序不能颠倒)
5) 用CA私钥签名
    openssl x509 -req -in E:/ca/server/server.csr -out E:/ca/server/server-cert.pem -CA E:/ca/ca-cert.pem -CAkey E:/ca/ca-key.pem -days 365
3. 将CA根证书和服务器证书导入服务端
1) 导入CA根证书
    keytool -import -v -trustcacerts -storepass itscaroot -alias its_ca_root -file ca-cert.pem -keystore  e:/ca/server/cacerts
    -import[导入命令] -v–trustcacerts[导入信任证书] –storepass[存储密码]-alias[证书别名]-file[证书文件路径]-keystore[导入文件路径]-alias为CA根证书的别名。
[注]存储密码必须至少为6位。这里我们设为itscaroot
2) 拷贝cacerts文件到C:/j2sdk1.4.1_01/jre/lib/security目录
3) 导入服务器证书
keytool -import -v -trustcacerts -storepass itskey -alias itsserver -file E:/ca/server/server-cert.pem -keystore E:/ca/server/server_keystore
[注] 此时的-storepass为生成证书时输入密码。-alias为服务器证书的别名。
4) 查看证书
查看CA证书      keytool -list -keystore server/cacerts
查看服务器证书 keytool -list -keystore server/server_keystore
4. 在jboss3.2.2中配置SSL:
1) 拷贝server_keystore到jboss3.2.2/server/all/conf目录下
2) 在${JBOSS_HOME}/server/all/deploy/jbossweb-tomcat41.sar/META-INF目录下的jboss-service.xml文件去掉如下内容的注释,并更改keystorePass为我们的keystorePass,如我们这次配keystorePass为itskey:
<Connector className = "org.apache.coyote.tomcat4.CoyoteConnector"
        address="${jboss.bind.address}" port = "8443" scheme = "https" secure = "true">
<Factory className= "org.apache.coyote.tomcat4.CoyoteServerSocketFactory"
          keystoreFile="${jboss.server.home.dir}/conf/server_keystore"
                   keystorePass="itskey"
                   protocol = "TLS"/>
</Connector>
然后注释掉下面这段内容:
 <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
                  address="${jboss.bind.address}" port="8080" minProcessors="5" maxProcessors="100"
    enableLookups="true" acceptCount="10" debug="0"
    connectionTimeout="20000" useURIValidationHack="false"/>
 意图在于封住8080端口,只能通过SSL访问
    这样,SSL就配置好了
5.  配置IE客户端
1) 建立自己的Client目录,在ca目录下建立自己的Client目录
2) 生成Client密钥对
openssl genrsa -out E:/ca/client/client-key.pem 1024
3) 生成待签名的证书
openssl req -new -out E:/ca/client/client-req.csr -key E:/ca/client/client-key.pem
控制台显示要输入内容:
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:gd
Locality Name (eg, city) []:sz
Organization Name (eg, company) [Internet Widgits Pty Ltd]:oaking
Organizational Unit Name (eg, section) []:its
Common Name (eg, YOUR name) []:192.168.70.163
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:itsclient
An optional company name []:oaking
[注] Common Name为客户端机器的名字
4) 用CA私钥签名
    openssl x509 -req -in E:/ca/client/client-req.csr -out E:/ca/client/client-cert.pem -signkey E:/ca/client/client-key.pem -CA E:/ca/ca-cert.pem -CAkey E:/ca/ca-key.pem -CAcreateserial -days 365
5) 生成Client端可以导入的个人证书
    openssl pkcs12 -export -clcerts -in E:/ca/client/client-cert.pem -inkey E:/ca/client/client-key.pem -out E:/ca/client/client.p12
pkcs12[生成PKS12格式证书命令]-export[导出文件]-clerts[仅导出client证书]-in[输入的client证书文件路径]-inkey[client证书密钥文件路径]-out[导出PKS12格式文件路径]
    [注] 系统会提示你输入密码,这个密码是导入IE时提示输入的私钥保护密码,不必与3步输入的相同。我们这里输入123456
6. 在IE浏览器的”Internet选项”菜单的高级选项选择”使用SSL2.0”和”SSL3.0”。
7. 将CA证书与client证书导入IE
1) 导入CA根证书
    将目录ca中的ca-cert.pem改名为ca-cert.cer;
在client端的IE中使用<工具>,< Internet选项>,<内容>,<证书>,<导入>,把我们生成的CA根证书导入,使其成为用户信任的CA。
2) 导入client证书
将client证书(client.p12)导入到client端的IE中作为client证书,导入过程同上
8. 启动jboss3.2.1
9. 在IE浏览器的地址栏中输入https://localhost:8443,如果前面的操作都正确,应该可以看到网站静态导出的页面,在这之前,IE提示你是否访问安全页面。同时状态栏上的小锁处于闭合状态,表示您已经成功地与服务器建立了要求客户端验证的SSL安全连接。
至此,我们的SSL配置已全部结束J

更多相关文章
  • SSL拦截-加密流量审查解决方案
    伴随着互联网的快速发展,各种各样不安全或者敏感的内容越来越多地出现在各种网站,包括病毒.木马等恶意软件或者其它相关部门禁止的内容.各种安全设备应运而生,对互联网流量进行监控审查,如UTM.IDS等.但是与此同时越来越多的网站开始使用SSL/TLS加密连接,即我们在浏览器中看到的地址栏显示HTTPS: ...
  • 在服务器部署好nagios,分别在客户端安装好nrpe和nagios-plugins,并在nrpe.cfg里面修改server_address=本机IPallowed_hosts=nagios服务器IP但在nagios服务器端使用nrpe检查出现NRPE: Unable to read output ...
  • 什么是VPNIP机制仿真出一个私有的广域网"是通过私有的隧道技术在公共数据网络上仿真一条点到点的专线技术.所谓虚拟,是指用户不再需要拥有实际的长途数据线路,而是使用Internet公众数据网络的长途数据线路. OpenVPN的功能可以将两个不同的网段打通一条通道,可以互相访问,对于运维人员 ...
  • 基于Linux的OpenVPN网络之OpenVPN概述
    OpenVPN 是一个开源的加密隧道构建工具,基于 OpenSSL 的 SSL/TLS 协议,可以在 Internet中实现点对点的 SSL VPN 安全连接.使用 OpenVPN 的好处是安全.易用和稳定,且认证方式灵活,具备实现 SSL VPN 解决方案的完整特性.OpenVPN 可以应用于 L ...
  • 冰峰新一代SSL VPN 不仅仅是VPN 经济的高速发展,使得移动办公变得越加普遍.而移动办公人员,他们总是希望无论何时何地.无论使用何种网络和接入设备,都能非常安全方便的访问企业的业务系统.正是在此种需求下,SSL VPN技术得到了充分的应用和发展. 然而,我们不得不承认,传统的SSL VPN虽然 ...
  • LINUX下openvpn详细配置
    LINUX openvpn 是通过私有的隧道技术在公共数据网络上仿真一条点到点的专线技术.所谓虚拟,是指用户不再需要拥有实际的长途数据线路,而是使用Internet公众数据网络的长途数据线路.1.2 OpenVPN(安全套接层)协议是一种在Internet上保证发送信息安全的通用协议.它处于应用层. ...
  • 金蝶K/3 ERP 基于Citrix Access Gateway 的SSL VPN 部署方案 1.背景金蝶集团与思杰(Citrix )公司长久以来有着良好的产品合作关系,Citrix Presentation ServerTM 作为金蝶K/3 产品的推荐远程接入方案已被无数客户证明是高效.可靠的, ...
  • Web应用性能提升10倍的10个建议
    转载自http://blog.jobbole.com/94962/ 提升 Web 应用的性能变得越来越重要.线上经济活动的份额持续增长,当前发达世界中 5 % 的经济发生在互联网上(查看下面资源的统计信息). 我们现在所处的时代要求一直在线和互联互通,这意味着用户对性能有更高的期望.如果网站响应不及 ...
一周排行
  • 有意思OSIANDTCP/IP.
    很多人都知道 OSI AND TCP/ip.但是我敢保证很多人不知道他们的联系和应用.我现 ...
  • 有PDF详解文档~! 最佳校园工程设计帖-某大学校园网设计方案                                                                              ...
  • 一.作用域在Python 2.0及之前的版本中,Python只支持3种作用域,即局部作用域,全局作用域,内置作用域:在Python 2.2中,Python正式引入了一种新的作用域 --- 嵌套作用域:在Python ...
  • 虽然是linux新到不能再新的新手,但是在看了一个星期的资料后还是自我感觉很有进步,因此记录一些细节,当做复习也好,当做留底方便以后系统出毛病看看也好.整个过程基于http://wenku.baidu.com/vie ...
  • vlan的配置
      pc  ip 192.168.1.     Switch>enSwi ...
  • Excel用两种方法制作中国特色斜线表头
    Excel 用两种方法制作中国特色斜线表头一.插入文本框法               步 ...
  • 呵呵,越到国庆反而越忙,好多天没更新了,工作第一天,贴出一篇新文.                                 金旭亮                            2009.10.9== ...
  • eclipse利用mybatis-generator生成代码
    由于mybatis是半自动的ORM框架,表到POJO的映射可以由mybatis-gener ...
  • 之前在缘创派上活跃过几天,不少朋友也咨询过我程序员如何参与创业的问题,给(tu)点(chao)建(ji)议(ju). 确认你的创业意愿 大部分人对创业是有误解的,一提到创业就想到在一个出租房不拿工资加班到死最后一夜成 ...
  • 1.在查询中格式化输出日期 Format(date(), "yyyy-mm-dd")2.计算两个日期的差值 DateDiff(interval, date1, date2[, firstdayof ...