前言

申请SSL证书,保证域名能使用HTTPS访问

Acme 脚本申请证书

环境安装(Debian/Ubuntu或CentOS)

  1. Debian/Ubuntu命令
    1
    2
    3
    apt update -y
    apt install -y curl
    apt install -y socat
  2. CentOS命令
    1
    2
    3
    yum update -y
    yum install -y curl
    yum install -y socat

安装 Acme 脚本

1
curl https://get.acme.sh | sh

xxx@xxx.com 填写自己的邮箱

1
~/.acme.sh/acme.sh --register-account -m xxx@xxx.com

验证申请

下面代码中的 xxx.com 均为自己申请并解析过的域名
(复制的时候,别忘记改成自己的!!!!!!!!)
下面验证申请 我在这里使用的 方式1

方式1:监听80 端口验证(已测试)

执行下面这条命令前,保证80端口没有被占用(例如nginx),Acme.sh伪装成 WebServer,临时监听在 80 端口,进行验证。验证完后,80端口会自动再次空闲出来。
注意:一定要把80端口空闲出来,有nginx的 先把nginx关了 (pkill -9 nginx)

1
~/.acme.sh/acme.sh --issue -d www.xxx.com --standalone

方式2:Nginx方式验证

执行下面这条命令前,保证Nginx的配置文件已经配置好自己解析过的域名,并已启动Nginx

1
~/.acme.sh/acme.sh --issue -d www.xxx.com --nginx

方式3:HTTP方式验证

执行下面这条命令前,保证解析过域名能正常访问
原理:Acme 自动在你的网站根目录下放置一个文件,这个文件被互联网访问,来验证你的域名所有权,完成验证,然后生成证书

1
~/.acme.sh/acme.sh --issue -d xxx.com -d www.xxx.com  --webroot  /home/cert/

安装证书到指定文件夹

生成的证书+秘钥 都默认在Acme的安装目录下的:~/.acme.sh/
不要直接使用证书+秘钥,先把证书+秘钥移动到其他位置
使用 --install-cert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置
如下:将证书+秘钥,移动到 /root 目录下

注意!!!
这个存放这俩文件的路径(/home/cert/private.key/home/cert/cert.crt ),可以换其他路径,文件也可以换成其他名字,但必须和Nginx配置中的一致!!

1
~/.acme.sh/acme.sh --installcert -d www.xxx.com --key-file /home/cert/private.key --fullchain-file /home/cert/cert.crt

更新 Acme 脚本

目前由于 acme 协议和 letsencrypt CA 都在频繁的更新,因此 Acme.sh 也经常更新以保持同步;

始终保持 Acme.sh 保持最新版本;

手动升级:

1
~/.acme.sh/acme.sh --upgrade

自动升级
1
~/.acme.sh/acme.sh --upgrade --auto-upgrade

关闭自动升级
1
~/.acme.sh/acme.sh --upgrade  --auto-upgrade  0

Nginx配置SSL

保证Nginx已安装。并且已经安装SSL(http_gzip_static_module)模块,并能正常使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
server {
listen 80;
# 替换成自己的域名
server_name xxx.com www.xxx.com;
# 统一指向https协议
rewrite ^(.*) https://$server_name$1 permanent;
}

server {
# 服务器端口使用443,开启ssl, 这里ssl就是上面安装的ssl模块
listen 443 ssl;
# 域名,多个以空格分开,替换成自己的域名
server_name xxx.com www.xxx.com;

# ssl证书地址
# pem文件的路径,替换成自己的证书路径
ssl_certificate /home/cert/cert.crt;
# key文件的路径,替换成自己的秘钥路径
ssl_certificate_key /home/cert/private.key;

# ssl验证相关配置
# 缓存有效期
ssl_session_timeout 5m;
# 加密算法
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#安全链接可选的加密协议
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#使用服务器端的首选算法
ssl_prefer_server_ciphers on;

location / {
root html;
index index.html index.htm;
}
}

自动更新SSL证书

证书目前会90天以后会自动更新,避免每次过期都需要手动去更新
为了节省效率,配置自动更新SSL证书有效期
反正博主我设置自动更新,失败了~~~ 最后还是手动去更新~~

手动更新新SSL证书

命令依次如下,基本还是重复上面的步骤二、三、四
注意:
1.如果监听80端口的方式,记得先把80服务杀死,再执行下面命令
2.邮箱、域名、存放路径

1
2
3
4
5
~/.acme.sh/acme.sh --register-account -m xxx@xx.com

~/.acme.sh/acme.sh --issue -d www.xxx.com --standalone

~/.acme.sh/acme.sh --installcert -d www.xxx.com --key-file /home/cert/private.key --fullchain-file /home/cert/cert.crt