Nginx下实现永久免费的HTTPS(基于Let's Encrypt)

给自己的站点添加ssl/tls加密,会为你的用户带来更好的搜索体验和安全性,把恶意运营商插入的牛皮癣广告拒之门外,还你一个原汁原味的网站体验!

Let’s Encrypt 是一个非常优秀的认证机构(CA)。它可以提供免费证书,并且已经被大多数浏览器所信任,绝大多数的现行https免费证书都来自于它,另外,通过工具 Certbot 可以让我们完全自动化证书的安装和更新,真正地实现永久免费的HTTPS。

准备工作

  • 搭载系统为CentOS的VPS,并已安装Nginx
  • 要配置https的域名
  • 可远程ssh连接和管理vps的shell

(本文所有操作默认在最高级账户root权限下进行,域名的80端口已配置Nginx并可访问。)

Let’s Encrypt证书

根据 Let’s Encrypt 的推荐,我们用自动证书工具 Certbot ,它可以自动执行证书颁发和安装,而不会停机。适合于在多种系统下运行,并可以自动生成配置,甚至提供个性化的专家模式定制配置。

安装Certbot

启用EPEL

Certbot是EPEL下的包,所以使用certbot前必须确保EPEL源已被启用。在CentOS下,EPEL是默认启用的。

检查是否已启用EPEL源,可运行指令yum repolist查看当前系统仓库信息:

[root@nooldey ~]# yum repolist
Loaded plugins: fastestmirror
Determining fastest mirrors
* base: mirror.fileplanet.com
* elrepo: mirror.rackspace.com
* epel: mirror.beyondhosting.net
* extras: mirror.fileplanet.com
* updates: mirror.fileplanet.com
repo id repo name status
base/7/x86_64 CentOS-7 - Base 9,591
elrepo ELRepo.org Community Enterprise Linux Repository 225
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 12,461
extras/7/x86_64 CentOS-7 - Extras 448
nginx/7/x86_64 nginx repo 90
nodesource/x86_64 Node.js Packages for Enterprise Linux 7 - x86_64 80
updates/7/x86_64 CentOS-7 - Updates 2,416
repolist: 25,311

我们可以在系统返回的信息中,第5行和第11行看到已经添加了EPEL镜像源和已安装EPEL源的信息。

如果没有返回EPEL可以手动运行:yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm来安装EPEL。

安装certbot

  • 安装Certbot:yum install certbot-nginx
  • 获得证书,并让Certbot自动编辑您的Nginx配置:certbot --nginx,如果不想让certbot自动编辑Nginx配置,自行手动编辑配置,可以运行certbot --nginx certonly来仅仅获取证书。
  • 根据系统提示自行选择要配置的域名、自动添加Nginx配置、全局配置https等。

自动更新证书

因为 Let’s Encrypt 颁发的免费证书的有效期为90天,所以我们需要在证书过期前进行证书续订。

首先,我们要测试Certbot的证书自动续订是否可用:certbot renew --dry-run,运行后出现一下字眼说明证书自动续订功能是可用的:Congratulations, all renewals succeeded. The following certs have been renewed:

然后,我们可以通过定时器或系统计时器来实现证书的定时更新,从而确保我们的证书是可用的。

# 开启定时任务
[root@nooldey ~]$ /sbin/service crond start
# 编辑定时任务内容
[root@nooldey ~]$ crontab -e
# 定时任务内容填写为:
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew
# 重载定时任务
[root@nooldey ~]$ /sbin/service crond reload

至此,我们已经完成了Let’s Encrypt免费SSL安全证书的申请,并通过系统定时任务运行证书更新,保证了证书的长期有效!

恭喜你,获得了一份永久免费的ssl证书!

参考资料

启用EPEL源

NOOLDEY

本文作者:NOOLDEY

做一个诗情画意的码农,皮皮猪,我们走!

原文链接: http://zhuweisheng.com.cn/hexo/letsencrypt/

本站文章如无特殊声明均为原创,创作不易,转载请注明来源,谢谢!