使用 Let’s Encrypt 给站点添加 https 小绿锁
Let's Encrypct
虽然现在有非常多的 https 免费证书,但是讲真,Let's Encrypct 真的很好用,强烈推荐!
使用方法也很简单,配合官网推荐的 Certbot ACME client 更是 Easy
只需要简单的几条命令就可以轻松搞定!
开始
在 Certbot ACME client 官网中,根据自己的操作系统及操作系统的版本,还有服务类型,选择相应的教程文档
我的使用的是 Ubuntu 14.04 和 Nginx
首先我根据教程执行了如下命令:
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto certonly --webroot -w /Project/xinpureZhuBlog -d xinpure.com -d www.xinpure.com
执行完这些命令之后,会在 /Project/xinpureZhuBlog 目录里生成一个 .well-known 隐藏目录
配置 Nginx
为了保证 .well-known/acme-challenge 能够正常访问
我们需要对 Nginx 作如下配置:
location ~ /\.well-known {
allow all;
}
接下来就是 Nginx 的 https 配置:
server {
listen 443;
server_name xinpure.com www.xinpure.com;
access_log /var/log/nginx/www.xinpure.com.access.log main;
error_log /var/log/nginx/www.xinpure.com.error.log warn;
root /Project/xinpureZhuBlog;
index index.php index.html index.htm;
ssl on;
ssl_certificate /etc/letsencrypt/live/xinpure.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xinpure.com/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/letsencrypt/dhparams.pem;
location / {
try_files $uri $uri/ /index.php?/$request_uri;
}
location ~ \.php$ {
root /Project/xinpureZhuBlog;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
}
}
关于 https 的配置我就不一一说明了 (我肯定不会直接说我也不清楚啊。。。)
希望得到 A+ 的朋友也可以参考 这篇文章 去配置
刚配置完,我的评分只到 D ,根据这篇文章做了一些调整轻松就上 A 评分了
至于为什么没配置到 A+ 那是因为我还有其它重要的事情去做 (对,就是懒!)
http 重定向 https
既然配置好了 https 当然是希望大家访问本站的时候,都是通过 https 来访问的
所以就想把 http 请求直接跳转到 https,这就想到了用 301 重定向
查了一下,好像大家都是采用的这种配置方式:
server {
listen 80;
server_name xinpure.com www.xinpure.com;
root /Project/xinpureZhuBlog;
return 301 https://$server_name$request_uri;
}
这样其实正常是没有问题的,完全可以实现这个需要
但是我这是说的是正常,所以会有不正常的情况
也就是当我们在使用多个域名的时候
比如这个站点,我同时使用了两个域名:xinpure.com 和 other.com
如果采用上面这种方式,也就是 server_name 修改成:
server_name xinpure.com other.com;
由于当使用多个域名的时候 $server_name 只会取第一个域名作为自身的值
就是说这时候 $server_name = xinpure.com
不管你是用 other.com 还是 xinpure.com 访问,$server_name 的值都是 xinpure.com
所以无论用哪个域名访问,最后都会被重定向到 xinpure.com 上
这是我不想要的,我只想要 http 重定向到 https 并且当前使用哪个域名,该域名保持不变
所以我最后使用了 \(host 来取代 \)server_name
server {
listen 80;
server_name xinpure.com www.xinpure.com;
root /Project/xinpureZhuBlog;
return 301 https://$host$request_uri;
}
这里其实并没有使用多域名 (如果你要说,有 www 和没有 www 算两个域名,我也认了)
我是用到其它站点上了 🙂
关于证书的删除
添加好了证书,也就皆大欢喜了
但是也不免会有删除证书的情况,官方的教程却并没有提到删除证书的信息
下面是从网络上找到的方法,感觉还是蛮有用的
cd /etc/letsencrypt/archive
rm -rf xinpure.com/
cd /etc/letsencrypt/live
rm -rf xinpure.com/
cd /etc/letsencrypt/renewal
rm xinpure.com.conf
参考链接
https://bjornjohansen.no/redirect-to-https-with-nginx
https://community.letsencrypt.org/t/remove-domain-not-required-from-cert/14010/6