作者ChinaLeng 发布于 2年前
介绍

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条评论