跳至主要内容

Typecho建站记(二)---ssl加密及域名转发


      上一篇博文中我已经把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
        然后执行更新
  • apt update
        安装certbot
  • apt install certbot python-certbot-apache -t stretch-backports -y
        运行certbot
  • certbot --apache
        运行后会有对话框,按下图选择对应的选项即可。
        至此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]
        重启服务器后,两个http域名可以跳转到https页面了,现在剩下https://example.com跳转到https://www.example.com需要解决。

        但是针对https页面直接添加转发规则是不行的,因为浏览器针对https域名会先验证证书与域名是否相符,不相符的话则停止访问,因此不会触发到服务器里面的跳转规则。
        因此我们需要给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]
        重启服务器,现在无论用哪一个网址访问,都会跳转到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博客总算是折腾好了,可以放心的记录日常了。另ssh客户端及winscp使用可参考我前面的博文Vultr自建SS服务超简单的自建SSR教程。没有服务器的同学可以去vultr买一个,现在vultr搞活动,通过我的推广链接https://www.vultr.com/?ref=7888839-4F注册vultr帐号有50美金的体验金。

参考文章:
另因参考文章较多,有些网页未及时收藏导致未在此列出,在此一并表示感谢。

评论

此博客中的热门博文

如何使用tasker在连接/断开翻墙WIFI时自动关闭/开启SSR

    前一阵子google play搞活动,tasker打折至0.99刀,恰好我也从google rewards里面答题拿到了1刀+,所以买了这个传说中的神器。     在买tasker的时候,我就想着用它来实现自动开启/关闭SSR了,原以为会很简单的,没想到设置过程中还是出现了不少的问题,当时在G+发po问了一些基友,然后发现有不少的基友有同样的问题,所以写一篇简单的设置教程分享给需要的人,一些重点的细节我已经加黑,大家设置的时候注意一下。     言归正传,下面是设置教程:     功能一:连接上翻墙路由器的wifi信号之后,自动关闭手机上的SSR服务。     打开tasker主界面,顶栏在profiles选项上时,点击右下方的加号,在出现的选择界面上依次选择State→Net→Wifi connected,然后在弹出的界面上选择SSID右边的放大镜,选择已翻墙的WIFI名字, 然后下方倒数第二项Active下面选项点开,选Any, 按返回键。 此时会回到主界面,并会在新建的状态项目右方弹出任务选择栏,此时选New Task,然后会要求输入任务名,这里可以随便写,但是为了方便以后识别,尽量写容易理解的有关联性的名字,比如我写的SSR off。然后在弹出的新建任务界面,点右下方的加号,依次选Plugin→SSR→Configuration右边的编辑图标(一个笔头), 在弹出的SSR选择菜单上将Start the service的开关关掉, 因为是关掉服务,所以下方服务器随便选择,返回。 至此功能一设置完成。     功能二:与翻墙WIFI的信号断开连接时,自动开启手机上的SSR服务。     前面的操作是一样的,打开tasker主界面,顶栏在profiles选项上时,点击右下方的加号,在出现的选择界面上依次选择State→Net→Wifi connected,然后在弹出的界面上选择SSID右边的感叹号,选择已翻墙的WIFI名字, 然后将最下方的invert(反转,即未连接)选项勾上, 按返回。 出现添加任务菜单,点New Task,输任务名(比如SSR ON),在弹出的新建任务界面,点右下方的加号,依次选Plugin→SSR→Configuration右边的编辑图标(一个笔头), 在弹出的SSR选择菜