什么是安全证书,访问者到底是怎么校验安全证书的,服务端返回安全证书后,客户端再向谁验证呢?

转自:https://www.cnblogs.com/changbaishan/p/7676615.html

最近在写https代理的程序,使用openssl实现ssl连接,有涉及到ssl证书。
https的作用有三:1加密传输 2认证 3数据完整性
ssl证书的主要是用来做认证和加密。大多数证书基于 X.509 v3 证书标准。
下面以一次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证书

你可能感兴趣的:(什么是安全证书,访问者到底是怎么校验安全证书的,服务端返回安全证书后,客户端再向谁验证呢?)