使用acme.sh撸一个免费且自动更新的HTTPS证书

前言

一直想撸一下https,最近恰好有点空,就实现了一下。以前看过一篇教你快速撸一个免费HTTPS证书的文章,经过Certbot来管理Let's Encrypt的证书,使用前须要安装一堆库,以为不太友好。所谓条条大路通罗马,确定还有其余方法能够作这个事情。html

通过一番研究,发现了 acme.sh 这个库,这个是用Shell脚本编写的,不须要安装其余东西,比较纯净,以为比较适合本身,记录一下过程。nginx

准备工做

  1. 一个已解析好的域名(能够用http来访问)。
  2. 开启服务器的443端口防火墙。

步骤

1、安装acme.sh

curl https://get.acme.sh | sh

这个命令后会将acme.sh安装到~/.acme.sh/目录下
从新载入~/.bashrcgit

source ~/.bashrc

2、生成证书

acme.sh  --issue -d www.your-domin.com  --webroot  /srv/your-domin.com/

这个命令的意思是用http方式将www.your-domin.com生成一个证书,/srv/your-domin.com/是你的网站根目录。(这个过程当中acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 而后自动完成验证. 最后又自动删除验证文件.)github

3、安装或copy证书到nginx目录

默认生成的证书都放在安装目录下: ~/.acme.sh/,这个目录通常来讲不能让nginx或Apache直接使用。因此咱们须要将证书放到一个指定的目录,习惯是放在/etc/nginx/ssl/目录下。acme提供了--installcert来安装证书,只需指定目标位置, 而后证书文件会被copy到相应的位置。
先确保存在/etc/nginx/ssl/目录web

mkdir /etc/nginx/ssl

copy证书并指定nginx reload命令ruby

acme.sh  --installcert  -d  www.your-domin.com   \
        --key-file   /etc/nginx/ssl/www.your-domin.com.key \
        --fullchain-file /etc/nginx/ssl/fullchain.cer \
        --reloadcmd  "service nginx force-reload"

service nginx force-reload是为了在让acme自动更新时候可以重启nginx使得证书生效。执行完命令能够在/etc/nginx/ssl/看到多了www.your-domin.com.keywww.your-domin.com.cer的文件。bash

4、生成 dhparam.pem 文件

openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

这一步不是必须,但最好加上,后面配置好后会经过ssllabs.com 来验证一下,若是这一步ssl_dhparam 未配置,将致使 ssllabs.com 的评分降到 B。A+是最好。服务器

5、配置nginx

证书已安装完毕,接下来就是让nginx来使用这个证书了。因为我这个服务器有几个站点,而目前只是一个站点配置了证书,所以只修改当前站点的conf便可dom

server {
    listen       80;
    server_name www.your-domin.com;
    listen       443 ssl http2 default_server;
    listen       [::]:443 ssl http2 default_server;
    ssl_certificate /etc/nginx/ssl/www.your-domin.com.cer;
    ssl_certificate_key /etc/nginx/ssl/www.your-domin.com.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    ...
}

ssl_prefer_server_ciphers on; 这个配置能提升证书的评分。
ssl_dhparam /etc/nginx/ssl/dhparam.pem; 能提升证书评分,这个文件是在第四步时生成的,若没有作则不须要写这句。
nginx -t验证一下nginx配置是否正确,而后systemctl restart nginx重启一下nginx,就能够用https://www.your-domin.com测...curl

6、证书更新

Let's Encrypt 的证书有效期是 90 天的,须要按期从新申请,不过acme在安装的时候就已经设置了自动更新,因此这一步不用关心,很省心。
这里了解一下acme.sh的自动更新:安装acme时会自动为你建立 cronjob, 天天 0:00 点自动检测全部的证书, 若是快过时了, 须要更新, 则会自动更新证书.
查看任务

# crontab -l
47 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

手动renew一下证书能够经过这个命令

acme.sh --cron -f

7、设置软件自动更新

目前因为 acme 协议和 letsencrypt CA 都在频繁的更新, 所以 acme.sh 也常常更新以保持同步.因此为了省心省力,最好仍是设置一下软件的自动更新,执行下面的命令就能够了。

acme.sh  --upgrade  --auto-upgrade

其余

在这个网站能够验证一下你的证书级别,根据我上面的配置能够评级为A。
https://www.ssllabs.com/sslte...

参考文章

相关文章
相关标签/搜索