介绍
Let's Encrypt是一个为网站提供免费的SSL/TLS证书的机构,acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.证书只有三个月时效,正常会用自动脚本来更新证书。
准备
测试域名:test.czkup.cn
环境:CentOS7
工具:acme+Nginx
安装acme
curl https://get.acme.sh | sh
并创建 一个 bash 的 alias, 方便你的使用:
alias acme.sh=~/.acme.sh/acme.sh
acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证.这里我使用的是http的方式。
acme.sh --issue -d test.czkup.cn -d www.test.czkup.cn -w /home/www/test.czkup.cn/ --nginx
-d后面的域名换成自己的域名,-w后面填写网站的根目录,假如你的是apache,后面的参数需要改成--apache。http的方式acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会删除验证文件.
执行这句话后等待一会会出现下面的提示。
[Wed Nov 4 16:03:34 CST 2020] Your cert is in /xxx/xxxx.cn.cer
[Wed Nov 4 16:03:34 CST 2020] Your cert key is in /xxx/xxx.key
[Wed Nov 4 16:03:34 CST 2020] The intermediate CA cert is in /xxx/ca.cer
[Wed Nov 4 16:03:34 CST 2020] And the full chain certs is there: /xxx/fullchain.cer
把里面cer和key结尾的地址记住,把这个复制到你想要放的目录下,然后再nginx的配置中添加下面几行。
ssl_certificate /xxx/xxxx.cn.cer ;
ssl_certificate_key /xxx/xxx.key ;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
配置好后,去重启nginx,然后再浏览器访问一下。
这个时候就能看见,网站已经是https的。如果访问不了, 请检查一下443接口是否放行。
但是如果访问以前的80,还是可以访问的。这个时候需要都强制使用https,再配置sll后面添加一个行
#让http请求重定向到https请求
error_page 497 https://$host$uri?$args;
利用error_page命令将497状态码的链接重定向到https上。
更新证书的命令
acme.sh --renew -d test.czkup.cn --force
如果遇到了错误。可以在命令后加上 --debug 来查看错误信息。
0条评论