Let's Encryp 部署 HTTPS

原谅我是个真•小白…… 折腾了一两天才大概搞明白,大神不要吐槽 。。
大概半个月前,我看到很多人都给自己网站上了HTTPS,我也打算自己试试,证书我选择的是 Let's Encrypt,一开始看到了Certbot工具,可能因为是国内服务器的原因,试了好长时间,一直卡在Python那里,换PIP源也没啥用,遂草草了事。前两天我在某群里提到此事,有人向我推荐了DNS 验证方式获取 lets-encrypt 证书,感觉好像很简单,所以又开始了尝试。下面是摘抄自作者的关于 DNSPOD 部署的详细步骤:

证书获取

DNSPOD

下载

*你可以自建个文件夹,在里面执行语句,密钥也会存放在这里*
wget https://github.com/xdtianyu/scripts/raw/master/le-dns/le-dnspod.sh
wget https://github.com/xdtianyu/scripts/raw/master/le-dns/dnspod.conf
chmod +x le-dnspod.sh

配置

dnspod.conf 文件内容

TOKEN="YOUR_TOKEN_ID,YOUR_API_TOKEN"
RECORD_LINE="默认"
DOMAIN="example.com"
CERT_DOMAINS="example.com www.example.com im.example.com"
#ECC=TRUE

修改其中的 TOKEN 为您的 dnspod api token ,注意格式为123456,556cxxxx
修改 DOMAIN 为你的根域名,修改 CERT_DOMAINS 为您要签的域名列表,需要 ECC 证书时请取消 #ECC=TRUE 的注释。

运行

./le-dnspod.sh dnspod.conf
最后生成的文件在当前目录的 certs 目录下

定时任务

如果证书过期时间不少于30天, letsencrypt.sh 脚本会自动忽略更新,所以至少需要29天运行一次更新。
每隔20天(每个月的5号和25号)自动更新一次证书,可以在 le-dnspod.sh 脚本最后加入 service nginx reload等重新加载服务。
0 0 5/20 * * /etc/nginx/le-dnspod.sh /etc/nginx/le-dnspod.conf >> /var/log/le-dnspod.log 2>&1
注意 ubuntu 16.04 不能定义 day of month 含有开始天数的 step values,可以替换命令中的 5/20 为 5,25。

nginx配置

我直接把我的配置贴出来吧,/usr/local/nginx/conf/vhost下面,简单明了,提供参考。

server
    {
        listen 443 ssl;
        ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
        ssl_certificate /path/fullchain.pem;
        ssl_certificate_key /path/privkey.pem;
        #listen [::]:80;
        server_name ABC.com;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /path;

        include other.conf;
        #error_page   404   /404.html;
        include enable-php.conf;
        add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log off;
    }
server {
    server_name  ABC.com;
    listen 80;
        location / {
               return 301 https://ABC.com$request_uri;
    }
}

重载Nginx,不出意外的话,你的网站就会有一把小绿锁了(当然你要想办法处理一些外部引入的HTTP资源)。

301

关于301重定向还有一种方法是在server_name ABC.com;下面加以下代码,不过听大神说上面买的方法更正规一点。

if ($host != 'ABC.com' ) {
rewrite ^/(.*)$ http://ABC.com/$1 permanent;
}

在线解析

传送门:解忧杂货店,解析接口来自网络,自己画了一个界面,不过实在太丑了,zhaoy 大佬重绘了一下,感觉好看多了,自己做了点小修改,可以看看一些网站的VIP视频,然并卵系列 (-_-)zz

蛋疼

我对HTTPS真是既爱又恨,你懂的,我再考虑考虑要不要上HTTPS。。