网站大量收购独家精品文档,联系QQ:2885784924

用openssl结合ace做安全网络通信.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用openssl结合ace做安全网络通信

OpenSSL结合ACE 做安全网络通信 1 SSL X509证书工作原理参考 1.1 公钥密码系统 在公钥密码系统中,加密与解密使用不同的密钥。其中一个密钥为个人私有掌管,称之为私钥,另一个密钥是对外公开的,大家都可以获取到。公钥密码系统的一大特点:用公钥加密的报文只有私钥才能解密。同样,用私钥加密的报文只有公钥才能解密。 SSL证书由两部分组成:私钥、证书。证书中包含了公钥、证书的摘要、CA的签名以及其他扩展信息。其中CA的签名只有CA的公钥才能解开。 1.2 SSL证书的校验 证书的签名 由认证中心CA用私钥对各证书进行签名。认证中心CA是个自签名的X509证书。 证书的校验 当一个网络连接创建时,连接者双方互换证书。可以要求SSL对对方的证书进行校验。 图表 1 1 如图,当A连上B时,B可以要求对A的证书进行校验:B用认证中心CA的证书(公钥)对A的证书进行校验(看是否有CA的签名,每个不同的CA,签名都不一样),如果校验结果不成立,则断开网络连接。同样,A也可以要求对B的证书进行校验。这一步双方都可以确认对方身份。 1.3 SSL在通信过程中的加解密 因为公钥加解密运算量很大,对于比较大的数据用公钥系统加解密是不够现实的。事实上SSL在通信过程中,首先约定一种对称加解密方案,并设定密码,这些操作的通信采用的是公钥系统加解密;随后的通信则采用约定好的对称加解密,并在一段时间后,又重新约定过新的对称加解密方案。这样既保证了安全,又有足够的性能在现实环境下应用。 约定对称算法 A发给B的约定报文用B的公钥加密,这样,只有B用B的私钥才能解密,同样,B发给A的约定报文用A的公钥加密。 图表 1 2 正常的报文通信 A用约定的对称算法加密,B用约定的对称算法解密。同样B用约定的对称算法加密,A用约定的对称算法解密。 图表 1 3 2 用OpenSSL 制作X509证书 2.1 建立自己的CA 在openssl 安装目录的bin 目录下,运行脚本:./CA.sh -newca(Windows 环境下运行:perl ca.pl –newca),出现提示符时,直接回车。 运行完毕后会生成一个demonCA 的目录,里面包含了ca 证书及其私钥。 2.2 生成客户端和服务端证书申请 openssl req -newkey rsa:1024 -out req1.pem -keyout sslclientkey.pem openssl req -newkey rsa:1024 -out req2.pem -keyout sslserverkey.pem 2.3 签发客户端和服务端证书 openssl ca -in req1.pem -out sslclientcert.pem openssl ca -in req2.pem -out sslservercert.pem 2.4 运行ssl 服务端和客户端 openssl s_server -cert sslservercert.pem -key sslserverkey.pem -CAfile demoCA/cacert.pem -ssl3 -Verify 1 openssl s_client -ssl3 -CAfile demoCA/cacert.pem -cert sslclientcert.pem -key sslclientkey.pem -Verify 1 不出错的话,应该可以正常通信了。 3 用ACE_SSL做安全的网络通信 ACE_SSL的通信使用ACE_SSL_SOCK_Stream流。服务方接收器使用ACE_SSL_SOCK_Acceptor,客户端连接器使用ACE_SSL_SOCK_Connector。具体参考下面的代码: 服务端: #includeiostream #includestring #includeace/Acceptor.h #includeace/SOCK_Acceptor.h #includeace/SOCK_Stream.h #includeace/SSL/SSL_SOCK_Stream.h #includeace/SSL/SSL_SOCK_Acceptor.h using namespace std; int main(int argc, char* argv[]) { //SSL环境初始化 ACE_SSL_Context* ssl=ACE_SSL_Context::instance(); ssl-certificate(sslservercert.pem); ssl-load_trusted_ca(cacert.pem); ssl-context()-default_

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档