是时候来了解下 HTTPS 网站的部署了

本文介绍了 HTTPS 网站的部署,包括 HTTPS 反劫持的原理、自签名 SSL 证书的获取,以及 Let's Encrypt 证书的申请和使用过程。通过手动部署,读者能理解 SSL 证书在网络安全中的重要性,同时掌握如何为个人网站启用 HTTPS。
摘要由CSDN通过智能技术生成

2018 年的最后一个月,我终于决定给自己 3 年前申请的域名搞个 SSL 证书,让网站可以上车 HTTPS。免费、适合个人网站(玩票)的 SSL 证书方案,首选 Let's Encrypt。但是与一开始「一小时搞定」的预期不同,最终完成整件事情花了我一个周末的时间,还是有必要记录下来。

背景

当然 HTTPS 是大势所趋,但因为懒自己并没有真正地搞过 SSL 证书、部署 HTTPS 网站。终于痛下决心部署 HTTPS 是源于自己想要在自己申请的腾讯云 VPS 主机上部署一套 jenkins 站点,而因为我域名没有在国内备案,导致使用域名访问时被腾讯云限制不可访问。 从个人开发者手动部署一个可运行网站的方案说起:

  1. 事先准备
    • 一个可通过公网 IP 访问的云主机作为服务器,以我个人云主机 IP 为例:118.24.121.85
    • 在域名商所购买的域名,以我个人域名为例:myan.im
  2. 通过 ssh 登录到服务器,手动安装并启动 Nginx 服务
  3. 在域名商网站上添加一条 A 类型的 DNS 记录,将域名 c.myan.im 指向以上 IP 地址
    • 配置成功后,通过 ping 命令即可检查 DNS 生效

完成第 2 步后,我们就已经可以通过 IP 和端口(默认 80)直接访问网站,验证也通过。

curl http://118.24.121.85
复制代码

完成第 3 步后,本来期望的表现是访问 http://c.myan.im 也有同样的表现,但很不幸:

通过 curl 检查也可发现,http 请求返回的是 302 头,Location 头为 dnspod.qcloud.com/static/bloc…

> curl http://c.myan.im -v

< HTTP/1.1 302
< Location: https://dnspod.qcloud.com/static/block.html?d=c.myan.im
复制代码

总算见识到了网站不备案的后果!可见我们把个人网站域名解析到国内主机,没有问题。但如果网站没有备案,对不起门都不让你进?。

至于技术上如何实现,其实这就是典型的 HTTP 劫持问题,站在腾讯云的角度思考:

  1. HTTP 请求发起,路由到 Web Server 的服务器 IP,要经过腾讯云的网络
  2. 请求链路到达腾讯云主机前,腾讯云可以 获取 HTTP 请求详情
  3. 腾讯云读取报文 Host,检查是否备案;如未备案,则直接返回 302 重定向状态,请求未触发服务器相应的 IP:PORT
  4. 浏览器收到 302 并跳转到 Location 指定地址

问题出现在第 3 步,因为 HTTP 是明文传输协议,意味着不光腾讯云,甚至客户端到服务端网络链路上的任何一个环节,都可以读取 HTTP 报文内容。

HTTP 劫持案例

  1. 运营商劫持网页,插入流量包广告
  2. Charles 代理修改请求,修改返回值
  3. 路由器修改 User-Agent 头,导致 bug

HTTPS 反劫持

原理

从基本原理上讲,HTTPS 可以说是 HTTP 与 SSL/TLS 协议的结合。在进行应用层的报文传输前,要通过 TLS 协议建立加密会话。

当然这个图的握手原理并不是本文的重点,我们关注的是所谓证书在 SSL 连接中的作用。在 Let's Encrypt 的工具 certbot 文档页,他们这样解释什么是证书:

A public key or digital certificate (formerly called an SSL certificate) uses a public key and a private key to enable secure communication between a client program (web browser, email client, etc.) and a server over an encrypted SSL (secure socket layer) or TLS (transport layer security) connection. The certificate is used both to encrypt the initial stage of communication (secure key exchange) and to identify the server. The certificate includes information about the key, information about the server identity, and the digital signat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值