数字证书工作原理

目录


参考了很多文章,一些图片,直接拷贝别人的。

SSL证书和HTTPS的关系

HTTPS在HTTP的基础上加入了SSL加密协议,HTTP是明文传输,HTTPS是加密传输。

如何得到一张证书
数字证书的创建流程:
https://help.aliyun.com/document_detail/211100.html
可以通过阿里云SSL证书服务购买SSL证书,并向CA中心提交证书申请,直到证书成功签发;您将已签发的证书安装到Web服务器后,则Web服务将会通过HTTPS加密协议来传输数据。
HTTPS加密传输协议可激活客户端浏览器到网站服务器之间的SSL加密通道(SSL协议),从而实现高强度双向加密传输,防止传输数据被泄露或篡改。

安全作用
数字签名的作用是防中间人伪造、篡改;
SSL数字证书的作用是证明发件人是谁,保证收到的公钥是官方发给我的,不是被中间人篡改过的。


SSL数字证书为什么会安全?

用SSL与不用SSL证书的区别:
数字证书工作原理

  • 防中间人劫持,获取明文数据;
  • 浏览器能验证服务器身份,区分官网或钓鱼网站;
  • 防中间人篡改,必要时,服务器还可以验证访客身份(可选 );

SSL证书怎么做到上面3个功能的?
请看数字证书签发、验签流程


数字证书签发、验签流程

前提一定要理解数字签名的流程.

数字证书就是给公钥做的数字签名,为什么需要给公钥做数字签名?
格式
X.509是RFC5280定义的一种公钥证书格式(public key certificate)。
X.509证书也被称为数字Digital Certificate。
一张X.509包含一个Public Key和一个身份信息。X.509证书要么是自签发,要么是被CA签发。
数字证书工作原理
把版本、发行方、过期时间、域名、公钥、证书签名等信息 合成在一个文件内,就叫数字证书。
里面的信息,根据标准格式存入,也可以根据标准格式取出。

自签发就是系统根证书
根证书,在系统安装初始化时,就会从CA机构导入进来。
数字证书工作原理
CA签发,就是你申请证书的时,把你的信息块提交给CA,CA用他的RSA密钥给你信息块加密,
得到一个:Certificate Signature , CA的证书也会在你电脑里保存着,
这样你通过他的公钥就能解密Certificate Signature 得到H2(哈希值),
可以做对比,来判断是否篡改过。

简化版的签发、验收流程
数字证书工作原理
CA 签发证书的过程,如上图左边部分:

  • 首先 CA 会把持有者的公钥、用途、颁发者、有效时间等信息打成一个包,然后对这些信息进行 Hash 计算,得到一个 Hash 值;
  • 然后 CA 会使用自己的私钥将该 Hash 值加密,生成 Certificate Signature,也就是 CA 对证书做了签名;
  • 最后将 Certificate Signature 添加在文件证书上,形成数字证书;
    客户端校验服务端的数字证书的过程,如上图右边部分:
  • 首先客户端会使用同样的 Hash 算法获取该证书的 Hash 值 H1;
  • 通常浏览器和操作系统中集成了 CA 的公钥信息,浏览器收到证书后可以使用 CA 的公钥解密 Certificate Signature 内容,得到一个 Hash 值 H2 ;
  • 最后比较 H1 和 H2,如果值相同,则为可信赖的证书,否则则认为证书不可信。

证书链
但事实上,证书的验证过程中还存在一个证书信任链的问题,因为我们向 CA 申请的证书一般不是根证书签发的,而是由中间证书签发的,比如百度的证书,从下图你可以看到,证书的层级有三级:
数字证书工作原理

我自己画了一下简图:
数字证书工作原理

H2由上一级给你生成,在你提交信息给CA的时候,CA用他的私钥和你信息摘要生成H2.


reference

数字签名、数字证书与HTTPS是什么关系?
https://www.zhihu.com/question/52493697

一文彻底搞懂加密、数字签名和数字证书!
https://segmentfault.com/a/1190000024523772

浏览器如何验证HTTPS证书的合法性?
https://www.zhihu.com/question/37370216

手工验证一张数字证书的有效性
https://blog.yuantops.com/tech/validate_a_digital_certificate_step_by_step/
浏览器验证SSL数字证书的步骤
https://blog.yuantops.com/tech/how_do_web_broswer_validate_ssl_certificates/

上一篇:PKI及SSL协议分析


下一篇:java程序使用ssl证书连接mysql