系统设计之HTTPS

系统设计之HTTPS

HTTPS

Screen Shot 2020-09-28 at 3.24.01 PM

  1. 所有的信息都是加密传输的,第三方无法窃听
  2. 配备身份验证,防止身份被冒充
  3. 具有校验机制,一旦被篡改,通信双方会立刻发现

https使用对称加密和非对称加密结合

  • 数据传输阶段使用对称加密,因为非对称加密解密速度慢
  • 对称加密的秘钥采用非对称加密传输

Screen Shot 2020-09-28 at 3.28.09 PM

Https 网页浏览过程:

Screen Shot 2020-09-28 at 3.30.18 PM

CA

Certificate Authority

  • 生成证书
  • CSR - certificate signing request
  • CA sign cert

Screen Shot 2020-09-28 at 3.32.29 PM

CA的作用是防止中间人攻击,思想是大家选用一个共同信任的机构来校验证书 - 校验发送证书的一方是不是他所声明的身份。

中间人劫持请求,假装目标服务器返回自己的证书给client,由于CA(主流CA会安装在brower)会校验证书。

如果中间人获取目标服务器的的证书,拦截请求? 因为从public key 无法推断出private key, 无法加密客户端传来的数据(后续对称加密使用的随机数),https无法建立连接。

self-signed cert

Screen Shot 2020-09-28 at 3.34.11 PM

let's encrypt

Let's Encrypt 是一个免费的CA, 它的 Root 证书 ISRG Root X1 于 7 月底获得了所有微软产品的信任,这意味着现在它的 Root 证书被所有主要 Root 程序的信任,包括微软、Google、Apple、Mozilla、Oracle 和 Blackberry。

let's encrypt 可以使用certbot 工具获取证书,并支持主流web 服务器的配置, 例如ngxin:

server {

listen 443 ssl default_server;

listen [::]:443 ssl default_server;


ssl_certificate /etc/nginx/ssl/netguru.crt;
ssl_certificate_key /etc/nginx/ssl/netguru.key;

}

let's encrypt 证书有效期为90天, certbot 可以通过renewa 命令来做renew。 可以通过建立crontab定时任务来自动renew。

UseCase: 个人网站(例如blog)使用let's encrypt 来实现https 。

mutualAuth

通常client端校验server端证书(身份), 例如一些网络内部service交互可能使用mutualAuth。