Certd

Certd 是一款开源、免费、全自动申请和部署更新SSL证书的工具。
后缀d取自linux守护进程的命名风格,意为证书守护进程。

关键字:证书自动申请、证书自动更新、证书自动续期、证书自动续签、证书管理工具

一、特性

本项目不仅支持证书申请过程自动化,还可以自动化部署更新证书,让你的证书永不过期。

  • 全自动申请证书(支持所有注册商注册的域名)

  • 全自动部署更新证书(目前支持部署到主机、部署到阿里云、腾讯云等,目前已支持60+部署插件)

  • 支持通配符域名/泛域名,支持多个域名打到一个证书上

  • 邮件通知

  • 私有化部署,保障数据安全

  • 支持SQLite、Postgresql、MySQL数据库

二、一些说明

  • 本项目申请证书过程遵循acme协议

  • 需要验证域名所有权,一般有两种方式

    • http-01: 在网站根目录下放置一份txt文件

    • dns-01: 需要给域名添加txt解析记录,通配符域名只能用这种方式(本项目仅支持dns-01)

  • 证书续期:

    • 实际上没有办法不改变证书文件本身情况下直接续期或者续签。

    • 我们所说的续期,其实就是按照全套流程重新申请一份新证书,然后重新部署上去。

  • 免费证书过期时间90天,以后可能还会缩短,所以自动化部署必不可少

  • 设置每天自动运行,当证书过期前35天,会自动重新申请证书并部署

三、证书颁发机构对比

  • Let's Encrypt:申请最简单。

  • Google: 大厂光环,兼容性好,首次需要翻墙获取EAB。

  • ZeroSSL: 需要EAB,获取EAB无需翻墙。

demo在线体验

官方DEMO地址,自助注册后体验

https://certd.handsfree.work/

注意数据将不定期清理,不定期停止定时任务,生产使用请自行部署
包含敏感信息,务必自己本地部署进行生产使用

部署方式

  1. 宝塔面板方式部署

  2. 1Panel面板方式部署

  3. Docker方式部署

  4. 源码方式部署

群晖部署教程

新建文件夹 【certd】

打开Container Manager

新建项目【certd】复制以下代码创建 docker-compose

version: '3.3' # 兼容旧版docker-compose
services:
  certd:
    # 镜像    #  ↓↓↓↓↓ ---- 镜像版本号,建议改成固定版本号,例如:certd:1.29.0
    image: registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest
    container_name: certd # 容器名
    restart: unless-stopped # 自动重启
    volumes:
      #   ↓↓↓↓↓ ---------------------- 数据库以及证书存储路径,默认存在宿主机的/data/certd/目录下,【您需要定时备份此目录,以保障数据容灾】
      #   只要修改冒号前面的,冒号后面的/app/data不要动
      - /volume1/docker/certd:/app/data
    ports: # 端口映射
      #  ↓↓↓↓ ----------------------- 如果端口有冲突,可以修改第一个7001为其他不冲突的端口号,第二个7001不要动
      - "7001:7001"
      #  ↓↓↓↓ ----------------------- https端口,可以根据实际情况,是否暴露该端口
      - "7002:7002"
    #↓↓↓↓ --------------------------- 如果出现getaddrinfo ENOTFOUND错误,可以尝试设置dns
#    dns:
#      - 223.5.5.5      # 阿里云公共dns
#      - 223.6.6.6
#       # ↓↓↓↓ --------------------- 如果你服务器在腾讯云,可以用这个替换上面阿里云的公共dns
#      - 119.29.29.29  # 腾讯云公共dns
#      - 182.254.116.116
#       # ↓↓↓↓ -------------------- 如果你服务器部署在国外,可以用这个替换上面阿里云的公共dns
#      - 8.8.8.8       # 谷歌公共dns
#      - 8.8.4.4
#    extra_hosts:
#        # ↓↓↓↓ ------------------- 这里可以配置自定义hosts,外网域名可以指向本地局域网ip地址
#      - "localdomain.com:192.168.1.3"
#        #         ↓↓↓↓ ----------- 直接使用主机的网络,如果网络问题实在找不到原因,可以尝试打开此参数
#    network_mode: host
    labels:
      com.centurylinklabs.watchtower.enable: "true"
#    ↓↓↓↓ ------------------------- 启用ipv6网络,还需要把下面networks的注释放开
#    networks:
#      - ip6net
    environment:
#     设置环境变量即可自定义certd配置
#     配置项见: packages/ui/certd-server/src/config/config.default.ts
#     配置规则: certd_ + 配置项, 点号用_代替
#     #↓↓↓↓ ---------- 如果忘记管理员密码,可以设置为true,重启之后,管理员密码将改成123456,然后请及时修改回false
      - certd_system_resetAdminPasswd=false

#     默认使用sqlite文件数据库,如果需要使用其他数据库,请设置以下环境变量
#     注意: 选定使用一种数据库之后,不支持更换数据库。
#     数据库迁移方法:1、使用新数据库重新部署一套,然后将旧数据同步过去,注意flyway_history表的数据不要同步
#     #↓↓↓↓ --------------------- 使用postgresql数据库,需要提前创建数据库
#      - certd_flyway_scriptDir=./db/migration-pg                        # 升级脚本目录
#      - certd_typeorm_dataSource_default_type=postgres                  # 数据库类型
#      - certd_typeorm_dataSource_default_host=localhost                 # 数据库地址
#      - certd_typeorm_dataSource_default_port=5433                      # 数据库端口
#      - certd_typeorm_dataSource_default_username=postgres              # 用户名
#      - certd_typeorm_dataSource_default_password=yourpasswd            # 密码
#      - certd_typeorm_dataSource_default_database=certd                 # 数据库名

#     #↓↓↓↓ ----------- 使用mysql数据库,需要提前创建数据库 charset=utf8mb4, collation=utf8mb4_bin
#      - certd_flyway_scriptDir=./db/migration-mysql                     # 升级脚本目录
#      - certd_typeorm_dataSource_default_type=mysql                     # 数据库类型, 或者 mariadb
#      - certd_typeorm_dataSource_default_host=localhost                 # 数据库地址
#      - certd_typeorm_dataSource_default_port=3306                      # 数据库端口
#      - certd_typeorm_dataSource_default_username=root                  # 用户名
#      - certd_typeorm_dataSource_default_password=yourpasswd            # 密码
#      - certd_typeorm_dataSource_default_database=certd                 # 数据库名

#         ↓↓↓↓ ------------------  自动升级,上面certd的版本号要保持为latest
#  certd-updater:  # 添加 Watchtower 服务
#    image: containrrr/watchtower:latest
#    container_name: certd-updater
#    restart: unless-stopped
#    volumes:
#      - /var/run/docker.sock:/var/run/docker.sock
#    # 配置 自动更新
#    environment:
#      - WATCHTOWER_CLEANUP=true            # 自动清理旧版本容器
#      - WATCHTOWER_INCLUDE_STOPPED=false   # 不更新已停止的容器
#      - WATCHTOWER_LABEL_ENABLE=true       # 根据容器标签进行更新
#      - WATCHTOWER_POLL_INTERVAL=600       # 每 10 分钟检查一次更新


#    ↓↓↓↓ -------------------------- 启用ipv6网络,还需要把上面networks的注释放开
#networks:
#  ip6net:
#    enable_ipv6: true
#    ipam:
#      config:
#        - subnet: 2001:db8::/64

按照下图设置好,一直点击下一步。

等待镜像拉取完毕,项目构建完成,点击关闭即可。

访问测试

http://your_server_ip:7001
https://your_server_ip:7002
默认账号密码:admin/123456

记得修改密码

至于如何设置自动申请和部署证书,更新证书,等我后期出个详细教程!

结语

至此,你已经成功为群晖NAS部署了Certd自动化SSL证书更新工具!从此告别手动续期、过期宕机的烦恼,让HTTPS安全守护时刻在线。无论是个人博客还是企业服务,自动化运维都能为你的网络安全高效护航。

如果在实践中遇到问题,欢迎在评论区留言交流。如果本教程对你有所帮助,不妨点赞收藏支持,也欢迎分享给更多NAS爱好者。

我是阿狸鹿丫,一个业余爱瞎折腾的数码软件爱好者,技术小白。

the-end.webp