使用免费证书给apache配置ssl

日期 2018-08-22 服务器 作者 叫我蓝火火 共0评论

系统是Ubuntu16.04,托管在腾讯云。
之前因为某种不想写正则表达式的原因,从nginx换到了apache2,配置倒是方便了不少,我这小破站也感觉不太出来性能的差别,不过以后要反代的服务越来越多,可能还得换回nginx...

腾讯云的免费证书要一年一续,而且不能申请泛域名,要一个域名一个域名的设置,超级麻烦,感谢我竹哥手把手的教学,像奶孩子一样教会了我怎么用certbot自动续证书。
感谢慷慨无私的Let's Encrypt,为我们提供了一键申请证书脚本,就是上面说的certbot。
首先打开certbot,在下面选择系统,然后按照提示一步一步安装。
Let's Encrypt是支持泛域名的,但是由于腾讯云的限制,泛域名没办法自动更新,所以这里我们就把根域名和每个子域名都添加到证书里。
装好之后先别急着运行,先检查一下/etc/apache2/sites-enabled里的conf宝宝们,看看是否有根域名和www的虚拟主机。比如我的网站,就要额外的建立两个虚拟主机,服务器名称分别是ultrabluefire.cn和www.ultrabluefire.cn。

$sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/ultrabluefire.cn.conf

$sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/www.ultrabluefire.cn.conf

然后分别修改这两个文件,对ServerName行取消注释,然后内容分别写上主机名。

#ultrabluefire.cn.conf
...
ServerName ultrabluefire.cn
...

#www.ultrabluefire.cn.conf
...
ServerName www.ultrabluefire.cn
...

然后使用a2ensite命令:

$sudo a2ensite ultrabluefire.cn.conf

$sudo a2ensite www.ultrabluefire.cn.conf

$sudo apache2ctl restart

之前我不知道有这么个东西,蠢兮兮的自己建软链接。。。与此类似的,还有a2dissite,a2enconf,a2disconf,a2enmod,a2dismod,其中名字带en的就是enable,名字带dis的就是disable。
这时候测试一下网站每个域名是否正常,如果正常就开始下一步:

$sudo certbot --apache

然后等他提示,第一步应该是让输入一个能用的邮箱,然后会收到一封激活邮件,记得点一下。
第二步是让你选启用ssl的链接,上面列表里的链接都是读的虚拟主机,如果你的根和www的虚拟主机不存在,这里就没办法给他们启用ssl。这时候输入空格,回车。
然后会问你是否重定向,当然重定向了,选择之后他会给每个虚拟主机建立一个绑定了443端口的配置文件,并且把绑定了80端口的配置重定向到443端口,超级方便。
这时候再访问你的网站,应该已经自动跳转到https了,接下来是配置自动更新。
certbot提供了一个renew的命令,可以一键更新证书,我们只要让他定时运行就可以。
这里咱们使用crontab提供的定时运行脚本的功能,腾讯云的Ubuntu应该是自带了crontab的,然后运行

$sudo crontab -e

他会让你选择编辑器,选个顺手的,开始撸

30 4 * * 1 certbot renew --renew-hook "apache2ctl restart" --quiet > /dev/null 2>&1 &

对应的是这么个意思

分钟   小时     日      月       星期(0~6)       命令
30      4       *       *       1               certbot renew...

到此,自动更新应该是配置好了。

如果有错误请告诉我,谢谢各位大佬