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
因为目前还没有使用过自动更新,所以不清楚还需不需要手动安装,请自行验证把。
(488)