https 的安全性不言而喻,有些搜索引擎甚至会对有没 https 的网站降权。
使用 https 证书的首要条件是要有 SSL 证书,在某些人(比如我)的印象里 SSL 证书动辄几百美元并且有着严格的审查,所以搞起来麻烦。但实际上现在已经有了面向个人的免费 SSL 证书了,当然你前提是你有个人域名(这个还是要花钱的~)。
对于个人,申请免费的域名型(DV)就够了,企业型(OV)和 增强型(EV)不仅昂贵而且需要人工审核。
域名型证书只要有域名的所有权就可以申请,这里以 Let’s Encrypt 为例介绍下申请流程。
Let’s Encrypt 申请过程完全自动化,并且被各大浏览器支持,由 Linux 基金会托管,安全和可靠性值得信赖。
不知道为什么在官网下载的工具在验证的时候总是会出错,这里还是以 github 上最新的版本进行操作,系统为 Ubuntu 16.04 。
首先执行以下命令下载工具:
screen
git clone https://github.com/certbot/certbot
cd certbot
申请过程中需要更改 DNS 记录比较耗时,为了不自动断开连接,推荐使用 screen 命令
申请命令:(g.com 为你的域名,*.g.com 是你的所有子域名,它们共用一个证书)
sudo ./certbot-auto certonly --manual -d *.g.com -d g.com --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
之后出现一长串的无规则的字母序列类似于
J_fUsCNSs_5MzaFWpbXcy71IdcH7eQgg
你需要到域名解析商那里给自己的域名添加 txt 解析(不会影响正常解析,相当于给你的某个子域名添加了“注释”,用来验证你对网站的所有权),以 dns.la 为例:
注意主机记录那里是 _acme-challenge 而不是 _acme-challenge.g.com
注意添加之后要等几分钟或以上再按 Enter 键,因为 DNS 缓存需要时间,如果等不及的话可以用命令查看是否生效:
nslookup -q=txt _acme-challenge.g.com
然后,接着我们要做的是……
按下 Enter 后,重复再来一次!
注意第二次更不要急,因为网络上可能有上次你设置的 TXT 记录的缓存,所以你这次设置的没那么快被更新,等个十来分钟吧……
再次按下 Enter 键,如果成功的话会提示密钥存放的位置(不要急着关掉),如果没成功所有流程再来一遍……(所以不要急)
一般位置是在:
/etc/letsencrypt/live/g.com/
如果你刚才没注意看的话~~~
最后更新 Nginx 设置然后重启 Nginx (sudo service nginx restart),nginx 配置如下(把g.com 换成你的域名就好了):
server {
listen 80;
server_name g.com www.g.com;
return 301 https://www.g.com$request_uri; # 从 http 过来的跳到 https 上
}
server
{
listen 443; # https 端口
server_name
g.com
www.g.com;
index index.html index.htm;
root /home/ubuntu/;
error_page 404 = /404.html;
ssl on;
ssl_certificate /etc/letsencrypt/live/g.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/g.com/privkey.pem;
access_log /var/log/nginx/g.com_access.log;
}
以后再上网站就是有安全认证的~
注意证书有效期三个月,可以在 crontab 增加如下命令每天更新(证书没过期不会执行成功,需要sudo):
43 6 * * * certbot-auto renew --post-hook "systemctl reload nginx"