免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1173 | 回复: 2
打印 上一主题 下一主题

深入了解ApusicAS服务器配置系列之——SSL配置 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-12 21:09 |只看该作者 |倒序浏览
深入了解ApusicAS服务器配置系列之——SSL配置








近日,随着铁路客服中心网上购票系统中逐步可以购买大部分车次的列车,12306网站的种种问题便暴露出来,估计现在信息中心及系统开发商正在紧锣密鼓关注系统运行状态,并绞尽脑汁查找一切可以优化的地方进行优化,来满足数量惊人的火车票订票需求。先撇开性能问题不谈,使用过12306的朋友可能都注意到了,在使用12306进行网上购票之前,需要下载一个根证书到本地,然后,按照相关文件的说明,将证书导入IE浏览器,才能正常执行购票等操作。这个证书其实跟SSL/TLS有密切关系。本文介绍下在ApusicAS下如何配置SSL,使AAS支持基于SSL的双向认证。

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。为了在不安全的网络上安全保密的传输关键信息,Netscape公司开发了SSL协议,后来IETF(Internet Engineering Task Force)把它标准化了,并且取名为TLS,目前TLS的版本为1.0,TLS1.0的完整版本请参考rfc2246(www.ietf.org)。基于TLS协议的通信双方的应用数据是经过加密后传输的,应用数据的加密采用了对称密钥加密方式,通信双方通过TLS握手协议来获得对称密钥。为了不让攻击者偷听、篡改或者伪造消息,通信的双方需要互相认证,来确认对方确实是他所声称的主体。TLS握手协议通过互相发送证书来认证对方,一般来说只需要单向认证,即客户端能确认服务器便可。但是对于对安全性要求很高的应用往往需要双向认证,以获得更高的安全性。下面详细讲述建立自己的认证机构,并且利用它来颁发服务器证书和客户端个人证书,然后配置服务器来使用双向认证。关于SSL与TLS的更加详细的信息,请参考相关专业资料。


Apusic应用服务器完全支持SSL协议SSL3.0和TLS1.0协议。

在进行双向安全传输之前,首先,建立自己的认证授权机构CA,用户可以向可信的第三方认证机构(CA)申请证书,也可以自己做CA,由自己来颁发证书。(本文末尾将会介绍如何使用openSSL来生成CA证书的操作步骤)


其次,生成服务器端证书。服务器端证书用来向客户端证明服务器的身份,也就是说在SSL协议握手的时候,服务器发给客户端的证书。生成服务器证书使用JDK的密钥管理工具Keytool,本文采用的jdk是Oracle jdk1.5.0。


建立工作目录。
[plain] view plaincopyprint?cd ..   
mkdir server   
cd server  
cd ..
mkdir server
cd server

生成服务器私钥对及自签名证书,并且保存在密钥库mykeystore中。[plain] view plaincopyprint?keytool -genkey -alias myserver -keyalg RSA -keysize 1024 –keypass keypass -storepass keypass -dname "cn=localhost, ou=dev, o=apusic, l=Shenzhen, st=guangdong, c=CN" -keystore mykeystore  
keytool -genkey -alias myserver -keyalg RSA -keysize 1024 –keypass keypass -storepass keypass -dname "cn=localhost, ou=dev, o=apusic, l=Shenzhen, st=guangdong, c=CN" -keystore mykeystore
生成服务器待签名证书。[plain] view plaincopyprint?keytool -certreq -alias myserver -sigalg SHA1withRSA -file server.csr -keypass keypass -storepass keypass -keystore mykeystore  
keytool -certreq -alias myserver -sigalg SHA1withRSA -file server.csr -keypass keypass -storepass keypass -keystore mykeystore
请求CA签名服务器待签名证书,得到经CA签名的服务器证书。[plain] view plaincopyprint?openssl x509 -req -in server.csr -out server-cert.cer -CA ..\ca\ca-cert.cer -CAkey ..\ca\dsakey -days 365 -set_serial 02  
openssl x509 -req -in server.csr -out server-cert.cer -CA ..\ca\ca-cert.cer -CAkey ..\ca\dsakey -days 365 -set_serial 02
把CA根证书导入密钥库mykeystore。[plain] view plaincopyprint?keytool -import -alias caroot -file ..\ca\ca-cert.cer -noprompt -keypass keypass -storepass keypass -keystore mykeystore  
keytool -import -alias caroot -file ..\ca\ca-cert.cer -noprompt -keypass keypass -storepass keypass -keystore mykeystore
把经过CA签名的服务器证书导入密钥库mykeystore。[plain] view plaincopyprint?keytool -import -alias myserver -file server-cert.cer -noprompt -keypass keypass -storepass keypass -keystore mykeystore  
keytool -import -alias myserver -file server-cert.cer -noprompt -keypass keypass -storepass keypass -keystore mykeystore
接下来,颁发并发布个人证书。个人证书用来向服务器证明个人的身份,也就是说在SSL协议握手的时候,客户端发给服务器端的证书。同时个人证书中包含个人信息如用户名等,如果需要,这个用户名将作为登录服务器的用户名。

建立工作目录。[plain] view plaincopyprint?cd ..   
mkdir client   
cd client  
cd ..
mkdir client
cd client
生成客户端私钥。[plain] view plaincopyprint?openssl genrsa -out clientkey 1024  
openssl genrsa -out clientkey 1024
生成客户端待签名证书。[plain] view plaincopyprint?openssl req -new -out client.csr -key clientkey  
openssl req -new -out client.csr -key clientkey
请求CA签名客户端待签名证书,得到经CA签名的客户端证书。[plain] view plaincopyprint?openssl x509 -req -in client.csr -out client.cer -CA ..\ca\ca-cert.cer -CAkey ..\ca\dsakey -days 365 -set_serial 02  
openssl x509 -req -in client.csr -out client.cer -CA ..\ca\ca-cert.cer -CAkey ..\ca\dsakey -days 365 -set_serial 02
生成客户端的个人证书client.p12。[plain] view plaincopyprint?openssl pkcs12 -export -clcerts -in client.cer -inkey clientkey -out client.p12  
openssl pkcs12 -export -clcerts -in client.cer -inkey clientkey -out client.p12
CA根证书导入客户端。

在这里CA的根证书用来在SSL握手时验证服务器发给客户端浏览器的证书。如果没有此证书,浏览器将无法自动验证服务器证书,因此浏览器将弹出确认信息,让用户来确认是否信任服务器证书。在客户端的IE中使用"工具-> Internet选项-> 内容-> 证书-> 导入"把我们生成的CA根证书ca\ca-cert.cer导入,使其成为用户信任的CA。

客户端个人证书导入客户端: 在客户端的IE中使用"工具-> Internet选项-> 内容-> 证书-> 导入"把我们生成的CA根证书client.p12导入,使其成为用户信任的CA。


然后,配置服务器允许双向认证。

为了保证AAS的通用性,Apusic应用服务器出厂默认配置下不支持双向认证,要支持SSL双向认证,需要对配置作如下修改:

修改Muxer服务:如果采用密钥库文件的方式,示例配置如下:
  1. [html] view plaincopyprint?<SERVICE CLASS="com.apusic.net.Muxer" >   
  2. <ATTRIBUTE NAME="Port" VALUE="6888"/>   
  3. <ATTRIBUTE NAME="Backlog" VALUE="50"/>   
  4. <ATTRIBUTE NAME="Timeout" VALUE="300"/>   
  5. <ATTRIBUTE NAME="MaxWaitingClients" VALUE="500"/>   
  6. <ATTRIBUTE NAME="WaitingClientTimeout" VALUE="5"/>   
  7. <ATTRIBUTE NAME="SSLEnabled" VALUE="True"/>   
  8. <ATTRIBUTE NAME="SecurePort" VALUE="6889"/>   
  9. <ATTRIBUTE NAME="MutualAuthPort" VALUE="6887"/>   
  10. <ATTRIBUTE NAME="NeedClientAuth" VALUE="True"/>   
  11. <ATTRIBUTE NAME="KeyStore" VALUE="config/keystore"/>   
  12. <ATTRIBUTE NAME="KeyPassword" VALUE="keypass"/>   
  13. <ATTRIBUTE NAME="TrustStore" VALUE="config/truststore"/>   
  14. <ATTRIBUTE NAME="TrustStorePassword" VALUE="keypass"/>   
  15. <ATTRIBUTE NAME="TrustStoreType" VALUE="JKS"/>   
  16. </SERVICE>  
  17. <SERVICE CLASS="com.apusic.net.Muxer" >
  18. <ATTRIBUTE NAME="Port" VALUE="6888"/>
  19. <ATTRIBUTE NAME="Backlog" VALUE="50"/>
  20. <ATTRIBUTE NAME="Timeout" VALUE="300"/>
  21. <ATTRIBUTE NAME="MaxWaitingClients" VALUE="500"/>
  22. <ATTRIBUTE NAME="WaitingClientTimeout" VALUE="5"/>
  23. <ATTRIBUTE NAME="SSLEnabled" VALUE="True"/>
  24. <ATTRIBUTE NAME="SecurePort" VALUE="6889"/>
  25. <ATTRIBUTE NAME="MutualAuthPort" VALUE="6887"/>
  26. <ATTRIBUTE NAME="NeedClientAuth" VALUE="True"/>
  27. <ATTRIBUTE NAME="KeyStore" VALUE="config/keystore"/>
  28. <ATTRIBUTE NAME="KeyPassword" VALUE="keypass"/>
  29. <ATTRIBUTE NAME="TrustStore" VALUE="config/truststore"/>
  30. <ATTRIBUTE NAME="TrustStorePassword" VALUE="keypass"/>
  31. <ATTRIBUTE NAME="TrustStoreType" VALUE="JKS"/>
复制代码
</SERVICE>如果采用证书文件的方式,示例配置如下:
  1. [html] view plaincopyprint?<SERVICE CLASS="com.apusic.net.Muxer" >   
  2. <ATTRIBUTE NAME="Port" VALUE="6888"/>  
  3. <ATTRIBUTE NAME="Backlog" VALUE="50"/>   
  4. <ATTRIBUTE NAME="Timeout" VALUE="300"/>   
  5. <ATTRIBUTE NAME="MaxWaitingClients" VALUE="500"/>   
  6. <ATTRIBUTE NAME="WaitingClientTimeout" VALUE="5"/>   
  7. <ATTRIBUTE NAME="SSLEnabled" VALUE="True"/>   
  8. <ATTRIBUTE NAME="SecurePort" VALUE="6889"/>   
  9. <ATTRIBUTE NAME="MutualAuthPort" VALUE="6887"/>   
  10. <ATTRIBUTE NAME="NeedClientAuth" VALUE="True"/>   
  11. <ATTRIBUTE NAME="ServerCertificateKey" VALUE="config/192.168.6.191.key"/>   
  12. <ATTRIBUTE NAME="ServerCertificateChain" VALUE="config/192.168.6.191.cer;config/serverca.cer"/>   
  13. <ATTRIBUTE NAME="TrustCertificates" VALUE="config/clientrootca.cer"/>   
  14. </SERVICE>  
  15. <SERVICE CLASS="com.apusic.net.Muxer" >
  16. <ATTRIBUTE NAME="Port" VALUE="6888"/>
  17. <ATTRIBUTE NAME="Backlog" VALUE="50"/>
  18. <ATTRIBUTE NAME="Timeout" VALUE="300"/>
  19. <ATTRIBUTE NAME="MaxWaitingClients" VALUE="500"/>
  20. <ATTRIBUTE NAME="WaitingClientTimeout" VALUE="5"/>
  21. <ATTRIBUTE NAME="SSLEnabled" VALUE="True"/>
  22. <ATTRIBUTE NAME="SecurePort" VALUE="6889"/>
  23. <ATTRIBUTE NAME="MutualAuthPort" VALUE="6887"/>
  24. <ATTRIBUTE NAME="NeedClientAuth" VALUE="True"/>
  25. <ATTRIBUTE NAME="ServerCertificateKey" VALUE="config/192.168.6.191.key"/>
  26. <ATTRIBUTE NAME="ServerCertificateChain" VALUE="config/192.168.6.191.cer;config/serverca.cer"/>
  27. <ATTRIBUTE NAME="TrustCertificates" VALUE="config/clientrootca.cer"/>
复制代码
</SERVICE>最后,测试双向认证。
访问应用,如果前面的操作都正确的话,应该可以看到Apusic的欢迎页面。同时状态栏上的小锁处于闭合状态,且证书为有效状态,表示您已经成功地与服务器建立了要求客户端验证的SSL安全连接。


附:使用OpenSSL生成CA证书。

本文所使用的CA软件为Openssl。Openssl用来产生CA证书、证书签名并生成浏览器可导入的PKCS#12格式个人证书。你可以在Openssl的官方网站http://www.openssl.org下载最新版的Openssl,本文使用的是Openssl 0.9.7d。从Openssl的官方网站下载并安装了Openssl之后,设置系统环境变量Path指向Openssl的bin目录,下面开始创建CA根证书:

建立工作目录。[plain] view plaincopyprint?mkdir ca   
cd ca  
mkdir ca
cd ca
生成ca私钥。[plain] view plaincopyprint?openssl dsaparam -out dsaparam 1024 openssl gendsa -out dsakey dsaparam  
openssl dsaparam -out dsaparam 1024 openssl gendsa -out dsakey dsaparam
生成ca待签名证书。[plain] view plaincopyprint?openssl req -new -out ca-req.csr -key dsakey  
openssl req -new -out ca-req.csr -key dsakey
用CA私钥进行自签名,得到自签名的CA根证书。[plain] view plaincopyprint?openssl x509 -req -in ca-req.csr -out ca-cert.cer -signkey dsakey –days  

论坛徽章:
0
2 [报告]
发表于 2012-01-12 21:09 |只看该作者
谢谢分享

论坛徽章:
0
3 [报告]
发表于 2012-01-13 01:16 |只看该作者
看得好晕啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP