Let's Encrypt 证书申请及配置
服务器面板 2021-07-20 20:36:30

 这里推荐 acme.sh,它不仅有详细的中文文档,操作更为方便,还支持 Docker。

acme.sh

以 root 用户为例

1、在线安装

C/C++ Code复制内容到剪贴板
  1. curl https://get.acme.sh | sh  

 

安装过程:

1、/root 目录下生成 .acme.sh 文件夹,查看文件夹内容:ls ~/.acme.sh/;

2、自动添加 bash alias:

C/C++ Code复制内容到剪贴板
  1. # ~/.bashrc 添加:  
  2. "/root/.acme.sh/acme.sh.env"  
  3.   
  4. # acme.sh.env 内容:  
  5. # alias acme.sh="/root/.acme.sh/acme.sh"  

3、自动添加定时任务(时间随机) 执行 crontab -l 可以查看定时任务:

C/C++ Code复制内容到剪贴板
  1. # 每天凌晨检查证书的有效期,如有需要,自动续签。  
  2. 30 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null  

 

如果遇到acme.sh命令不生效,请使用:

C/C++ Code复制内容到剪贴板
  1. /root/.acme.sh/acme.sh -h  

 

2、设置邮箱

C/C++ Code复制内容到剪贴板
  1. acme.sh --register-account -m 398927951love@sina.com  

 

 

相关命令 

C/C++ Code复制内容到剪贴板
  1. # 查看帮助  
  2. acme.sh -h  
  3.   
  4. # 查看列表  
  5. acme.sh --list  
  6.   
  7. # 卸载 acme.sh  
  8. # 编辑 ~/.bashrc,删除 acme.sh alias  
  9. acme.sh --uninstall  

 

脚本更新

自动更新:acme.sh --upgrade --auto-upgrade

手动更新:acme.sh --upgrade

关闭更新:acme.sh --upgrade --auto-upgrade 0

 

 

3、证书申请 

C/C++ Code复制内容到剪贴板
  1. acme.sh --issue -d example.com -d www.example.com -w /home/wwwroot/example.com  

acme.sh 有很多种申请证书的方式,上面写得如果你已经有一个在运行的server,-w 后跟的就是这个

server的根目录,前面-d 后面跟的是要申请证书的域名,可以是多个,第一个是主域名。

standalone方式,这个方式要求服务器的80端口可用,也可以指定别的端口,命令在上面的地址里都有。

C/C++ Code复制内容到剪贴板
  1. acme.sh  --issue  -d example.com  -d www.example.com --standalone --httpport 88  

 

 

DNS API(推荐)

根据域名服务商,选择对应的 DNS API。

阿里云:控制台

创建 Accesskey

C/C++ Code复制内容到剪贴板
  1. # 获取到 Key 和 Secret 后,设置环境变量  
  2. export Ali_Key="123"  
  3. export Ali_Secret="abc"  
  4.   
  5. # 生产证书  
  6. acme.sh --issue --dns dns_ali -d mydomain.com -d www.mydomain.com  

 

创建一个.sh文件放在指定的位置(api_xxx_com_create.sh),然后使用sh命令去执行它

C/C++ Code复制内容到剪贴板
  1. #!/bin/sh  
  2. alias acme.sh='/root/.acme.sh/acme.sh'  
  3.   
  4.   
  5. # 获取到 Key 和 Secret 后,设置环境变量    
  6. export Ali_Key="Lxxxxx"    
  7. export Ali_Secret="3Txxxx"  
  8.     
  9. # 生产证书  
  10. acme.sh --issue --dns dns_ali -d api.xxx.com  

 

 

4、证书配置

生成的证书都在 root 目录下: ~/.acme.sh/

导出证书

使用 --install-cert 命令

-d:域名

–key-file:私钥位置

–fullchain-file:证书位置

–reloadcmd:重载命令

 

C/C++ Code复制内容到剪贴板
  1. acme.sh --install-cert -d example.com \  
  2. --key-file       /path/to/keyfile/in/nginx/mydomain.key  \  
  3. --fullchain-file /path/to/fullchain/in/nginx/fullchain.cer  


 

C/C++ Code复制内容到剪贴板
  1. acme.sh --install-cert -d mydomain.com \  
  2.         --key-file /websvr/ssl/mydomain.key \  
  3.         --fullchain-file /websvr/ssl/fullchain.cer \  
  4.         --reloadcmd "docker exec -t nginx nginx -s reload"  

 

创建一个.sh文件放在指定的位(api_xxx_com_install.sh),然后使用sh命令去执行它

C/C++ Code复制内容到剪贴板
  1. #!/bin/sh  
  2. alias acme.sh='/root/.acme.sh/acme.sh'  
  3.   
  4. acme.sh --install-cert -d api.xxx.com --key-file /data-disk/ssl/ssl_cert/api_xxx_com.key --fullchain-file /data-disk/ssl/ssl_cert/api_xxx_com.cer  

 

 

5、Nginx 配置 

C/C++ Code复制内容到剪贴板
  1. server {  
  2.     listen 80;  
  3.     server_name mydomain.com;  
  4.     # 重定向到 https  
  5.     rewrite ^(.*)$  https://$host$1 permanent;  
  6. }  
  7.   
  8. server {  
  9.     listen 443;  
  10.     server_name mydomain.com;  
  11.     root   /websvr/www/mydomain.com;  
  12.     index  index.html index.htm;  
  13.   
  14.     access_log /dev/null;  
  15.     error_log  /websvr/log/nginx/mydomain.com.error.log warn;  
  16.   
  17.     # SSL 配置  
  18.     ssl on;  
  19.     ssl_certificate /websvr/ssl/fullchain.cer; # 证书文件  
  20.     ssl_certificate_key /websvr/ssl/mydomain.key; # 私钥文件  
  21.     ssl_session_timeout 5m; # 会话缓存过期时间  
  22.     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 开启 SSL 支持  
  23.     ssl_prefer_server_ciphers on; # 设置协商加密算法时,优先使用服务端的加密套件  
  24. }  

 

PHP Code复制内容到剪贴板
  1. server {  
  2.      server_name api.xxx.com;  
  3.      listen 80;  
  4.      # 重定向到 https    
  5.      rewrite ^(.*)$  https://$host$1 permanent;   
  6. }  
  7.   
  8. server{  
  9.      listen 443 ssl;  
  10.      server_name api.xxx.com;  
  11.      index index.html index.htm index.php;  
  12.      root /var/www/html/temp/xxx/web/api;  
  13.      location / {  
  14.          try_files $uri $uri/ /index.php?$query_string;  
  15.      }  
  16.      location ~ \.php$ {  
  17.          fastcgi_pass php7.2:9000;  
  18.          include fastcgi.conf;  
  19.      }  
  20.   
  21.     # SSL 配置    
  22.     ssl on;    
  23.     ssl_certificate /var/www/html/ssl/ssl_cert/api_xxx_com.cer; # 证书文件    
  24.     ssl_certificate_key /var/www/html/ssl/ssl_cert/api_xxx_com.key; # 私钥文件    
  25.     ssl_session_timeout 5m; # 会话缓存过期时间    
  26.     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 开启 SSL 支持    
  27.     ssl_prefer_server_ciphers on; # 设置协商加密算法时,优先使用服务端的加密套件  
  28.   
  29. client_max_body_size 50m;  
  30. }  

 

 

 

更新证书

定时任务会自动更新

强制续签证书:acme.sh --renew -d mydomain.com --force

 

SSL 检测

https://myssl.com

 

 

 

本文来自于:https://www.jianshu.com/p/1a792f87b6fe

Powered by yoyo苏ICP备15045725号