向更安全的「HTTPS」迁移

1 HTTP 和 HTTPS

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。(引用自:百度百科)

HTTP协议是一个被用于在浏览器和服务器之间传输信息的应用层协议,HTTP 协议以明文的方式发送信息,不对数据进行加密。 这就会带来安全隐患,如果信息在传输过程中被拦截,那么就可以直接得到发送的信息,所以很多敏感数据不适合用这种协议传输,比如一些卡号、密码等。

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版。即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。(引用自:百度百科)

「安全」就是HTTPS协议的最大特性之一,它解决了 HTTP 协议的不安全问题。除此之外,还可以确保网站的「真实性」,它是如何做到的呢?

简单来说,就是把先前的明文传输换成密文传输,具体可以看这篇文章「HTTPS 为什么安全」

2 Let’s Encrypt

要想的网站上启用 HTTPS,就需要从证书颁发机构(CA)获取证书(一种文件)。而 Let's Encrypt 是由非营利性互联网安全研究组(ISRG)提供的免费,自动化和开放的证书颁发机构。

3 实战

使用 certbot 添加 https 证书,它是基于 letsencrypt 的一个工具。

3.1 安装 Certbot

1
apt install certbot

3.2 生成 key

1
2
3
4
5
6
7
8
9
# 单个域名
centbot certonly --standalone -d www.example.com

# 两个域名
centbot certonly --standalone -d www.example.com -d test.example.com

# 泛域名
certbot certonly -d "*.example.com" -d example.com \
--manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory

3.3 可能碰到的问题

  • 问题 1:

    domain names was not valid, has an _ (underscore) in the name or equested domain domain is not a FQDN.

    解决方案:二级域名中不能包含下划线_,请修改二级域名。

  • 问题 2:

    Problem binding to port 443: Could not bind to IPv4 or IPv6.

    解决方案:先关闭 Nginx,再生成 key。

3.4 自动续期

certbot 的有效期只有90天,需要一个定时任务来检查和自动续期。

1
systemctl start certbot.timer

4 参考

作者

Ailln

发布于

2018-09-13

更新于

2024-03-02

许可协议

评论