原创, 服务器,

使用acme安装DV证书并自动更新,基于nginx服务器,支持多个域名

1.下载并安装 acme.sh。

1.1在线安装

#在线安装
curl https://get.acme.sh | sh
或
wget -O -  https://get.acme.sh | sh

1.2通过git安装

#通过git安装
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install

#此步骤可能需要你手动将 acme.sh 复制到 ~/.acme.sh/ 下
# 创建软链接 acme.sh=~/.acme.sh/acme.sh

一般情况下 acme.sh会每天凌晨检查正式是否过期并续期,如果不能还需要添加一个crontab每日命令

0 0 * * * "/home/user/.acme.sh"/acme.sh --cron --home "/home/user/.acme.sh" > /dev/null

2.生成证书前的准备工作

2.1域名必须能通过http正常访问。

因为创建过程会访问服务器特定地址,因此需要域名正常工作,在此基础上申请ssl证书。

2.2配置网站根目录。

单域名的直接使用网站配置的根目录就可以了, 多域名的建议为申请证书使用的 .well-know目录单独配置 。以下内容基于nginx服务器的配置。

给每个域名下的 .well-know路径配置通用的网站目录,保证 www-data 可读写。如下:

#nginx下访问带.well-know地址时使用
location /.well-known/ {
    root   /data/www/html; #多个域名都可以配置成相同的根目录
}

3.生成证书

如本站使用的获取证书命令, 其中添加了2个域名, 配置的网站目录为/data/www/html

acme.sh --issue -d windigniter.com -d blog.windigniter.com -w /data/www/html --force

如果上面操作显示成功,请直接跳至 4

可能有用户在使用此命令时仍然生成不成功,即使把 .well-known/acme-challenge目录都设置为777,仍然看到报没有权限

[Fri Jul 31 10:29:35 CST 2020] _currentRoot='/data/www/html'
[Fri Jul 31 10:29:35 CST 2020] wellknown_path='/data/www/html/.well-known/acme-challenge'
[Fri Jul 31 10:29:35 CST 2020] writing token:x8M66sqe6Fg_W5zWuN5HLmj_0CofX2_9RNdpM9ynHX4 to /data/www/html/.well-known/acme-challenge/x8M66sqe6Fg_W5zWuN5HLmj_0CofX2_9RNdpM9ynHX4
[Fri Jul 31 10:29:35 CST 2020] Changing owner/group of .well-known to www-data:www-data
[Fri Jul 31 10:29:35 CST 2020] chown: changing ownership of ‘/data/www/html/.well-known/acme-challenge/x8M66sqe6Fg_W5zWuN5HLmj_0CofX2_9RNdpM9ynHX4’: Operation not permitted
chown: changing ownership of ‘/data/www/html/.well-known/acme-challenge’: Operation not permitted
chown: changing ownership of ‘/data/www/html/.well-known’: Operation not permitted

如果使用sudo执行,记得把生成的文件还要移动到当前用户的目录下

sudo /home/cx/.acme.sh/acme.sh --issue -d windigniter.com -d blog.windigniter.com -w /data/www/html --force

#注意 此操作会把生成的文件存入到 /root/.acme.sh/下面的主域名下。
sudo mv /root/.acme.sh/windigniter.com /home/cx/.acme.sh/

4.安装证书

安装证书位置可以根据自己的实际情况配置对应路径,此路径需要和nginx配置证书路径一致。 以下是我配置的ssl路径。

acme.sh –install-cert -d windigniter.com –key-file /etc/nginx/ssl/windigniter.com.key –fullchain-file /etc/nginx/ssl/windigniter.com.cer

5.配置nginx使用证书,并设置端口

5.1先给需要使用ssl证书的server配置监听端口

server{
        listen       80;
        listen       [::]:80;
        listen       443 ssl http2;
        listen       [::]:443 ssl http2;
        server_name  windigniter.com www.windigniter.com;
        #ssl    on;
        ssl_certificate  /etc/nginx/ssl/windigniter.com.cer;
        ssl_certificate_key /etc/nginx/ssl/windigniter.com.key;
        #ssl_session_timeout 5m;
        #ssl_ciphers HIGH:!aNULL:!MD5;
        #nginx 1.13.0支持了TLSv1.3,TLSv1.3相比之前的TLSv1.2、TLSv1.1等性能大幅提升
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
        ssl_prefer_server_ciphers on;
        ssl_session_timeout 10m;
        location /.well-known/ {
                root   /data/www/html;
        }
}

多个域名每个子域名配置基本都相同,子域名依然使用的是 主域名的证书和key。

5.2多域名的时候一些配置可统一放置在 http中, 修改nginx.conf文件,设置缓存时间

http {
        # Path of the file with Diffie-Hellman parameters for EDH ciphers.
        #ssl_dhparam /etc/ssl/nginx/dh2048.pem;

        # Specifies that our cipher suits should be preferred over client ciphers.
        ssl_prefer_server_ciphers on;

        # Enables a shared SSL cache with size that can hold around 8000 sessions.
        ssl_session_cache builtin:1000 shared:SSL:10m;
...
}

6.更新证书

一般使用 acme.sh 不需要额外设置更新证书操作,系统会每天自动检查并更新。

如果需要手动更新,可以使用下面的命令:

sudo ~/.acme.sh/acme.sh –renew -d windigniter.com -d blog.windigniter.com –force –ecc

因为目前还没有使用过自动更新,所以不清楚还需不需要手动安装,请自行验证把。

(266)

Author Since: Jul 05, 2018

Related Post