目录
一、CA证书颁发机构是什么?
二、数字证书可以干什么?
三、PKI:即公钥加密体系(public key cryptography)
四、CA在网络中的工作流程及原理(以网站为例)
五、HTTPS 的工作原理
六、CA私有证书服务器搭建案例
一、CA证书颁发机构是什么?
CA是什么?CA是Certificate Authority的简写,从字面意思翻译过来是凭证管理中心,认证授权。它有点类似我们生活中的身份证颁发机构,这里的CA就相当于生活中颁发身份证的机构。不同于生活中的颁发机构,这里的CA是给服务器颁发证书。颁发证书的目的同生活中的办理身份证的目的类似,都是为了证明一件事,生活中的身份证可以证明我们是一个合法的公民,而服务器颁发证书的目的也是证明我们服务是一个合法的服务器,换句话说就是有了证书我们就可以清楚知道我们访问的服务器到底是不是我们真正想访问的服务器。从而识别我们访问的服务器的真假。
二、数字证书可以干什么?
证书的作用就是为了验证其服务器的真实合法性,以及传输服务端的公钥的作用。而服务器的公钥就是用来客户端向服务端发送随机密码,用来加密随机密码的作用,从而实现,只有服务端可以拿到这个随机密码的作用,实现安全加密通信。
三、PKI:即公钥加密体系(public key cryptography)
公钥:用户的公钥可以公开给其它的网络用户。
私钥:只有用户自己才能访问,是用户自己私有的,不能被网络中其它的用户获取。
非对称加密
1、公钥加密私钥解密
Tom想将一个档案发给mike,在发送之前为了对发送的档案进行加密,mike会首先生成一对公私钥并将公钥发给Tom。之后Tom就通过此公钥对档案进行加密并发送给Mike。mike收到档案后根据私钥来对收到的档案进行解密。即使公钥在发送的过程中被窃听者截获,由于此加密的数据只能通过私钥才能进行解密,然而私钥只有mike拥有且不公开,所以窃听者就算截获了档案也是一堆被加密过的乱码。
2、公钥验证
Tom在向Mike发送合同之前会对合同的内容进行hash计算来生成用于验证数据内容的一串数字这串数字就被称为数字指纹,然后在通过私钥对生成的数字指纹进行加密运算生成的一串密文被叫做数字签名。之后Tom就会把合同内容与其计算出的数字签名一起发送给mike。mike收到报文后同样首先对合同的内容进行相同算法的hash运算来生成一串数字指纹,然后在用公钥对数据签名进行解密得到最初由发起者生成的另一个数字指纹,通过把mike计算生成的数字指纹和发起者传输过来的数字指纹进行比较,如果一样说明数据在传输的过程中没有被篡改,如果和发起者生成的数字指纹不一样说明mike收到的合同被篡改了。
对称加密
使用相同的密钥(如私钥)和算法对数据进行加解密。
四、CA在网络中的工作流程及原理(以网站为例)
1、申请证书
假如Server服务器预想在网络上发布一个支持https安全访问的网站,并向网络中的访问者证明自己的网站是真实存在的网站。则网站的开发人员就需要向CA证书颁发机构去申请获取数字证书。在此过程中Server服务器会事先生成一对公私钥,并向CA授权机构递交一份证书申请书,其包含有网站管理者的一些信息和网站服务器的公钥。
2、CA证书颁发机构审核信息
CA证书颁发机构在CA服务器上收到Server网站服务器发送过来的证书申请书后会去核实其申请者递交的信息是否真实可信,经过实际考察确认真实存在且合法后就会在申请者递交的信息上添加其CA机构的一些信息组成一个明文信息,然后CA就会对明文进行哈希运算后,在通过CA的私钥对其进行加密生成数字签名(原理同公钥验证)即带有CA数字签名的明文信息一起构成了数字证书。然后CA再将数字证书颁发给Server服务器。
五、HTTPS 的工作原理
1、客户端发起HTTPS请求
用户在浏览器里输入一个 https 网址,然后连接到 server 的 443 端口。
2、服务端的配置
采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。
这套证书其实就是一对公钥和私钥,如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。
3、传送证书
服务器在收到用户访问请求后会将自己从CA 那
4、客户端解析证书
客户端收到网站的数字证书后,会首先判断其数字证书的真假、是否有效被吊销。客户端根据网站数字证书上标注的证书颁发机构,去使用计算机信任的此根CA证书(即CA机构的公钥)去对网站发送过来的证书通过公钥验证的方式进行数字签名的解密比较,如果能够解开说明这个证书是某个CA证书授权机构认证过的、是可信的网站,然后客户端在将包含有此网站公钥的证书保存到本地。否则用户网页就会提示此网站不安全,不可信。
5、传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
6、服务端解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
7、传输加密后的信息
这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。
8、客户端解密信息
客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。
六、CA私有证书服务器搭建案例
实验环境:
1.Server-CA证书服务器 | 192.168.200.254 |
2.Client-Web网站客户端 | 192.168.200.28 |
搭建一台CA服务器
1、安装openssl软件
2、查看openssl的配置文件以及其配置策略
说明:可看到openssl默认配置里面指定了证书存放相关文件的路径,和CA默认匹配策略,其中国家名称、省州名称、组织名称是必须同CA设置的信息一致,当然这些匹配是否和CA设置的一样,是通过配置文件来判断的可自行设置。通用名称是必须要填写的,其他都是可选。
3、由于红帽8.0没有默认生成CA证书根目录结构,所以需根据openssl配置文件自行创建目录结构。
4、为CA服务器生成私钥
genrsa 生成私钥
-out 指定生成私钥的文件存储位置
-des 对生成的私钥加密所使用的加密算法
2049 密钥长度
() 代表在子bash中运行,目的是为了不改变当前Shell中的umask值
5、CA服务器为自身生成自签证书
req 请求生成证书
-new 新请求
-x509 生成此格式的自签证书,用给自己颁发根CA
-key 指定生成证书所使用的私钥文件路径
-out 指定生成的证书文件保存位置
-days 指定生成证书的有效期
6、查看颁发的CA证书内容
x509 查看X509类型的证书
-in 输入要查看的证书文件
-nount 不输出显示证书编号信息
-text 以文本的方式输出显示证书的详细内容
说明:CA根证书生成以后,网络中的客户端就可以通过把CA根证书保存到本地根证书存储区域来信任由此CA颁发给网络中其它网站或程序的数字证书了。这样当用户访问由根CA机构颁发给网络中https的网站时,用户就可以根据本计算机中保存的根CA机构证书中的公钥(此公钥是CA服务器的公钥)来验证其访问的网站所展示的证书(包含web站点的公钥)是否真是被CA机构认证过,如果客户端用CA的公钥(证书)能够解密出web证书中的数字签名(此签名是CA在给web颁发证书时用CA的私钥签的名),就证明此网站是被CA机构认证过的,是可信的。然后客户端在根据从CA下载下来的证书吊销列表文件,去验证此网站的证书是否已被吊销失效,如果此网站的证书序列号在证书吊销列表内,则表名此网站的证书已被吊销,此网站有问题。如果网站证书验证没有错误,客户端就通过web证书中的公钥来加密传输接下来彼此发送数据用来进行加密的随机密钥,给web服务器,服务器收到用自己的公钥加密的数据包后,根据自己的私钥解密出随机密钥。之后服务器和用户的浏览器就通过此随机密钥来加密彼此之间传输的数据。
客户机申请证书
1、客户机生成私钥
2、生成证书请求模板文件,并将其发给CA服务器。
3、切换到CA服务器创建CA服务器颁发证书所需文件
4、签署客户端的证书申请请求
说明:在跟客户端颁发证书的时候需要依赖两个文件/etc/pki/CA/index.txt和/etc/pki/CA/serial,前者文件主要存放已经颁发的证书信息,后者存放下一个将要颁发的证书的序列号。这里说一下/etc/pki/CA下的各个文件和目录的作用吧,certs目录存放颁发证书的目录,crl存放吊销证书列表文件的目录,index.txt.attr存放证书subject信息是否唯一的配置信息,index.txt.old存放上一次颁发证书的信息,newcerts目录存放已经颁发的证书,并且以序列号命名的证书,每颁发一次证书,在我们指定的路径下生成指定名称的证书后,newcerts目录下会自动生成一个以序列号为名称的证书,这个证书同我们指定路径下存放的证书信息一模一样。private目录存放私钥文件。serial.old存放上一次颁发证书的序列号。
5、把签发的数字证书文件发送给客户端申请者,之后客户端就可以在支持https的网站上使用此证书进行安全加密连接了。
客户端申请吊销证书
1、客户端查看数字证书内的serial序列号和subject信息将其发送给CA服务器申请吊销此证书。由于是模拟环境我们可以直接在CA服务上查看客户要吊销的证书信息。
2、CA服务器收到客户提交的serial和subject信息后将此信息与证书信息数据库文件index.txt中的信息进行比较,确认一致无误后,就可以吊销之前颁发给web客户的证书了 。
3、吊销证书
-revole 吊销证书
4、查看被吊销的证书
5、在生成证书吊销列表crl.pem(在windows中格式为*.crl)文件之前,如果是首次吊销证书,需创建/etc/pki/CA/crlnumber的文件,用于指定接下来要吊销的证书序列号。
6、生成并更新证书吊销列表文件
-gencrl 生成证书吊销列表文件
5、通过查看证书吊销列表文件内容判断CA是否已经吊销了web客户的证书。
在window上查看CA颁发给web客户端的证书(*.crt)和证书吊销列表文件(*.crl)。
@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!