一直想撸一下https,最近恰好有点空,就实现了一下。以前看过一篇教你快速撸一个免费HTTPS证书的文章,经过Certbot
来管理Let's Encrypt
的证书,使用前须要安装一堆库,以为不太友好。所谓条条大路通罗马,确定还有其余方法能够作这个事情。html
通过一番研究,发现了 acme.sh 这个库,这个是用Shell脚本编写的,不须要安装其余东西,比较纯净,以为比较适合本身,记录一下过程。nginx
curl https://get.acme.sh | sh
这个命令后会将acme.sh安装到~/.acme.sh/
目录下
从新载入~/.bashrc
git
source ~/.bashrc
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
默认生成的证书都放在安装目录下: ~/.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.key
和www.your-domin.com.cer
的文件。bash
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
这一步不是必须,但最好加上,后面配置好后会经过ssllabs.com 来验证一下,若是这一步ssl_dhparam 未配置,将致使 ssllabs.com 的评分降到 B。A+是最好。服务器
证书已安装完毕,接下来就是让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
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
目前因为 acme 协议和 letsencrypt CA 都在频繁的更新, 所以 acme.sh 也常常更新以保持同步.因此为了省心省力,最好仍是设置一下软件的自动更新,执行下面的命令就能够了。
acme.sh --upgrade --auto-upgrade
在这个网站能够验证一下你的证书级别,根据我上面的配置能够评级为A。
https://www.ssllabs.com/sslte...