公钥、私钥、CA认证、SSL、Https的理解

公钥:在网上可以随意传播的密钥,被窃取了也没有关系;

私钥:自己保留的密钥,绝对不可以在网上随意传播;

一 .加密功能

公钥与私钥总是成对使用的,组成一个密钥对。它们之间有一个特性:由私钥计算公钥很简单(多项式级别复杂度),由公钥计算私钥很难(指数级别复杂度),其依赖的原理都是数学问题,如大数的质因数分解,椭圆曲线问题等。

为什么公钥加密的内容可以用私钥解密,其数学原理可以参考:https://blog.csdn.net/jianpan_zouni/article/details/89248547?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-89248547-blog-122881394.pc_relevant_antiscanv3&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-89248547-blog-122881394.pc_relevant_antiscanv3&utm_relevant_index=1

基于以上特性,信息传播的过程中就可以使用公钥加密私钥解密了,这样可以防止明文被别人获取:

对称加密:加密和解密用同一个密钥。A要发送信息给B,先将明文用密钥加密成密文,随后将密文和密钥一起发给B。B收到密文和密钥后,用密钥解密密文,得到明文。这个过程中,密钥和密文可能被C窃取,那么C也可以解密得到明文,所以信息传输不安全。

非对称加密:使用公钥加密,使用私钥解密。B首先生成一对公钥和私钥,给A一个公钥,A使用公钥对明文加密得到密文并发送给B,B使用私钥对密文解密得到明文。这样,即使C截取了公钥和密文,但是他没有私钥,还是无法破解密文,因此非对称加密算法更为安全。常见的非对称加密算法有RSA、DSA、ECC、DH。

 

二. 签名功能

注意到,使用上述非对称加密算法时,虽然C无法获取破解得到明文,但是C想,既然我得不到你也别想得到,于是,C拿着B的公钥去加密另一段信息,得到密文2,替换A原来发给B的密文1。B无法分辨给我信息的人是A还是C,于是B拿到密文2后,还以为是A给的。B用私钥解密密文2,发现不是自己相要的信息,C的目的达成。因此,B必须验证信息的来源者是A而不是其他人,从而防止信息被篡改,这就涉及到数字签名问题了。

所谓签名,正好与加密相反,是使用(CA机构的)私钥加密,(CA机构的)公钥解密,用于让所有公钥所有者验证私钥所有者的身份并且用来防止私钥所有者发布的内容被篡改.但是不用来保证内容不被他人获得。

签名功能的提供者是第三方CA,CA验证A的身份后,为其颁发CA证书。下次A和B之间通信的时候,A会先给B发送CA证书,B会问CA,A发给我的CA证书是否有效。如果是有效的,我才相信你是A,这样才能继续通信。具体的CA证书颁发验证流程如下:

1.服务方 S 生产一对公钥和私钥,私钥自己留着。向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;
2.CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;
3.如信息审核通过,CA 会向申请者签发认证文件-证书。证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用CA 的私钥对信息摘要进行加密,密文即签名;
4.客户端 C 向服务器 S 发出请求时,S 返回证书文件;
5.客户端 C 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法;
6.客户端然后验证证书相关的域名信息、有效时间等信息;
7.客户端会内置信任 CA 的证书信息(包含公钥),如果CA不被信任,则找不到对应 CA 的证书,证书也会被判定非法。

分析:

a. 第5步对比的是信息摘要,不是信息明文。哈希散列函数具有雪崩的特性,只要信息明文被修改哪怕一点点,立刻会造成哈希散列值剧烈变化。如果客户端C用CA公钥计算出的证书明文信息散列值,与服务器S提供的数字签名一致,则说明服务器给的签名确实是CA颁发的,签名里面的信息都是真的。因为服务器S自己没有CA私钥,如果服务器S偷偷修改了发给服务端C的证书的明文信息,他没法用CA私钥重新生成一个正确的签名,只能给一个假的数字签名,那么会被服务器端C发现。

b. 客户端使用的CA公钥存储在本地。CA的公钥必须要安全地转交给客户端(CA根证书必须先安装在客户端),因此,CA的公钥一般来说由浏览器开发商内置在浏览器或操作系统的内部。于是,该前提条件在各种信任机制上,基本保证成立。

 

三. https

通过以上分析可知,加密可以防止信息明文被获取,签名可以防止信息被他人篡改。有了加密和签名两个功能,就可以做到信息的安全传输了。

如果A想给B发一个安全的保密的数据,那么应该AB应各自有一个私钥,A先用B的公钥加密这段数据,再用A自己的私钥加密这段加密后的数据.最后再发给B。B拿到密文之后,用A的公钥确认这段信息确实是A发出的,然后用自己的私钥解密,这样确保了内容即不会被读取,也不会被篡改。实际通信时,与此原理类似,https以下为https具体的工作流程:

HTTPS在传输的过程中会涉及到三个密钥:

服务器端的公钥和私钥,用来进行非对称加密
客户端生成的随机密钥,用来进行对称加密
一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步。
1.客户端向服务器发起HTTPS请求,连接到服务器的443端口;

2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人;

3.服务器将自己的公钥、证书发送给客户端;

4.客户端收到服务器端的证书之后,会对证书进行检查,验证其合法性,如果发现发现证书有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。

5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。

6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。

7.然后服务器将加密后的密文发送给客户端。

8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

参考:https://blog.csdn.net/weixin_44179269/article/details/115671884

 

四. CA证书与SSL证书的区别

CA(Certification Authority)是一个机构,颁发多种证书,由CA颁发的证书都可以称为CA证书。SSL证书是CA证书的一种,因为配置在服务器上,也称为服务器证书。CA机构除了可以颁发SSL证书之外,还可以颁发其他数字证书,比如:代码签名证书和电子邮件证书等等。

https协议实际上使用了SSL协议作为应用层协议的一个子层,用于实现身份认证和信息加密。

 

posted @ 2022-06-14 11:35  8号prince  阅读(2590)  评论(0编辑  收藏  举报