教你全面图解 https 加解密原理( 四 )


HTTPS 证书的应用那么是谁在做 HTTPS 加密呢?服务端通常是 Nginx、Apache 这些反向代理服务器做的,而具体的业务服务器不需要处理,客户端通常是浏览器等做的加解密,Chrome 是使用 boringSSL 这个库,fork 自 openssl 。
我们通过 let’s encrypt 可以申请免费的 TLS 证书,每 3 个月需要手动续 。
证书分为 3 种:DV、OV、EV,DV 适用于个人,OV 和 EV 需要身份审核,EV 最高端 。
EV 证书会在浏览器的地址栏显示证书的企业名称:

教你全面图解 https 加解密原理

文章插图
 
但是新版的 Chrome 似乎把这个去掉了,所以我们打开 medium 的控制台可以看到一个提示:
As part of an experiment, Chrome temporarily shows only the lock icon in the address bar. Your SSL certificate with Extended Validation is still valid.
另外我们可以用 openssl 生成一个自签名证书,执行以下命令:
openssl req -x509 -nodes -sha256 -days 365 -newkey rsa:2048 -keyout test.com.key -out test.com.crt便会得到两个文件,test.com.crt 是证书,test.com.key 是证书的私钥,如下图所示:
教你全面图解 https 加解密原理

文章插图
 
然后把这两个文件给 Nginx 使用便能使用 HTTPS 访问,如下代码所示:
    server {        listen       443;        server_name  test.com;        ssl on;        ssl_certificate    test.com.crt;        ssl_certificate_key    test.com.key;     }可以把这个证书添加到系统证书里面,这样浏览器等便能信任,或者直接使用 mkcert 工具一步到位 。
客户端证书还有一种证书叫客户端证书,同样需要向 CA 机构申请一个客户端证书,和服务端 TLS 证书不一样的地方是,服务端证书通常是和域名绑定的,而客户端证书可以给本地的任意可执行文件进行签名 。
签名验证算法和上文讨论的 TLS 证书一致 。为什么可执行文件需要签名呢,因为如果不签名的话,系统会拦截安装或者运行,如 Mac 双击一个未签名的 dmg 包的提示:
教你全面图解 https 加解密原理

文章插图
 
直接不让你运行了,而 windows 也有类似的提示,Windows 是会给一个警告:
教你全面图解 https 加解密原理

文章插图
 
而当我们运行一个已签名的 exe 文件将会是正常的提示,如 Chrome 的提示:
教你全面图解 https 加解密原理

文章插图
 
综上本文主要讨论了对称加密和非对称加密的原理,并介绍了如何利用 RSA 对证书签名的检验以验证连接服务器的身份,怎么利用 ECC 进行数据加密和密钥交换,介绍了下怎么生成和使用 HTTPS 证书,并介绍了下客户端证书 。
相信看完本篇,会对 HTTPS 的加解密有一个较为全面的了解 。
作者:李银城
链接:
https://zhuanlan.zhihu.com/p/75461564

【教你全面图解 https 加解密原理】


推荐阅读