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 % 的经济发生在互联网上(查看下面资源的统计信息). 我们现在所处的时代要求一直在线和互联互通,这意味着用户对性能有更高的期望.如果网站响应不及 ...
一周排行
  • 我们时时在踩坑,有时也忍不住埋怨前人给我们留下了无数的坑,可回头想想,自己是不是也在挖坑等别人踩... 上次听 赵海平 的讲座,他提到 Facebook 没有测试人员,以前和现在都没有,以后也不打算有.还提到上线之后 ...
  • 把这句前的分号去掉,变成cgi.fix_pathinfo=0
  • 今天看了看<Linux 防火墙>这本书的前两章,的确是经典之作.  我就推荐学习Linux朋友,都来看看这本书,此书详细介绍Linux系统构建防火墙的方法,以及入侵检测和系统安全的技术,特别是防火墙的基础 ...
  • 三层交换机工作原理三层的涵义三层交换机中的“三层”指的是OSI(开放系统互连)七层参考模型的下面三层.如果您想理解三层交换,首先就需要理解OSI参考模型. 1.什么是OSI参考模型 OSI参考模型是国际标准化组织为了 ...
  • 何谓交易日志        数据库日志是记录对数据库详细操作的文件,包含在线日志和归档日志,但是归跟到底,数据库是为了保证交易完整性而放弃了简单的文件操作,必须通过相关文件的集合来完成一组不能划分的交易处理,同时可以 ...
  • 互联网+救不了家装业的病
    这些天,北京的王先生心情不是太好,他每天都要接到6~7个陌生电话,而这些号码又无一例外地全 ...
  • ubuntu如何更改crontab的默认编辑器之前新装的ubuntu13.04,今天写了一个脚本,准备写入任务计划,当我crontab -e 的时候居然提示:no crontab for root - using a ...
  •  do while 语句是用于未知循环次数的时候.他们最大的不同是:进入while循环前,while会先测试判断条件的真假,再决定是否执行循环体,那么do while呢,是先循环再判断,无论如何都是先循环一次,再判断 ...
  • 现象:重启citrix服务器后,打开发布的相关程序,提示:ERROR: An error has occurred while connecting to the requested resource 查看系统日志: ...
  •        如果当前用户通过验证,就可以通过SL上传附件了,因为用户上传的附件要进行实时统计,以即时更新已上传附件的总和大小,来防止用户上传过量的附件),所以我在打开文件对话框事件中加入了到已上传附件大小的统计以便 ...