最近网站的SSL证书就要过期了,之前使用的是阿里云提供的免费DV证书,免费期过后则需要付费购买SSL
证书。对于非盈利的个人博客网站来说,这是一笔不小的开支,最低价格的SSL证书也要将近一千五百元一
年,所以决定改用免费的SSL证书。我们都知道要使网站支持HTTPS访问,我们就需要从证书授权机构(以下
简称CA) 处获取一个证书。Let’s Encrypt就是一个CA。我们可以从Let’s Encrypt获得网站域名的免费
的证书。本篇我们就来主要讲一下如何通过Let’s Encrypt + Apache来让网站升级到HTTPS。
Let’s Encrypt是国外一个公共的免费SSL项目,该项目是为了普及HTTPS而发起的,目前已经被Mozilla、
Google、Microsoft和Apple等主流浏览器支持,对HTTPS技术的普及有着巨大贡献。随着HTTPS的普及,
Let’s Encrypt已经成为全球最受欢迎的免费SSL证书签发机构。Let’s Encrypt的基础证书只提供了数据
加密,不验证身份,从而也无法证明网站的所有者,但是已经可以满足绝大部分应用场景。
安装Certbot
1、安装EPEL仓库,Let’s Encrypt的签发证书工具在EPEL仓库中才能找到。
yum install -y epel-release
2、卸载一些依赖包,否则在安装Certbot时会报错。Certbot是Let’s Encrypt官方推荐的获取证书的客
户端,可以帮我们获取免费的Let’s Encrypt证书。
pip uninstall requests
pip uninstall urllib3
yum remove python-urllib3 python-requests -y
3、安装Certbot
yum install certbot -y
4、停止httpd服务,因为在生成证书时,Certbot需要占用443端口进行验证。
systemctl stop httpd
5、如果不确定443端口是否被占用,可以用以下命令进行查看
netstat -tunlp grep :443
签发证书
1、一切准备就绪后,使用以下命令为网站签发SSL证书。
certbot certonly –standalone -d www.example.com
2、证书签发完毕后,保存在/etc/letsencrypt/live/目录下。
3、如下图,一共生成了4个证书文件,对于Apache来说,需要用到cert.pem、chain.pem、privkey.pem
这三个证书文件,另外还有一个fullchain.pem的证书文件则是在Nginx上需要用到的。
4、配置Apache,注意如果是全新安装,请确保Apache已经安装了SSL插件。这里我不是全新安装,而是进行
证书替换,所以直接编辑/etc/httpd/conf.d/ssl.conf即可。按照下图配置三个证书文件即可。
5、配置完成后,启动httpd服务
systemctl start httpd
6、验证SSL证书是否有效,在浏览器中打开网站,可以看到网址前面出现绿色的锁头,说明当前网站具有有
效的SSL证书并支持HTTPS访问。
7、进一步查看详细信息,确认网站使用的是我们新生成的SSL证书,说有SSL证书替换成功。
自动更新证书
从上面的截图中可以看到,Let’s Encrypt提供的证书只有90天的有效期,所以我们必须在证书到期之前重
新获取证书,Certbot提供了更新证书的命令:certbot renew。通过这个命令我们就可以更新SSL证书了,
但是如果每次都需要手动更新也是件麻烦事儿,我们可以用Linux上的crontab定时任务来解决。
1、进入定时任务存放目录
cd /etc/cron.d
2、将脚本写入文件,例如每两个月的20号凌晨3点10分执行一次证书更新工作,执行更新前先停止httpd服
务,证书更新完毕后自动启动httpd服务。
echo “10 3 20 */2 * certbot renew –pre-hook “systemctl stop httpd” –post-hook
“systemctl start httpd”” > certbot-auto-renew-cron
3、执行计划任务
crontab certbot-auto-renew-cron
4、查看系统正在执行的计划任务,确认计划任务已生效。
crontab -l