单位文秘网 2021-10-05 08:28:42 点击: 次
摘要:CA认证技术和SLL加密通信被认为是抵抗网络攻击的最有效手段。为了保证服务嚣之间通信的安全,采用基于openssl的CA认证中。生成CA证书和SSL加密通信的的方法,建立了一种服务器间安全通信的模式,使用c’和java模拟实现了该方案,结果证明了该方案的安全可靠性。最后还指出该方案的优缺点和改进的方法。
关键词;CA证书;加密;数字签名;SSL通信
中图分类号:TN911.2-34TP309 文献标识码:A 文章编号:1004-373X(2012)03-0104-04
引言
网络的发达为数据的高速传输提供了便利,但是网络也是十分不安全的。隐匿在网络中的攻击者可能窃听、篡改网络中的数据,甚至伪装成他人发送信息。密码学的快速发展为抵抗网络攻击者提供了有效手段,并在已有基础如对称密钥加密、非对称密钥加密、数字签名、数字信封等之上,产生了CA认证、SSL等新技术。本文通过openssl建立了CA认证中心实现通信双方的身份认证,并通过SSL加密通信,确保了数据传输过程中不被窃听或篡改。
lCA认证原理
电子商务认证授权机构(Certificate Authority,CA),也称为电子商务认证中心,是负责发放和管理数字证书的权威机构,承担公钥体系中公钥的合法性检验的责任。CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA机构的数字签名使得攻击者不能伪造和篡改证书。用户如果因为信任证书而导致了损失,证书可以作为有效的证据用于追究CA的法律责任。正是因为CA愿意给出承担责任的承诺,所以也被称为可信第三方。
1.1证书发布过程
首先,CA会生成一对非对称密钥,然后利用这一对密钥生成一个CA证书,如图1所示。这个CA证书包含了生成的公开密钥、CA自身的信息和证书签发机构(即CA本身),并且使用私钥对该证书进行签名,因此该证书也成为CA的自签名证书。用户通过CA自签名证书中的公钥验证CA的签字,从而信任它所签发的证书。由此可见CA自签名证书的重要性,因此权威机构的CA自签名证书一般通过权威媒体或面对面USB硬盘等进行发放。
当用户向CA申请证书时,CA首先会向用户提供一对非对称密钥(或用户自身产生该密钥对),其中私钥由用户保管;然后将用户的公钥、用户信息和证书签发机构(即CA本身)的信息写入用户CA证书;最后CA利用自身的私钥对用户CA证书数字签名。图2是某一用户(或机构、单位)申请的用户CA证书。
1.2证书认证流程
这里假设有用户A,B。它们已向同一CA机构申请到证书。当用户B需要认证用户A的身份时,分以下三步进行:
(1)用户B会使用自身的私钥对自身的证书签名,并将原证书B.crt和签名后的证书B.crt发送给用户A。
(2)用户A首先判断证书中关于用户B的信息是否真实。他从CA机构的自签名证书中读取CA的公钥,并利用该公钥对B.crt中的CA Signature解密。如果解密得到的内容和证书中的信息一致,那么就可以认为此CA机构对用户B的身份做了确认和担保。用户B的身份是真实的。
(3)其次,用户A需要确认证书B.crt确实是用户B发过来的,而不是他人伪装的。他从B.crt中读取用户B的公钥,并用其对B.crt解密。如果得到的结果和B.crt一致。可以确认当前是与用户B在通信。
经过以上三步,用户A就可以确认用户B的身份。使用相同的方法,用户B可以确认用户A的身份。
1.3补充
通过前面的叙述,可以看出:CA中心在身份认证流程中对用户身份起到了一个认证和担保的作用。因此CA机构必须具有一定的权威性,其证书认证流程也十分复杂Ⅲ。此外,CA签发证书的内容十分丰富。一个标准的X.509数字安全证书包含以下一些内容:
(1)证书的版本信息;
(2)证书的序列号,每个证书都有一个惟一的证书序列号;
(3)证书所使用的签名算法;
(4)证书的发行机构名称,命名规则一般采用X.500格式;
(5)证书的有效期;
(6)证书所有人的名称,命名规则一般采用X.500格式;
(7)证书所有人的公开密钥;
(8)证书发行者对证书的签名。
2SSL加密通信
2.1SSL协议简介
安全套接层(Secure Sockets Layer,SSL)是为网络通信提供安全及数据完整性的一种安全协议,为Netscape所研发,利用数据加密技术,确保数据在网络传输过程中不会被截取及窃听。目前一般通用的规格为40b的安全标准,美国则已推出128b的更高安全标准,但限制出境。
SSL协议可分为两层:SSL记录协议,它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持;SSL握手协议,它建立在SSL记录协议之上,用于在实际的数据传输开始前,通信双方进行身份认证、协商加密算法、交换加密密钥等。早期的SSL协议只能完成客户端对服务器的身份认证从SSLv3开始,通过数字签名和数字证书提供了通信双方的身份认证。
2.2SSI握手协议流程
SSL协议既用到了公钥加密技术(非对称加密)又用到了对称加密技术,SSL对传输内容的加密采用的是对称加密,然后对对称加密的密钥使用公钥进行非对称加密。这样做的好处是,对称加密技术比公钥加密技术的速度快,可用来加密较大的传输内容,公钥加密技术相对较慢,提供了更好的身份认证技术,可用来加密对称加密过程使用的密钥。
在SSL的两层协议中,主要介绍SSL握手协议。如图3所示,SSL握手协议可以分为以下四个阶段:
(1)客户端向服务端发送Client Hello消息,服务端以Server Hello消息应答。这一交互流程主要完成一些参数的协商,如SSL协议版本号、加密算法、随机数等。
(2)服务端发送自身的证书(Certificate消息),公钥(ServerKey Exchange消息)。并发送Certificate消息要求验证客户端的证书(可选)。最后发送ServerHello Done消息表示这一流程结束。同时客户端会利用公钥对服务端的证书进行验证。
(3)如果收到Certificate Request消息,客户端会产生一个随机数,并利用自身的私钥对其加密,然后将这个随机数和自身的证书一同发送给服务端,用以身份验证。客户端还会产生一个后面通信用的预密钥,然后用服务端的公钥加密后发送给服务端。
(4)服务端利用自身的私钥解密得到的预密钥,并经过一系列处理得到真正SSL通信时所用的对称密钥。同时在客户端,也对预密钥进行相同的处理,得到相同的对称密钥。最后,服务端和客户端向对方发送消
息,确认SSL通信密钥,并结束握手流程。
2.3SSL协议主要作用
SSI协议提供的服务主要有下面三个:
(1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
(2)加密数据以防止数据中途被窃取;
(3)维护数据的完整性,确保数据在传输过程中不被改变。
3可靠通信方案
本文提出一种基于CA认证和SSL协议的加密通信方案。通过CA中心生成CA证书,提供对通信用户的身份认证,防止网络攻击者伪装成合法用户;在sock-et通信中加载SSL协议,对通信消息加密,防止数据被窃听或篡改。
3.1系统结构及通信流程
系统结构如图4所示,A和B是数据通信系统中的通信双方,可以是单个的服务器,也可以是集群。系统工作流程如下:
(1)CA服务器生成CA密钥及自签名证书ca.crt。
(2)服务器(或集群)A,B生成各自的密钥及证书。此时的证书,尚未被CA签名。
(3)A,B将证书发送给CA服务器签名。
(4)CA服务器将签名后的证书A.crt,b.crt以及CA的自签名证书ca.crt发布给A,B。
(5)A,B在socket通信中加载自己生成的私钥、CA的自签名证书和被CA签名后的证书,实现SSL加密通信。
3.2方案应用场景
这种方案适用于大多数数据传输系统的应用场景,如企业各部门的信息数据交换、监控系统中监测数据的上报存储。这一类应用场景的特点是:
(1)应用程序及传输数据类型已知;
(2)参与通信的服务器身份及数目已经确定;
(3)系统规模较小。
4基于openssl的实现
Openssl项目是一个开放源代码的基于密码学的安全开发包,它实现了安全套接层协议(SSL)和传输层安全协议(TLS),提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能,并附带丰富的应用程序供测试使用。
Openssl开发包可分为三个部分:SSL函数库、Crypto函数库和命令行工具。SSI函数库实现了安全套接层协议(SSL)和传输层安全协议(TLS);Crypto函数库实现了大多数标准的加密算法;openssl的命令行工具提供了一个从操作系统中直接使用以上两个函数库的途径。但是它的作用不止如此,openss L的命令行工具还以Crypto和SSL函数库为基础实现了生成和管理数字证书的能力。
本文以openssl为基础,模拟实现上文中所述的可靠通信方案。通信系统中的服务器运行的操作系统为Ubuntul0.10,软件环境有:boostl.44,opeNdk6。
4.1生成CA密钥及自签名证书
使用openssl可以十分简单地生成CA密钥及自签名证书,命令为:
生成密钥:openssl gesa-out ca.key 1024
生成自签名证书:openssl req-batch-new X509-keyca.key-out ca.crt-config openssl.conf
首先使用生成密钥ca.key,然后利用这个密钥生成自签名证书ca.crt。“-config openssl.conf"指明包含配置参数的文件。在openssl.conf中可以指定CA的信息、密码生成算法、证书有效期限等。
4.2
生成用户密钥及未签名证书
用户的密钥及未签名证书也是通过openssl的命令生成:
生成密钥:openssl gesa-out serverA.key 1024
生成未签名证书:openssl req-batch-new-keyserverA.key-out serverA.csr-config openssl.conf
server.key和serverA.csr是服务器A的密钥及未签名证书。服务器B的密钥及证书可使用相同的命令实现。
4.3CA签名
CA对证书签名的命令:
openssl ca-bateh-in serverA.csr-out serverA.crt-cert ca.crt-keyfile ca.key-config openssl.conf
生成的serverA.crt就是服务器A的签名证书。但是在执行这一步之前,需要根据openssl.conf的配置完成一些前期工作。openssl对于“openssl ca”命令的配置在文件的“[ca]”一段中。本次实验中这一段的主要配置如下:
[CA-defauh]
dir=demoCA
serial=$dir/serial
database=$dir/index.txt
new—certs-dir=$dir/newcerts
certificate=$dir/ca.crt
private-key=$dir/ca.key
default-days=l
这里dir指定了openssl的文件存储目录;serial保存着最新的证书序列号;database维护着已发布证书的信息;new_certs_dir是新生成的签名证书的存放位置;certificate和private_key指明了CA中心的自签名证书和私钥;defaull—days指明了新生成证书的有效期限。
根据上文的配置,必须先创建$dir目录,并在这个目录下创建newcerts目录和文件serial,index.txt。然后在serial文件中写入0x01,作为初始序列号。
4.4加载证书实现SSL通信
不同的编程语言加载证书的方式也不同。绝大多数场景中,数据的采集、处理使用C++实现,而数据的查询使用Java实现以提供一个友好的web界面。因此本文实现了上述两种语言的ssL通信。其中服务器A采用C++,而服务器B采用Java。
(1)对于C/C++而言,可以直接调用openssl开源包提供的API函数生成、制作、加载证书。在本文的实现中,借助了C++的Boost库实现socket通信和证书加载。Boost库提供了boost:asio:SSL:context类,借助它的三个函数加载证书:
load-verlfyjile:加载CA自签名证书ca.crt。
use-prIvate-key-file:加载服务器密钥serverA.key。
use-certificate-file:加载CA签名证书serverA.ert。
(2)Java语言的证书是keystore格式的。因此用openssl生成的证书必须转换成这种格式。本文通过调用一个Java的开源库Bouncycastle实现证书转化;也可以使用Java专门提供了一种证书生成、转化的工具keyt001来完成。
5结语
本文基于openssl设计了一个简单的CA认证及ssL通信结构,实现了用户的认证及可靠通信。但设计方案中还存在一些缺点,如服务器需要发送未签名证书到CA服务器,并接收CA返回的签名证书和CA中心的自签名证书,这一点很可能被网络攻击者利用加以破坏。改进的方法是对返回的证书采用压缩编码;限制签名证书的期限;要求服务器周期性地申请证书,使证书在被攻击者破解前就已失效。
参考文献
[1]TANENBAUM Andrew s.计算机网络[M].潘爱民,译.2版.北京:清华大学出版社,2004.
[2]谢希仁.计算机网络[M].4版.北京:电子工业出版社,2008.
[3]李亚辉.CA认证系统及其应用[J].现代电子技术,2006,29(23):121—123.
[4]张巍,李涛,刘晓洁,等.认证中心CA的功能及其实现技术[J].计算机工程与设计,2003,24(9):38-39.
[5]郭金生.CA数字证书安全平台构建与研究口].现代电子技术,2010,33(3):49-51.
[6]Internet-Draft Transport Layer Security Working Group.The SSL protocol version 3.O[M].[s.I.]:Internet-DraftTransport Layer Security Working Group,1996.
[7]王浩鸣.基于智能卡的医疗管理信息系统模型[J].现代电子技术,2002,25(11):101-104.
[8]崔捷,郑连清,顾志银.安全协议SSL与SET的分析与比较[J].现代电子技术,2004,27(9):106-108.
[9]陈晓果.Openssl的组件化封装研究与实现[D].成都:西南交通大学,2006.
[10]杨中岳,陈钊正,陈启美.无线环境的Openssl办公安全平台实现[J].计算机工程与设计,2010,31(1):22-25.
(责任编辑:单位文秘网) )地址:https://www.kgf8887.com/show-224-94098-1.html
版权声明:
本站由单位文秘网原创策划制作,欢迎订阅或转载,但请注明出处。违者必究。单位文秘网独家运营 版权所有 未经许可不得转载使用