当前位置:首页 > 综合

https证书免费申请教程

去年帮朋友迁移博客,书免发现他的费申站点还是HTTP,浏览器地址栏直接标着“不安全”。请教他问我买哪家SSL证书,书免我说别急,费申有免费的请教,而且不比某些付费的书免差。十分钟后他拿着Let's Encrypt签发的费申证书跑起来了。这事没那么复杂,请教下面把整个流程拆开说。书免

Let's Encrypt 是费申目前最靠谱的免费选择

免费SSL证书不是没有,是请教很多人不知道去哪找。Let's Encrypt由非营利组织ISRG运营,书免2015年上线,费申背后有Mozilla、请教Cisco、Chrome等支持。它签发的DV(域名验证)证书有效期90天,浏览器全兼容。缺点就一个:三个月得续一次。但这事可以自动化,后面会讲。

除了Let's Encrypt,ZeroSSL和Buypass也提供免费证书,但Let's Encrypt的客户端工具Certbot生态最成熟,遇到问题搜得到答案。选它。

准备工作:你需要什么

一台能跑命令行的服务器,一个已经解析到该服务器的域名。域名解析没生效的话,验证会失败,这个坑很多人踩过。确认方式很简单,在本地终端ping yourdomain.com,看返回的IP是不是你服务器IP。

服务器上需要有root权限或sudo权限。Web服务器软件Nginx或Apache都行,Certbot对两者支持都很好。我用Nginx演示,Apache的操作几乎一样。

安装Certbot并签发证书

以Ubuntu 22.04为例。先装snapd,再用snap安装Certbot,这是官方推荐的安装方式,比apt源里的版本新:

sudo apt update sudo apt install snapd sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot 

装完之后,一条命令就能搞定证书签发和Nginx配置:

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com 

Certbot会自动完成几件事:向Let's Encrypt申请证书、验证域名所有权、把证书文件写到/etc/letsencrypt/live/目录、修改Nginx配置文件加入443端口监听和证书路径。过程中它会问你邮箱(用于到期提醒)和是否同意服务条款,填一下就完事。

如果你只想拿证书不想让它动Nginx配置,加certonly参数:

sudo certbot certonly --nginx -d yourdomain.com 

证书文件在/etc/letsencrypt/live/yourdomain.com/下面,fullchain.pem是证书链,privkey.pem是私钥。手动配置Nginx时指向这两个文件就行。

自动续期:设好就不用管了

Certbot安装时会自动创建一个systemd定时任务,每天跑两次检查证书是否需要续期。你可以手动测试一下:

sudo certbot renew --dry-run 

看到“Congratulations”就说明续期流程没问题。证书到期前30天会自动续,续完之后需要重载Nginx才能生效。Certbot的systemd timer已经包含了重载钩子,但如果你是手动安装的Certbot,建议加一个deploy hook:

sudo certbot renew --deploy-hook "systemctl reload nginx" 

几个容易翻车的点

80端口必须开着。Let's Encrypt的HTTP-01验证方式需要通过80端口访问你服务器上的验证文件。防火墙拦了80端口,签发一定失败。用云服务器的,安全组里也要放行。

CDN场景下证书签发会复杂一些。如果你的域名走了Cloudflare代理,要么先关掉代理再签,要么用DNS-01验证方式。Certbot支持DNS插件,但配置因DNS服务商而异,Cloudflare有对应的插件可以用。

证书签发频率有限制。Let's Encrypt对同一域名每周最多签发5次,测试的时候别反复签,用--dry-run或者staging环境测试。

我自己跑了三年Let's Encrypt证书的站点,没出过浏览器不信任的问题。唯一的麻烦是有次服务器迁移忘了同步/etc/letsencrypt/目录,新机器上续期失败,排查了半小时。迁移时记得把这个目录一起带走。

分享到: