今天,我把CoolShell变成https的安全访问了。我认可这件事有点晚了,由于以前的HTTP的问题也有网友告诉我,被国内的电信运营商在访问个人网站时加入了一些弹窗广告。另外,HTTP的网站在搜索引擎中的rank会更低。因此,这事早就应该干了。如今用HTTP访问CoolShell会被获得一个 301 的HTTPS的跳转。下面我分享一下启用HTTPS的过程。css
我用的是 Let’s Encrypt这个免费的解决方案。Let’s Encrypt 是一个于2015年推出的数字证书认证机构,将经过旨在消除当前手动建立和安装证书的复杂过程的自动化流程,为安全网站提供免费的SSL/TLS证书。这是由互联网安全研究小组(ISRG – Internet Security Research Group,一个公益组织)提供的服务。主要赞助商包括电子前哨基金会,Mozilla基金会,Akamai以及Cisco等公司(赞助商列表)。html
2015年6月,Let’s Encrypt获得了一个存储在硬件安全模块中的离线的RSA根证书。这个由IdenTrust证书签发机构交叉签名的根证书被用于签署两个证书。其中一个就是用于签发请求的证书,另外一个则是保存在本地的证书,这个证书用于在上一个证书出问题时做备份证书之用。由于IdenTrust的CA根证书目前已被预置于主流浏览器中,因此Let’s Encrypt签发的证书能够从项目开始就被识别并接受,甚至当用户的浏览器中没有信任ISRG的根证书时也能够。python
以上介绍文字来自 Wikipedia 的 Let’s Encrypt 词条。nginx
为你的网站来安装一个证书十分简单,只须要使用电子子前哨基金会EFF的 Certbot,就能够完成。shell
1)首先,打开 https://certbot.eff.org 网页。apache
2)在那个机器上图标下面,你须要选择一下你用的 Web 接入软件 和你的 操做系统。好比,我选的,nginx
和 Ubuntu 14.04
浏览器
3)而后就会跳转到一个安装教程网页。你就照着作一遍就行了。缓存
以Coolshell.cn为例 – Nginx + Ubuntu安全
首先先安装相应的环境:bash
1
2
3
4
5
|
$
sudo
apt-get update
$
sudo
apt-get
install
software-properties-common
$
sudo
add-apt-repository ppa:certbot
/certbot
$
sudo
apt-get update
$
sudo
apt-get
install
python-certbot-nginx
|
而后,运行以下命令:
1
|
$
sudo
certbot --nginx
|
certbot
会自动检查到你的 nginx.conf
下的配置,把你全部的虚拟站点都列出来,而后让你选择须要开启 https 的站点。你就简单的输入列表编号(用空格分开),而后,certbot 就帮你下载证书并更新 nginx.conf
了。
你打开你的 nginx.conf
文件 ,你能够发现你的文件中的 server
配置中可能被作了以下的修改:
1
2
3
4
|
listen 443 ssl;
# managed by Certbot
ssl_certificate
/etc/letsencrypt/live/coolshell
.cn
/fullchain
.pem;
# managed by Certbot
ssl_certificate_key
/etc/letsencrypt/live/coolshell
.cn
/privkey
.pem;
# managed by Certbot
include
/etc/letsencrypt/options-ssl-nginx
.conf;
# managed by Certbot
|
和
1
2
3
4
|
# Redirect non-https traffic to https
if
($scheme !=
"https"
) {
return
301 https:
//
$host$request_uri;
}
# managed by Certbot
|
这里建议配置 http2,这要求 Nginx 版本要大于 1.9.5。HTTP2 具备更快的 HTTPS 传输性能,很是值得开启(关于性能你能够看一下这篇文章)。须要开启HTTP/2其实很简单,只须要在 nginx.conf
的 listen 443 ssl;
后面加上 http2
就行了。以下所示:
1
2
3
4
|
listen 443 ssl http2;
# managed by Certbot
ssl_certificate
/etc/letsencrypt/live/coolshell
.cn
/fullchain
.pem;
# managed by Certbot
ssl_certificate_key
/etc/letsencrypt/live/coolshell
.cn
/privkey
.pem;
# managed by Certbot
include
/etc/letsencrypt/options-ssl-nginx
.conf;
# managed by Certbot
|
而后,就 nginx -s reload
就行了。
可是,Let’s Encrypt 的证书90天就过时了,因此,你还要设置上自动化的更新脚本,最容易的莫过于使用 crontab
了。使用 crontab -e
命令加入以下的定时做业(每月都强制更新一下):
1
2
|
0 0 1 * *
/usr/bin/certbot
renew --force-renewal
5 0 1 * *
/usr/sbin/service
nginx restart
|
固然,你也能够天天凌晨1点检查一下:
1
|
0 1 * * * certbot renew
|
注:crontab 中有六个字段,其含义以下:
这么方便的同时,我不由要问,若是是一些恶意的钓鱼网站也让本身的站点变成https的,这个对于通常用来讲就有点难以防范了。哎……
固然,在nginx或apache上启用HTTPS后,尚未结束。由于你可能还须要修改一下你的网站,否则你的网站在浏览时会出现各类问题。
启用HTTPS后,你的网页中的全部的使用 http://
的方式的地方都要改为 https://
否则你的图片,js, css等非https的链接都会致使浏览器抱怨不安全而被block掉。因此,你还须要修改你的网页中那些 hard code http://
的地方。
对于我这个使用wordpress的博客系统来讲,有这么几个部分须要作修改。
1)首先是 wordpress的 常规设置中的 “WordPress 地址” 和 “站点地址” 须要变动为 https 的方式。
2)而后是文章内的图片等资源的连接须要变动为 https 的方式。对此,你可使用一个叫 “Search Regex” 插件来批量更新你历史文章里的图片或别的资源的连接。好比:把 http://coolshell.cn
替换成了 https://coolshell.cn
3)若是你像我同样启用了文章缓存(我用的是WP-SuperCache插件),你还要去设置一下 “CDN” 页面中的 “Site URL” 和 “off-site URL” 确保生成出来的静态网页内是用https作资源连接的。
基本上就是这些事。但愿你们都来把本身的网站更新成 https 的。
嗯,12306,你何时按照这个教程作一下你的证书?
(全文完)