Skip to main content

Certbot 签发一张单域名证书

准备工作

  • 将域名指向机器,关闭80端口的应用

  • 准备 docker 环境

Makefile

# 要求参数: 邮箱
EMAIL ?= XX@YY.com
# 要求参数: 域名
DOMAIN ?= XX.cn
# 要求参数: 输出SSL的目录名称
SSL_DIRNAME ?= ssl_${DOMAIN}

PWD = $(shell pwd)


# make ssl 生成 ssl
# 证书保存到本机当前目录/<域名名称> 下
.PHONY:ssl
ssl:
        rm -rf ${PWD}/${SSL_DIRNAME} && mkdir ${PWD}/${SSL_DIRNAME} && \
        docker run --rm -p 80:80 \
        -v ${PWD}/${SSL_DIRNAME}:/etc/letsencrypt/archive/${DOMAIN} \
        certbot/certbot \
        certonly \
        -n \
        --standalone \
        --agree-tos \
        -m ${EMAIL} \
        -d ${DOMAIN}


# make ssl-test 测试签发
.PHONY:ssl-test
ssl-test:
        docker run --rm -p 80:80 \
        certbot/certbot \
        certonly \
        -n \
        --standalone \
        --agree-tos \
        -m ${EMAIL} \
        -d ${DOMAIN} \
        --dry-run
参数 说明
-n 关闭交互式指令,传入后如果不是必须参数则不会询问输入 (Y/n)
--standalone 开启80端口服务器用于验证
--agree-tos 确认阅读服务条款
-m 邮箱
-d 待签发的域名
--dry-run 指定为测试环境,正式环境不能频繁签发,可以用此参数做自动化测试

用法

这种签发方式要开启80端口,签发时占用80端口的应用(如:Nginx、Httpd)要临时关闭。

测试签发

直接签发太频繁会被 certbot 禁用一周左右,建议先用测试签发检查会不会出错。

DOMAIN=<域名> EMAIL=<邮箱> make ssl-test

正式环境签发 (直接签发)

DOMAIN=<域名> EMAIL=<邮箱> make ssl

签发后,当前目录会生成 ssl_<域名>,里面即是证书。