基于PKI的网络安全站点通信设计与实现
2022-05-30朱建彬
朱建彬
摘要:PKI体系结构作为当下广泛采用的安全解决方案,主要用于互联网的安全认证。该文介绍如何在centos8系统环境下,通过在校園内网架设CA和WEB两台服务器,有效地实现基于PKI的网络安全站点通信,并利用CA数字证书实现网站HTTPS的设计与实现,并在Windows客户端上访问WEB服务测试成功。
关键词:PKI;网络安全;HTTPS
中图分类号:TP393 文献标识码:A
文章编号:1009-3044(2022)16-0043-03
为解决互联网的安全问题,世界各国经过多年的研究,初步形成了一套完整的Internet安全解决方案,即目前被广泛采用的PKI(Public Key Infrastructure)体系结构,PKI体系结构采用证书管理公钥,通过第三方的可信机构CA,把用户的公钥和用户的其他标识信息(如名称、e-mail、身份证号等)捆绑在一起,在Internet网上验证用户的身份,PKI体系结构把公钥密码和对称密码结合起来,在Internet网上实现密钥的自动管理,保证网上数据的机密性、完整性。
PKI,即Public Key Infrastructure,名为公钥基础设施。PKI是一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。PKI主要由以下几部分组成:证书颁发机构CA,负责颁发证书。证书注册机构RA,可以接受用户的证书注册申请。证书吊销列表CRL,用于存放作废的证书。证书存取库,用于存放证书,供用户获取[1]。
PKI体系中,包含凭证签发请求文件 (Certificate Signing Request - CSR)是一种包含凭证签发时所需的公钥、组织信息、个人信息(域名)等信息的(.csr)文件,不含私钥信息。证书颁发机构 (certification authority - CA)是指互联网上信任的证书颁发机构,CA通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等,确认申请用户的身份之后再签发证书[2]。同时CA会在线提供其所签发证书的最新吊销信息,这样信赖方就可以验证证书是否仍然有效。证书(certificate)包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构CA的信息、有效时间、证书序列号等信息的明文,同时包含一个签名(使用散列函数计算公开的明文信息的信息摘要,然后采用CA的私钥对信息摘要进行加密,此密文即签名)[3]。证书=公钥+申请者与颁发者信息+签名。
PKI所能提供的三大功能:加密、签名、认证。PKI中最基本的元素是数字证书,安全操作主要通过证书来实现。PKI中最重要的设备是CA,负责颁发并管理证书。PKI的核心技术是非对称式加密技术。PKI安全策略建立和定义了一个组织信息安全方面的指导方针,同时也定义了密码系统使用的处理方法和原则。它包括一个组织怎样处理密钥和有价值的信息,根据风险的级别定义安全控制的级别。一般情况下,在PKI中有两种类型的策略:一是证书策略,用于管理证书的使用,比如,可以确认某一CA是在Internet上的公有CA,还是某一企业内部的私有CA;另外一个就是CPS(Certificate Practice Statement)。一些由商业证书发放机构(CCA)或者可信的第三方操作的PKI系统需要CPS。这是一个包含如何在实践中增强和支持安全策略的一些操作过程的详细文档[4]。它包括CA是如何建立和运作的,证书是如何发行、接收和废除的,密钥是如何产生、注册的,以及密钥是如何存储的,用户是如何得到它等。证书机构CA是PKI的信任基础,它管理公钥的整个生命周期,其作用包括:发放证书、规定证书的有效期和通过发布证书废除列表(CRL)确保必要时可以废除证书[5]。
注册机构RA提供用户和CA之间的一个接口,它获取并认证用户的身份,向CA提出证书请求。它主要完成收集用户信息和确认用户身份的功能。这里指的用户,是指将要向认证中心(即CA)申请数字证书的客户,可以是个人,也可以是集团或团体、某政府机构等。注册管理一般由一个独立的注册机构(即RA)来承担。它接受用户的注册申请,审查用户的申请资格,并决定是否同意CA给其签发数字证书。注册机构并不给用户签发证书,而只是对用户进行资格审查[6]。因此,RA可以设置在直接面对客户的业务部门,如银行的营业部、机构认识部门等。当然,对于一个规模较小的PKI应用系统来说,可把注册管理的职能由认证中心CA来完成,而不设立独立运行的RA。但这并不是取消了PKI的注册功能,而只是将其作为CA的一项功能而已。PKI国际标准推荐由一个独立的RA来完成注册管理的任务,可以增强应用系统的安全。证书发布系统负责证书的发放,如可以通过用户自己,或是通过目录服务。目录服务器可以是一个组织中现存的,也可以是PKI方案中提供的。在互联网中,PKI的应用非常广泛,包括在Web服务器和浏览器之间的通讯、电子邮件、电子数据交换(EDI)、在Internet上的信用卡交易和虚拟私有网(VPN)等。
为了保证网站传输数据的安全性,网络传输通常启用HTTPS加密访问策略,将HTTP协议与TSL协议(SSL3.1版本,即安全套接字协议)结合在一起,形成了HTTP的安全传输,TSL协议的思路是采用公钥加密方式,客户端先向服务器申请公钥,然后用公钥加密信息,服务器在收到密文以后,再用自己的私钥解密[7]。这样可以保证所有的信息都是通过加密传输,无法被窃取。在实际生活中,通过在校园内网架设CA和Web两台服务器,可以有效地实现基于PKI的网络安全站点通信。网络服务需要两台Linux(centos8)分别作为CA证书服务(192.168.80.132)和Web服务(192.168.80.134),Windows作为客户端用于测试,如图1所示。
1 CA证书服务器的部署
校园网内利用一台Centos8作为服务器,用于生成私有CA证书颁发机构,这里主要利用OpenSSL开源软件,需要用到一个私钥文件和一个证书文件,证书文件是由本CA证书颁发机构所签发的。在OpenSSL的配置文件中,“dir = /etc/pki/CA”指定了CA的默认工作目录;“certs = $dir/certs”指定了已经颁发证书的存放目录;“database = $dir/index.txt”指定用于存放已颁发证书索引的文件index.txt;“serial = $dir/serial”指定了用于标识证书序列号的文件serial;“private_key = $dir/private/cakey.pem”指定CA私钥的存放路径。
首先,对自己的私有CA机构进行认证,签发自证书。在自签名 CA 中,证书中的公钥和用于验证证书的密钥是相同的。自签名证书本身作为根证书。需要完成三个步骤:首先,生成私钥文件。用于签发证书时,为证书进行数字签名。其次,生成自签名证书。最后,为CA提供所需要的目录及文件。具体过程如下:
openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048#利用rsa非对称算法生成一个私钥文件Cakey,如图2所示。
openssl req -new -x509 –key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem # 利用私钥基于X509标准生成自签名证书cacert,其中需要输入相关信息,包括国家、省份、城市、组织机构、网站域名、管理员邮箱,如图3所示。
为CA提供必需的目录和文件,创建索引文件touch /etc/pki/CA/index.txt;创建序列号文件,序列号(serial number),是每个CA用来唯一标识其所签发的证书,可以指定初始序列号:echo 01 > /etc/pki/CA/serial。至此,便完成了校园网内部私有CA的架设。
2 Web服务器的部署
在校园网内部Web服务器上,我们使用当前流行的Apache软件作为Web服务器应用端。首先安装Apache软件:yuminstall –y httpd ; 接着,为Web服务器向CA服务器申请证书,其方法和CA自签发证书相类似,首先生成私钥文件,然后利用私钥文件,向CA服务器生成证书申请,要求其为自己签发证书。生成私钥,如图4所示。
mkdir /etc/httpd/ssl #创建证书的存放目录
openssl genrsa -out /etc/httpd/ssl/httpd.key 2048 #采用RSA2048位生成http.key私钥。
生成证书请求:
openssl req -new-key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365#利用私鑰文件,生成证书请求,有效期为365天,其中国家、省、城市、公司名称必须和CA默认一致。如有不一致的情况,需要修改对应策略,主机名部分必须是客户端在访问Web服务器时在浏览器中所输入的网址。
将证书请求文件httpd.csr发送到CA服务器的/tmp目录下:
scp /etc/httpd/ssl/httpd.csr root@192.168.80.132:/tmp/
3 CA上为Web签发证书
在CA服务器上,为Web服务器签发证书,使用以下命令:
openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365,其中-in选项,指定证书请求文件的路径;-out选项,指定生成的证书文件httpd.crt的路径;-days选项,指定有效期为365天。注意:证书文件必须存放在指定的/etc/pki/CA/certs目录中,如图5所示。
在签发成功后,再次利用scp将签发的证书传给Web服务器。
scp /etc/pki/CA/certs/httpd.crt root@192.168.80.134: /etc/httpd/ssl/httpd.crt
4 在Web服务器上安装证书
为了使用证书服务,我们需要为Apache服务器添加安全SSL模块,使用yum命令安装:yum install –y mod_ssl,然后修改SSL的配置文件/etc/httpd/conf.d/ssl.conf,在配置文件中添加以下几个设置项:DocumentRoot "/var/www/html"#指定服务器主目录;ServerName *:443#开启HTTPS安全的443端口;SSLCertificateFile /etc/httpd/ssl/httpd.crt#指定签发证书文件的保存位置;SSLCertificateKeyFile /etc/httpd/ssl/httpd.key#指定Web服务器自己的私钥文件保存位置。
5 在Windows客户端上访问Web服务测试
在Windows 10 客户端上,通过使用安全的HTTPS协议访问https://192.168.80.134服务器(如需用域名访问,还需另外架设DNS服务),结果如图6所示,利用HTTPS协议访问了测试网站,显示网页页面。
6 结束语
在PKI安全体系下,Web服务器启用了SSL功能之后,在浏览器与服务器之间传输数据之前必须要先建立安全通信信道,安全信道的建立过程:1)客户端向服务器发出连接请求,服务器把它的数字证书发给客户端,客户端会验证颁发证书的CA是否可信任;2)客户端生成会话密钥(对称式加密),并用从服务器得到的公钥对它进行加密,然后通过网络传送给服务器;3)服务器使用私钥解密得到会话密钥,这样客户端和服务器端就建立了安全通道[8]。
PKI应用范围非常广,不仅局限于本文涉及的网络安全通信,还包括完整的安全策略和安全应用。因此,PKI的开发也从传统的身份认证到各种与应用相关的安全场合,在校园网上信息发布、办公自动化、网上办公、信息资源共享等,PKI可以解决身份认证、数据完整性、数据保密性和不可抵赖性等问题。
参考文献:
[1] 乔明秋,赵振洲.数据加密与PKI技术混合式教学设计——以数字证书实现网站HTTPS访问为例[J].信息与电脑(理论版),2021,33(16):210-212.
[2] 李艳.基于PKI技术的安全接入平台中接入认证的研究[J].科技传播,2020,12(22):131-133.
[3] 董志刚.基于PKI实现网络通信安全性的研究[J].电子技术与软件工程,2021(20):241-242.
[4] 邓伟伟.基于PKI实现网络通信安全性的研究[J].中国新通信,2019,21(6):19.
[5] 祁凌.基于PKI技术下的电子商务信息安全研究[J].网络安全技术与应用,2020(12):127-129.
[6] 李艳.基于PKI技术的安全接入平台中接入认证的研究[J].科技传播,2020,12(22):131-133.
[7] 王晨,马旭.基于公钥基础设施的数字认证体系虚拟仿真实验设计[J].曲阜师范大学学报(自然科学版),2019,45(4):49-53.
[8] 郭建伟,燕娜,陈佳宇.基于安全证书的PKI解决方案[J].天津科技,2019,46(1):55-58.
【通联编辑:朱宝贵】