证书类型与CA体系
说实话,我刚接触HTTPS时,最头疼的就是证书——什么自签名、Let's Encrypt、商业证书,到底该选哪个?有一次我在一个内部测试环境里图省事,直接用了自签名证书,结果上线前才发现所有客户端都得手动导入信任链……那叫一个折腾。今天咱们就把这三类证书掰开揉碎讲清楚。
CA体系的信任基础
要理解证书,先得搞明白CA体系。CA(证书颁发机构)就像数字世界的公证处。它给你签发一张证书,上面写着「这个域名确实属于你」。浏览器里预装了一批根证书,只要你的证书链能追溯到这些根,浏览器就信任你。
我遇到过不少新手,直接把自签名证书部署到生产环境,结果用户访问时弹红色警告——这跟没装证书有啥区别?信任链断了啊。
整个证书体系可以画成这样:
自签名证书
自签名证书,就是你拿自己的工具(比如OpenSSL)生成一个证书,签发者就是你自己。说白了,它没有经过任何正规CA的审核。
我记得有一次,团队要在内网部署一个内部管理系统,为了方便,我直接用了自签名证书。结果同事们的浏览器全部弹出警告,我不得不挨个教他们添加例外……所以我的建议是:自签名只适合你自己用的机器上,别指望别人能自动信任。
生成自签名证书很简单,一行命令搞定:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
但有个坑:自签名证书没有吊销列表。如果你私钥泄露了,没有任何办法通知浏览器「这个证书已失效」。我曾经在一个项目里踩过这个坑,那之后但凡涉及多人协作,我绝不推荐自签名。
Let's Encrypt
Let's Encrypt 是个公益组织,提供免费的HTTPS证书。它最大的特点是自动化和开放——用ACME协议自动验证域名所有权,然后签发证书。
我自己的个人博客就从Let's Encrypt拿证书,完全免费,加上cron定时续期,两年没出过问题。其实它的信任链跟商业证书一样完整,因为它的中间证书由知名的根CA(IdenTrust)交叉签名。
但注意一点:Let's Encrypt的证书有效期只有90天。很多人觉得短是缺点,我反而觉得这是个优点——强制你自动化续期,迫使用证书巡检机制。
典型的续期命令(用certbot):
certbot renew --quiet --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
把它加进cron,每两个月跑一次,基本能覆盖90天的有效期。
商业证书
商业证书,顾名思义,你掏钱给CA公司(比如Symantec、DigiCert、GlobalSign),他们验证你的企业身份后签发证书。这类证书最大的特点是信任度高:浏览器地址栏会直接显示组织名称(OV级)或直接绿色(EV级)。
我参与过的一个金融项目,接口对接要求必须用EV证书。为什么?因为EV证书的审核最严格——CA会打电话给公司注册人核实,甚至查工商信息。一旦用了EV,浏览器地址栏会显示公司名,用户一看就知道是经过认证的。
三种商业证书的对比:
| 等级 | 验证内容 | 地址栏显示 | 典型价格(年) |
|---|---|---|---|
| DV(域名验证) | 仅验证域名所有权 | 灰色小锁 | 免费~几百元 |
| OV(组织验证) | 验证域名+企业信息 | 小锁+公司名称 | 一千~三千元 |
| EV(扩展验证) | 最严格审核 | 绿色地址栏+公司名 | 三千元以上 |
这里多说一句:其实对普通用户来说,DV和OV证书在加密效果上完全一样。区别在于信任感——如果你的网站需要让用户放心输入密码、信用卡信息,至少上OV吧。
如何选型?
我把选择思路整理成一个简单判断流程:
- 纯本地开发 → 自签名证书,省时省事。
- 个人博客/小站点 → Let's Encrypt,免费且自动。
- 公司内部系统(员工使用) → 可以自签名,但我建议搭一套内部CA,或者直接用Let's Encrypt也OK。
- 对接第三方API → 必须用受信任CA签发的证书(Let's Encrypt或商业证书)。
- 金融、政务、支付 → 买EV证书,没得商量。
最后提醒一句:不管用哪种证书,定期检查有效期都是必修课。别等到用户反馈打不开才想起来证书过期了——那会儿你后台的告警大概已经响了八百回了。