xinpureZhu

Menu

使用 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

— 于 共写了3259个字
— 文内使用到的标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注