下面以一次ssl连接进行说明。
比如客户端要认证服务器,服务器怎么证明自己是真实的服务器,而不是钓鱼网站呢?这需要服务器有个证书。证书包含以下信息:
    使用者的公钥值。
    使用者标识信息(如名称和电子邮件地址)。
    证书的有效时间。
    颁发者CA标识信息。
    颁发者CA的数字签名。
你可以在IE中Internet选项》内容》证书 中看看证书长什么样。

有效的证书需要由权威机构CA签名,CA会用自己的私钥来生成数字签名。这个权威机构CA客户端是可以完全信任的,客户端浏览器会安装CA的根证书,由CA签名的证书是被CA所信任的,这就构成了信任链,所以客户端可以信任该服务器的证书。 
客户端与服务器建立ssl连接时,服务器将自身的证书传输给客户端,客户端在验证证书的时候,先看CA的根证书是否在自己的信任根证书列表中。再用CA的根证书提供的公钥来验证服务器证书中的数字签名,如果公钥可以解开签名,证明该证书确实被CA所信任。再看证书是否过期,访问的网站域名与证书绑定的域名是否一致。这些都通过,说明证书可以信任。

接下来使用服务器证书里面的公钥进行服务器身份的验证。 客户端生成一个随机数给到服务器。 服务器对随机数进行签名(加密),并回传给到客户端。 客户端用服务器证书的公钥对随机数的签名进行验证若验证通过,则说明对应的服务器确实拥有对应服务器证书的私钥,因此判断服务器的身份正常。否则,则任务服务器身份被伪造。这些都没问题才说明服务器是可信的。

接下来客户端会生成会话密钥,使用服务器公钥加密。服务器用自己的私钥解密后,用会话密钥加密数据进行传输。ssl连接就建立了。


PKI(Public Key Infrastructure,公共密钥基础设施)是通过使用公钥密码技术和数字证书来确保系统信息安全并负责验证数字证书持有者身份的一种体系 

PKI基本服务:
用户提交个人信息和公钥,申请证书;
核准用户信息,签发用户公钥证书;
查询给定的证书的状态(过期、撤销、挂起、正常等);
PKI系统基本组件:
RA:注册机构,接受来自用户的证书请求,验证用户信息
CA:认证机构,使用自己的私钥签发用户公钥证书
CRL发布者:证书撤销列表,被撤销的证书的列表
CRL是一种离线证书状态列表,如果有条件可以使用OCSP组件,在线查询证书状态
资料库:存储已经签发过的证书及用户信息的服务器
订户:证书的持有实体
依赖方:依赖PKI提供服务的实体

PKI构成示意图

 

订户公钥证书由CA签发,CA即“权威机构”
CA使用自己的私钥对证书签名,以证明订户身份与公钥的绑定
依赖方使用CA的公钥验证证书上的CA签名,即可确认绑定关系
问题1:我又怎么知道CA的公钥是不是真的是这个CA的?
解决方案:找另一个“权威机构”,签发CA的证书,以证明CA公钥与CA身份的绑定关系
问题2:那么“另一个权威机构”的公钥又由谁证明? 
另另一个“权威机构”
总有一个最顶层的权威机构,是你不得不无条件信任的
无条件信任的CA,叫做信任锚,即信任的起点
由于信任“信任锚”,进而信任所有由它签发的其它CA证书


参考 https://www.trustasia.com/ssl-work-principle


SSL握手

        证书主要作用是在SSL握手中,我们来看一下SSL的握手过程

        1. 客户端提交https请求

        2. 服务器响应客户,并把证书公钥发给客户端

        3. 客户端验证证书公钥的有效性

        4. 有效后,会生成一个会话密钥

        5. 用证书公钥加密这个会话密钥后,发送给服务器

        6. 服务器收到公钥加密的会话密钥后,用私钥解密,回去会话密钥

        7. 客户端与服务器双方利用这个会话密钥加密要传输的数据进行通信

    见下图:   

image.png

SSL证书作用

        https 起到了以下几个作用

        1. 帮助客户端对服务器身份进行验证

        2. 让需要传输的数据加密化

        3. 验证传输的数据是否完整