编程随笔 编程随笔
  • 前端
  • 后端
  • 嵌入式
  • 星球项目
  • 开源项目
  • 海康AGV
  • 四向车
  • 工具类
  • 项目仓库

    • 部署仓库 (opens new window)
    • 代码仓库 (opens new window)
  • vuepress插件

    • 自动生成导航栏与侧边栏 (opens new window)
    • 评论系统 (opens new window)
    • 全文搜索 (opens new window)
    • 选项卡 (opens new window)
    • 自动生成sitemap (opens new window)
  • 自主开发插件

    • 批量操作frontmatter (opens new window)
    • 链接美化 (opens new window)
    • 折叠代码块 (opens new window)
    • 复制代码块 (opens new window)

liyao52033

走运时,要想到倒霉,不要得意得过了头;倒霉时,要想到走运,不必垂头丧气。心态始终保持平衡,情绪始终保持稳定,此亦长寿之道
  • 前端
  • 后端
  • 嵌入式
  • 星球项目
  • 开源项目
  • 海康AGV
  • 四向车
  • 工具类
  • 项目仓库

    • 部署仓库 (opens new window)
    • 代码仓库 (opens new window)
  • vuepress插件

    • 自动生成导航栏与侧边栏 (opens new window)
    • 评论系统 (opens new window)
    • 全文搜索 (opens new window)
    • 选项卡 (opens new window)
    • 自动生成sitemap (opens new window)
  • 自主开发插件

    • 批量操作frontmatter (opens new window)
    • 链接美化 (opens new window)
    • 折叠代码块 (opens new window)
    • 复制代码块 (opens new window)
  • 常用软件

    • vuepress-plugin-element-ui
    • pandoc使用
    • meilisearch部署
    • cloudreve部署
    • zabbix部署
    • 常用网址
    • git使用
    • 安装 acme.sh
      • 安装 acme.sh
      • 账号注册
      • 生成证书
      • 安装和配置 SSL 证书
      • 自动更新acme
      • 自动安装到nginx路径
      • 常见问题
    • 中央仓库上传指南
  • 工具类
  • 常用软件
华总
2024-08-29
0
0
目录

安装 acme.sh原创

ACME(自动证书管理环境)是一个互联网工程任务组维护的协议,它允许自动化 Web 服务器证书的部署,acme.sh (opens new window) 是支持 ACME 协议流行的客户端之一,可以通过其实现 SSL 证书的自动申请、续期等。本文将为您介绍如何使用 acme.sh 自动申请证书。

# 安装 acme.sh

# 全新安装

适用于未安装 acme.sh 的用户,使用以下命令安装 acme.sh 客户端:

curl https://get.acme.sh | sh -s email=my@example.com
1

或者:

wget -O -  https://get.acme.sh | sh -s email=my@example.com
1

说明

请将 my@example.com 替换为您的邮箱地址

然后稍等片刻,如下图,出现Install success 的提示表示安装成功了。通过安装日志,可以看到安装目录,并且还看到创建一个 cron job,这个job就是自动更新证书的定时任务。

图片

还有一种克隆仓库的安装方式。

git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install
1
2
3

安装位置在这里,也就是当前用户home目录中。

Installing to /root/.acme.sh
Installed to /root/.acme.sh/acme.sh
Installing alias to '/root/.bashrc'
1
2
3

# 旧版升级

适用于已安装 acme.sh 的用户,请运行以下命令升级 acme.sh 客户端:

acme.sh --upgrade
1

# 将 acme.sh注册为全局命令

要使 acme.sh 命令在全局范围内可用,可以创建一个符号链接,将 acme.sh 脚本链接到 /usr/local/bin/ 目录中。这样,你可以在任何地方使用 acme.sh 命令。

执行以下命令创建符号链接:

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

验证 acme.sh 是否已成功注册为全局命令

acme.sh --version
1

如果 acme.sh 已正确安装并注册为全局命令,上述命令会显示 acme.sh 的版本信息。

# 账号注册

初次使用,可能需要注册账号,一个邮箱即可(此步可先跳过,等到执行具体命令时如果提示,再注册不迟)

acme.sh --register-account -m example.com
1

acme 默认使用的是 ZeroSSL,但是 ZeroSSL 不是很稳定,如果可能的话,可以切换到letsencrypt,当然了,不切换也无所谓。

acme.sh  --set-default-ca --server letsencrypt
1

登录变量将被保存~/.acme.sh/account.conf并在需要时重新使用。

# 生成证书

有两种方式生成证书,一种是 HTTP 方式,另一种是 DNS 方式。

比较推荐使用 DNS 方式,域名不用备案,而且可以自动更新续期。

# HTTP 方式

下面这个命令是 HTTP 方式,-d 后面是域名,--webroot 后面是网站根目录。这种方式会在你的服务器根目录生成一个验证文件,然后通过80端口访问

但是先别着急执行啊,这种方式在国内有个问题,就是你的域名必须要先备案,要不然 80 端口会被工信部的未备案提示页面拦截,导致没办法生成证书。

所以域名在国内或者服务器在国内,最好还是别用这种方式。

acme.sh --issue -d example.com --webroot /web/
1

# DNS 方式和自动更新

在acme.sh的github (opens new window) ,可以看到所支持的域名供应商,只要能在这里面找到的,都支持 DNS 方式验证,基本上市面上你能买到域名的地方都可以用这种方式,阿里云、华为云、腾讯云等等都在其中,里面有具体的参数说明。

以腾讯云为例,首先根据腾讯云官方文档 (opens new window)获取腾讯云 SecretId 和 SecretKey,然后将这两个值导入环境变量。

export Tencent_SecretId="<Your SecretId>"
export Tencent_SecretKey="<Your SecretKey>"
1
2

之后再执行生成证书的命令

acme.sh --issue --dns dns_tencent -d xiaoying.org.cn -d *.xiaoying.org.cn
1

或者

acme.sh --issue -d xiaoying.org.cn  -d '*.xiaoying.org.cn'  --dns dns_cf
1

执行这个命令后,acme.sh 将尝试生成一个包含所有这些域名的SSL/TLS证书。这意味着你将得到一个证书,而不是两个单独的证书。这个证书将允许你使用单个证书来保护 xiaoying.org.cn 及其所有子域名,并保存在~/.acme.sh/example.com/目录下,并且会自动为您的域名配置证书自动续期任务,无需手动续期。

# 安装和配置 SSL 证书

注意

acme.sh 不建议直接使用~/.acme.sh/目录下的证书文件,而是通过 acme.sh 提供的命令将证书安装到指定位置,以确保证书的正确使用和续期,详情请参见 Install the cert to Apache/Nginx etc (opens new window),以下以 Nginx 为例。

申请多个证书时每个创建单独的文件夹存放,以免不同域名的fullchain.cer相互覆盖,只保留最后生成的那个造成证书不匹配的报错

[root@VM-4-16-centos nginx]# nginx -t
nginx: [emerg] SSL_CTX_use_PrivateKey("/etc/nginx/xiaoying.org.cn.key") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
1
2
acme.sh --install-cert  -d xiaoying.org.cn  \
--key-file       /etc/nginx/xiaoying.org.cn.key  \
--fullchain-file  /etc/nginx/fullchain.cer \
--reloadcmd     "service nginx force-reload"
1
2
3
4

完成申请后请将证书配置到您的网站中,以 Nginx 为例,示例如下:

server {
    listen 443 ssl http2;

    server_name example.com;

    # 请替换为证书实际路径
    ssl_certificate /etc/nginx/fullchain.cer;
    ssl_certificate_key /etc/nginx/xiaoying.org.cn.key;

    ssl_session_timeout 5m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
    ssl_prefer_server_ciphers off;
    ssl_prefer_server_ciphers on;
    location / {
        root /nginx/www/html;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

注意

完成后使用systemctl restart nginx请重载服务。

# 自动更新acme

现在证书已经可以自动更新了,但是 acme 还没有。因为各个免费 SSL 证书平台的规则不是一成不变的,随着他们的更新,acme也会相应的修改规则。

所以,你可以在服务器上执行下面的命令,设置acme 自动升级,保证可用性。

acme.sh --upgrade --auto-upgrade
1

# 自动安装到nginx路径

在/root下新增renew_cert.sh,内容如下

#!/bin/bash

# 加载 acme.sh 的环境变量
. /root/.acme.sh/account.conf

# 请求新的证书
"/root/.acme.sh"/acme.sh --issue --dns dns_tencent -d xiaoying.org.cn -d *.xiaoying.org.cn

# 安装并更新证书
"/root/.acme.sh"/acme.sh --install-cert -d xiaoying.org.cn \
--key-file /etc/nginx/xiaoying.org.cn.key \
--fullchain-file /etc/nginx/fullchain.cer \
--reloadcmd "service nginx force-reload"


# 重启nginx
systemctl restart nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

然后新建定时任务crontab -e,内容如下

# 安装acme自动添加的
40 18 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

# 自动执行安装到nginx路径
00 19 * * * /root/renew_cert.sh > /dev/null
1
2
3
4
5

# 常见问题

# 1、端口被占用

检查是否有重复的 NGINX 实例

有时候,重复启动多个 NGINX 实例可能导致端口冲突。你可以使用以下命令检查 NGINX 是否已经在运行

ps aux | grep nginx
1

如果有多个 NGINX 实例在运行,可以通过下列指令来结束所有 NGINX 进程

pkill nginx 
1

# 2、查看申请证书列表

acme.sh --list
1

# 3、修改 Nginx 服务的重启命令

vi /usr/lib/systemd/system/nginx.service
1

在文件中找到 ExecReload 行。它应该看起来像这样:

ExecReload=/usr/sbin/nginx -s reload
1

将 ExecReload 行修改为使用 systemctl 来重启服务:

ExecReload=/bin/systemctl restart nginx
1

:wq保存并关闭文件。

为了使更改生效,重新加载 systemd 管理器配置:

systemctl daemon-reload
1

# 4、删除证书

acme.sh  --remove  -d example.com
1
#ssl
上次更新: 2025/03/23 15:42:56
git使用
中央仓库上传指南

← git使用 中央仓库上传指南→

最近更新
01
jFlash使用 原创
03-24
02
中央仓库上传指南 原创
03-23
03
模板生成工具 原创
02-18
04
RTC实时时钟 原创
02-12
05
keil调试 原创
01-21
更多文章>
Copyright © 2023-2025 liyao52033  All Rights Reserved
备案号:鄂ICP备2023023964号-1    
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式