This page looks best with JavaScript enabled

通过 Let’s Encrypt 自己申请了个 CA 证书

 ·  ☕ 2 min read  ·  ✍️ 鱼子盖饭 · 👀... views

HTTPS

为什么要用 https,因为 http 的请求是明文的,发送给服务器和服务器返回的数据,如果被人劫持,那账号密码等内容一览无遗,甚至被篡改,Chrome 浏览器也会将所有 http 请求标记为不安全连接

而 https 则使用公钥对请求加密,发往被 CA 证书认证过的域名所指向的服务器,再通过服务器上的证书私钥解密

简单而言,https 保证了数据安全到达域名所在的服务器

为什么要自己配置证书

之前一直有免费证书的,先是用的在阿里云上申请的,这个不支持二级域名;后来了解到 Cloudflare,不仅能用上 CDN,还有支持通配符的免费证书可以用~

由于我想配置一些自用的服务,了解了下 Cloudflare 的运行机制,在 “full” 类别的加密设置下,由于域名的解析交给了 Cloudflare,因此数据的传输实际是将用户的 https 请求发送给 Cloudflare,Cloudflare 解密之后,再用源主机的公钥加密,将请求发送给源主机。因此请求携带的认证信息在 Cloudflare 的代理服务器上是可见的。大厂自然没有兴趣窥探这些个人的东西,但这个环节也曾出过问题,由于失误将用户完整的 https 请求暴露在了 Google 的搜索结果中。。。

用 Let’s Encrypt 官网教程未果

最初我是准备把服务部署在家里电脑上,证书也要在本地,根据 Certbot 的教程折腾,由于是内网,又把 Certbot 监听的 80 端口映射到公网服务器上,让服务器将认证请求发到内网主机上。可能是 frp 转发请求的时候修改了一些 request header?总之一直没有认证成功。。。

通过 DNS 认证的方式申请

直到看到了 这篇文章

下载认证程序:

1
git clone https://github.com/letsencrypt/letsencrypt

认证:

1
2
3
4
5
6
7
cd letsencrypt

# 给域名申请证书
./certbot-auto certonly  -d example.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

# 给所有二级域名申请证书
./certbot-auto certonly  -d *.example.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

一级域名和二级域名的证书需要分开申请

  • certonly 表示安装模式,Certbot 有安装模式和验证模式两种类型的插件
  • --manual 表示手动安装插件,Certbot 有很多插件,不同的插件都可以申请证书,用户可以根据需要自行选择
  • -d 为哪些主机申请证书
  • --preferred-challenges dns 使用 DNS 方式校验域名所有权
  • --server Let’s Encrypt ACME v2 版本使用的服务器不同于 v1 版本,需要显示指定

期间的选项同意即可,然后会出现一个很长的验证码,需要在 DNS 解析中给 _acme-challenge.example.com 配置一条值为该验证码的 TXT 记录,配置好之后稍等几分钟再回来点继续,证书就生成到主机上了~

证书有效期三个月,可以使用 crontab 自动续期:

1
2
crontab -e
0 */12 * * * certbot renew --quiet --renew-hook "/etc/init.d/nginx reload"

我最后还是放弃了内网主机的使用,但这个配置方法对内网主机很友好(其实在公网服务器上按官网流程申请了复制下来也是可以的啊。。。)


鱼子盖饭
WRITTEN BY
鱼子盖饭
Get into trouble, make mistakes.


What's on this Page