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 []:zhangchunying@oaking.com

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 []:zhangchunying@oaking.com

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安全解决方案(转)的更多相关文章

  1. python3.6 pip 出现locations that require TLS/SSL异常解决方案

    在给CentOS服务器安装完Python3.6后,使用pip命令出现问题,提示说无法找到ssl模块. 上网查询后发现在安装Python3.6时没有安装openssl-devel依赖库,解决方案如下: ...

  2. 【原】python3.7 无法pip安装提示ssl错误解决方案

    问题 pip is configured with locations that require TLS/SSL, however the ssl module in Python is not av ...

  3. CocoaPods安装/更新报错While executing gem ... (OpenSSL::SSL::SSLError)解决方案

    今天给新买的MacBook Pro更新CocoaPods,结果上来就报错,出师不利. HeinocdeMacBook-Pro:~ Heinoc$ sudo gem update --system Pa ...

  4. 最便捷的免费 SSL 证书解决方案(实测start SSL、Let's Encrypt、七牛免费SSL证书)

    谷歌从 2017 年起,Chrome 浏览器将也会把采用 HTTP 协议的网站标记为「不安全」网站:苹果从 2017 年 iOS App 将强制使用 HTTPS:在国内热火朝天的小程序也要求必须使用 ...

  5. does not support SSL connections

    语言:C# 开发工具:Visual Studio 2017 问题场景介绍: nuget引用的MySql.Data版本是6.10.5,MySQL的数据库连接串如下: Server=xxx;Databas ...

  6. SSL卸载技术对于HTTPS应用的优化与思考

    迅猛发展的互联网为我们提供了丰富的信息资源,在带来便利的同时也影响着人们工作和生活方式.而让我们无法忽视的是,在开放的互联网所带来的繁荣背后,同时也潜藏着安全方面的隐患.随着人们对网络的依赖愈渐加深, ...

  7. 锐安信sslTrus与GeoTrust SSL证书的对比

    当您想要为您的网站购买一款SSL证书时,是不是既想要价格便宜,又想要安全性能服务好的证书,最后又在品牌上犹豫不决?如何选择SSL证书?哪款SSL证书是最适合您的?本文将详细对比分析锐成信息平台上畅销品 ...

  8. suse11 sp2 搭建openvpn

    什么是VPN IP机制仿真出一个私有的广域网"是通过私有的隧道技术在公共数据网络上仿真一条点到点的专线技术.所谓虚拟,是指用户不再需要拥有实际的长途数据线路,而是使用Internet公众数据 ...

  9. QSslError 类

    QSslError Class Header: #include <QSslError> qmake: QT += network Since: Qt 4.3 注意:这个类中的所有函数都是 ...

随机推荐

  1. Poco之ftp目录切换与创建

    TEMPLATE = app QT += qml quick widgets#LIBS += -lPocoFoundation -lPocoXML -lPocoNetSOURCES += main.c ...

  2. C# 获取随机可用端口号

    TCP与UDP段结构中端口地址都是16比特,可以有在0---65535范围内的端口号.对于这65536个端口号有以下的使用规定: (1)端口号小于256的定义为常用端口,服务器一般都是通过常用端口号来 ...

  3. arm-linux-gcc编译器测试

    1.#include <>与#include ""的区别 #include <>只在标准库中搜索头文件,而#include ""首先在用 ...

  4. codeforces 278Div1 B题

    虚拟参赛的时候没想到是线段树,看到很多人都过了,也蛮着急的. 首先用二分+线段树的方法更新DP[i]:它表示以A[i]为结尾可以最前到哪个位置: 再用线段树计算ans[i]:它表示当前i个A元素可以最 ...

  5. C++引用作为函数的参数

    引用也可以作为一个函数的参数,如:我们定义交换两个数的函数swap,将函数的参数定义成引用的形式: void swap(int &p1, int &p2) //此处函数的形参都是引用 ...

  6. visual studio 2010 出现问题,不能设置断点调试了,一运行就未响应,然后程序退出

    经网络查找原因,怀疑是插件问题: 解决方案: 1.工具->扩展管理 2.禁用或卸载VS2010的插件(扩展程序)

  7. NOIP 2011 提高组 计算系数

    有二项式定理 `\left( a+b\right) ^{n}=\sum _{r=0}^{n}\left( \begin{matrix} n\\ r\end{matrix} \right) a^{n-r ...

  8. real-time application

    http://www.hanselman.com/blog/InstallingAndRunningNodejsApplicationsWithinIISOnWindowsAreYouMad.aspx ...

  9. 【UVAlive 3989】 Ladies' Choice (稳定婚姻问题)

    Ladies' Choice Teenagers from the local high school have asked you to help them with the organizatio ...

  10. apache整合tomcat部署集群

    近日,由于公司项目需要,所以学习了apache整合tomcat以及集群的一些知识. 所以做下笔记日后回顾可以用到. apache只有处理静态事物的能力, 而tomcat的强项就是处理动态的请求,所以a ...