折腾SSL/TLS证书——流程和思维上的转变

CA颁发的证书就是要比自签发证书高贵吗?——我的疑问

这两天因工作上的事情,有几台服务器需要更新SSL/TLS证书,再加上自己的服务器还有一些用的是http,就正好一起弄了一下。然后我发现我的思路和别人的思路不太一样。

实操部分

工作单位上的服务器证书更新。没啥特别的操作,纯手工,朴实无华,甚至透露着呆板。从阿里云处获取到每年花费上千购买的证书,将它放到服务器下,然后nginx做一些配置就可以了。

没什么特别,除了贵、繁琐、服务器在内网下、各种代理杂乱无章之外,似乎也没有什么问题 :(

其实我自己以前的服务器也是这样搞的,下载证书,传到服务器,按照指引验证控制权,巴拉巴拉的。确实,没什么问题,除了我根本不关心这里面的流程以外。说人话就是,对我而言这些操作完全是在浪费我的时间精力。

然后阿里云提供的免费证书日期也变成三个月了,我经不起折腾了。遂转到Lets Encrypt

按照指引,用certbot装证书,那感觉,一个字,绝。我甚至都不知道为什么以前我要手动去搞这些玩意儿。
给大家伙看看这两种证书安装方式的对比嗷!

1
2
3
4
5
# ubuntu20,用的nginx
sudo snap install --classic certbot # 安装certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot # 确保certbot可用
sudo certbot --nginx # 获取并安装证书,会让你设置通知邮箱、对哪些站点进行配置
# sudo certbot certonly --nginx # 或者只是获取证书

两分钟不到,完事儿了,甚至到期前自动更新证书也给你配好,我铁幕都还没缓过神来,居然就已经结束了。

换做是以前,想想我需要怎么做嗷。

  1. 去阿里云申请证书并下载
  2. 把证书文件上传到服务器
  3. 配置nginx

虽然看起来也不麻烦,但是既然我不关心这背后是怎么部署的,我又何必要手动去搞呢?

其实在这之前我有很多次都接触过Let’s Encrypt,也进过certbot的页面看过工作流程。那个时候我坚信自己手动上传+部署的方式会更加可靠,所以就一直没有实践,直到今天。

这还真是印证了那句话啊,人不要盲目自信,还是得谦虚的学习。

事后总结

表面上只是我怕更新证书麻烦,从原来的手动转向了自动,实际上这里面我有一些不成熟的想法。

启用https的必要性

放在几年前,我认为对于我这种个人用户来讲,https是没啥必要的。我的应用传的数据都是明文,无非就是搭个博客,做个网盘,这些东西都是可以暴露在网络上的,因此我不会特别重视网站用的是http还是https。

但是时至今日,我也让我的应用改用https了。不可否认,从协议上来讲https的确要安全一点。但是我更多的考量是,用户在浏览我的页面时,看到“不安全”,那么它可能会感到疑惑。

有了SSL/TSL证书改用了https就安全了吗?

我认为完全不是。我依旧认为安全与否和是否https、和有没有CA颁发的证书毛关系都没有。

从协议层面来讲,我完全可以使用自签名证书,启用https。这样的话,流量传输的过程中,单纯协议上来讲,也是安全的(相较于http)。所以需要考虑的就是用自签名证书的网站,浏览器会报警告,甚至默认不显示。

那就说说CA颁发的证书吧。CA证书和我的自签名证书,一个是受信任的机构给的,一个是我自己给的。前者挂在网上,各大主流浏览器会报安全,后者会报不安全。但是我仔细想想,这两个文件本质上是没有区别的呀。都是用https,我访问的站点并不会因为证书不同而有额外的风险,获取的内容也不会因为证书不同而不同。

无非就是,自签名证书向用户说“信我,我真的是我”,而CA证书说“信我,CA机构可以证明我”。想起来竟然觉得有点可笑呢,也许这就是资本的力量。只有有钱(甚至不要钱),CA机构可以给任何站点发证书。用户相信这个很随意的CA机构,却不相信同样有着服务器完全控制权的我。

嗷对了,我在知乎上看“自签名SSL证书有什么风险”,全是商家在打广告,说什么易受攻击啊、不受信任啊之类的。直到我看到了一条回复:

事后

玩归玩,闹归闹。吐槽也吐槽够了,我自己这些肤浅的理解,大部分人根本不关心,也不在乎。我还是老老实实用的certbot吧!工作上的事儿,按照工作流程走就行。自己的理解,自己私下讨论就行。who care