ssl-secure.png
上一篇博文中我们已经把typecho站点初步建好,但是此时的站点是没有经过ssl加密,有可能会被运营商劫持或被中间人攻击,另外没有加密的网站在搜索引擎中的权重相对是比较低的,因此给网站加上ssl加密还是很有必要的。这里我用Certbot自动配置lets-encrypt的证书,在debian9系统中实现。

添加ssl加密

因为certbot需要用到stretch-backports,而stretch-backports在Debian自带源中是没有的,需要添加源,注意下面四行是一个命令,全部复制到终端后执行即可。

cat >> /etc/apt/sources.list<<EOF
# backports
deb http://deb.debian.org/debian stretch-backports main
EOF

sstypecho3.PNG

然后执行更新,并安装certbot。

apt update
apt install certbot python-certbot-apache -t stretch-backports -y

sstypecho5.PNG

运行certbot,运行后会有对话框,按下图选择对应的选项即可。

certbot --apache

sstypecho9.png

至此ssl加密已经设置完成,而且域名转发也开启了,但是此时的转发是不够完美的,还需要自己再添加规则。

完善域名转发

前面在购买域名的时候我们添加了两条解析记录,现在又设置了加密,这样的话就会出现4个网址组合,如下示例:

http: //example.com
http: //www.example.com
https: //example.com
https: //www.example.com

这样对我们的访客是不友好的,而且搜索引擎也会将这当做四个不同的网站来收录,无形中降低了网站在搜索引擎中的排名。因此我们需要把这四个域名统一起来,这里就需要用到域名转发了。上面设置ssl加密的时候,certbot已经设置好了其中一个http网址的转发,因此我们把另外一个网址添加到转发规则里面就可以了。

使用winscp登陆进服务器,进入etc/apache2/sites-available文件夹,里面的000-default.conf就是http页面的配置文件,右击---编辑,把RewriteEngine on后面的这段内容改为:

RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com [OR]
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

re.png

重启服务器后,两个http域名可以跳转到https页面了,现在剩下https: //example.com跳转到https: //www.example.com需要解决。

但是针对https页面直接添加转发规则是不行的,因为浏览器针对https域名会先验证证书与域名是否相符,不相符的话则停止访问,因此不会触发到服务器里面的跳转规则。
re2.png

因此我们需要给https: //example.com也加上ssl加密,以便浏览浏览器可以继续访问我们的服务器。
首先我们需要添加https: //example.com域名到服务器中,使用winscp进入etc/apache2/sites-available,把000-default-le-ssl.conf(https: //www.example.com的配置文件)下载到本地,名字修改为111-default-le-ssl.conf后重新上传到原文件夹,然后右击编辑,找到ServerName www.example .com这一行,修改为ServerName example .com(注意这里的example是示例,实际操作时为你自己的域名,前面是没有#号注释的),保存。
然后ssh登陆到服务器,进入到etc/apache2/sites-enabled文件夹,给刚刚新建的111-default-le-ssl.conf做一个软链以启用这个配置。

cd /etc/apache2/sites-enabled
a2ensite 111-default-le-ssl.conf

重启我们的服务器,然后和前面添加ssl加密一样运行certbot,给https: //example.com添加ssl加密,注意此时第四步会出现域名选择列表,选https: //example.com这个域名即可。

certbot --apache

现在我们可以给https: //example.com添加转发规则了,winscp登陆进服务器,进入etc/apache2/sites-available文件夹,右击111-default-le-ssl.conf,在</VirtualHost>前面添加下列转发规则,然后保存。

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com$1 [L,R=301]

re3.png

重启服务器,现在无论用哪一个网址访问,都会跳转到https: //www.example.com了。

自动更新证书(未验证)

lets-encrypt的免费证书只有三个月的期限,三个月后需要重新申请证书,好在certbot自带了更新证书的功能,我们要做的就是让它每三个月执行一次,只需执行下记命令添加计划任务到crontab中即可。

echo "0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew" >> /etc/crontab

标签: typecho, ssl

添加新评论