操作过程如下:(以下操作过程建议在root下执行)

一、下载脚本并执行安装

1、更新及安装组件

Debian/Ubuntu命令:

1
2
apt update -y    
apt install -y curl socat

CentOS 命令:

1
2
yum update -y  
yum install -y curl socat

2、安装 Acme 脚本

1
curl  https://get.acme.sh | sh -s [email protected]

添加软链接:

1
ln -s  /root/.acme.sh/acme.sh /usr/local/bin/acme.sh

二、申请证书:

1、80 端口空闲的证书申请方式:

自行更换代码中的域名、邮箱为你解析的域名及邮箱

1
acme.sh  --issue -d mydomain.com   --standalone

可选项:

1
2
--server letsencrypt       指定CA机构
--httpport 88 指定端口

2、nginx服务器验证:

1
acme.sh --issue  -d mydomain.com   --nginx

3、DNS API申请方式:

接着去dnspod申请API并保存

登录dnspod后台,进入菜单–【用户中心】–【安全设置】,点击右侧的”创建API Token”,这里名称随意命名即可。

注意提示信息:仅仅在创建的时候显示一次,所以,如果怕忘记或者在执行本篇文章介绍的过程中出错,建议把ID和token记录下来,比如记事本之类。

正式进入申请证书的整个流程的准备环节,在shell环境下分别输入:

DNSPOD示例

1
2
export DP_Id="dnspod中的id值"
export DP_Key="dnspod中的key值"

cloudflare示例

1
2
export CF_Key="cloudflare 中查看你的 key" 
export CF_Email="你的 cloudflare 邮箱"

开始申请签发证书

1
acme.sh --issue --dns dns_dp -d mydomain.com --debug

-d 指代域名,可以有多个 -d 参数,所以,后面又跟了一个通配符域名,以上域名请换成你所需要的。整个命令执行需要一段时间,最后会有一个120秒的等待。等最后出现success字样,就表示签发成功了。签发成功之后会在/root/.acme.sh/生成一个目录,这个目录的名称就是你申请的域名:

如果默认CA无法颁发,则可以切换下列CA:

1
2
3
4
5
6
切换 Let’s Encrypt:
acme.sh --set-default-ca --server letsencrypt
切换 Buypass:
acme.sh --set-default-ca --server buypass
切换 ZeroSSL:
acme.sh --set-default-ca --server zerossl

既然已经签发成功了,之前去改nginx配置即可,引用这个目录下的文件就好了。打住!官网有一段说明很重要(https://github.com/Neilpang/acme.sh/wiki/说明)

注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化. 正确的使用方法是使用 –installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置,

这就牵出了后面的证书安装过程(其实是复制证书文件到其他地方,通过它给的installcert命令可以保证可以自动更新升级,如果是我们手动cp,则无法后续的续订证书)

三、安装证书(复制证书)

1、安装证书到/etc/letsencrypt/acme/

1
2
3
4
5
6
acme.sh  --installcert -d mydomain.com  -d *.mydomain.com   
--cert-file /etc/letsencrypt/acme/mydomain.com.cer
--key-file /etc/letsencrypt/acme/mydomain.com.key
--ca-file /etc/letsencrypt/acme/ca.cer
--fullchain-file /etc/letsencrypt/acme/fullchain.cer
--reloadcmd "service nginx force-reload"

以上命令是把对应域名的证书文件都丢到/etc/letsencrypt/acme/里面去了,并且让nginx重新加载配置。

2、安装证书到指定文件夹

自行更换代码中的域名为你解析的域名

1
acme.sh --installcert -d mydomain.com --ecc --key-file /root/private.key --fullchain-file /root/cert.crt --reloadcmd  "service nginx force-reload"

四、最后一个步骤是配置nginx

需要注意的是有这几个配置,除了密钥,其他引入的都是fullchain:

1
2
3
ssl_trusted_certificate  /etc/letsencrypt/acme/fullchain.cer;
ssl_certificate /etc/letsencrypt/acme/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/acme/mydomain.com.key;

然后如果使用了pagespeed,则这两个很重要:

1
2
pagespeed SslCertDirectory /etc/letsencrypt/acme;
pagespeed SslCertFile /etc/letsencrypt/acme/fullchain.cer;

至此,整个安装配置过程都完成了,然后就可以撒手不管它自动续期(60天周期)

关于其他内容:

  1. 证书会60天周期自动更新续订
  2. acme.sh本身也要更新的,可以手动 ./acme.sh –upgrade 到最新版,也可以自动升级 ./acme.sh –upgrade –auto-upgrade,以及关闭 ./acme.sh –upgrade –auto-upgrade 0
  3. 详情请见官网 https://github.com/Neilpang/acme.sh

自签证书:

1
2
3
4
#生成私钥:
openssl ecparam -genkey -name prime256v1 -out ca.key
#生成证书:
openssl req -new -x509 -days 36500 -key ca.key -out ca.crt -subj "/CN=bing.com"