ssl证书申请

安装acme.sh

acme.sh 是一个集成了 ACME 客户端协议的 Bash 脚本,按照官方文档说明,我们直接在 Linux 下安装。

curl https://get.acme.sh | sh -s email=username@example.com
#国内备用地址
curl https://gitcode.net/cert/cn-acme.sh/-/raw/master/install.sh?inline=false | sh -s email=my@example.com
#安装完重新加载环境变量
source ~/.bashrc
#开启自动更新
acme.sh --upgrade --auto-upgrade

替换username@example.com为自己的邮箱,避免无法收到邮件。

证书签发

手动签发

选择CA机构

目前 acme.sh 支持 5 个正式环境 CA,分别是 Let's Encrypt、Buypass、ZeroSSL、SSL.com和 Google Public CA,默认使用 ZeroSSL,如果需要更换可以使用如下命令:

切换 Let's Encrypt
acme.sh --set-default-ca --server letsencrypt
切换 Buypass
acme.sh --set-default-ca --server buypass
切换 ZeroSSL
acme.sh --set-default-ca --server zerossl
切换 SSL.com
acme.sh --set-default-ca --server ssl.com
切换 Google Public CA
acme.sh --set-default-ca --server google

申请证书

DNS认证方式

以cloudflare为例

acme.sh  --issue  --dns   -d *.hechunyu.com \
 --yes-I-know-dns-manual-mode-enough-go-ahead-please

命令执行后需要在DNS解析里添加一条TXT类型的解析记录

等待生效,一般几分钟内生效。

生效后再次申请

acme.sh  --renew  --dns   -d *.hechunyu.com \
 --yes-I-know-dns-manual-mode-enough-go-ahead-please

申请成功后,最后会打印出证书文件存放路径。

如果出现一直重试15秒的情况,更换另一个证书申请机构,重新申请。

使用api方式自动添加DNS解析记录

以cloudflare为例,申请api权限

我的个人资料,左侧 API令牌

创建令牌Token

权限为编辑,区域选择要申请的域名,ip筛选建议填上,填上之后只有该ip可以调用api

创建成功后记住API令牌Token 后边需要用到

获取Account ID和Zone ID

进入到域名管理页面,复制右侧两个id的值

在终端执行下边命令

export CF_Token="复制下来的 Token"
export CF_Account_ID="复制下来的 Account ID"
export CF_Zone_ID="复制下来的 Zone ID"
acme.sh --issue --dns dns_cf -d *.hechunyu.work

HTTP认证方式

server {
	listen 443 ssl;
	listen [::]:443 ssl;
	server_name ca.hechunyu.com;
	location /.well-known/acme-challenge {
		root /opt/openresty/nginx/html/letsencrypt;
	}
}

需要注意的是,http方式验证只支持申请固定域名证书,不支持泛域名证书,泛域名证书申请只能用DNS验证方式

执行命令,申请

-w参数为 配置文件里配置的路径

acme.sh --issue -d *.hechunyu.com -w /opt/openresty/nginx/html/letsencrypt

安装证书

acme.sh --install-cert -d *.hechunyu.com \
--key-file       /opt/openresty/nginx/conf/cert/hechunyu.com.key  \
--fullchain-file /opt/openresty/nginx/conf/cert/hechunyu.com.pem \
--reloadcmd     "nginx -s reload"

自动签发

#!/bin/bash
source ~/.bashrc

function acme_fan (){
  domain=$1
  acme.sh --set-default-ca --server letsencrypt
  if acme.sh --issue --dns dns_cf -d *.${domain} ;then
    acme.sh --install-cert -d *.${domain} \
    --key-file       /opt/openresty/nginx/conf/cert/${domain}.key  \
    --fullchain-file /opt/openresty/nginx/conf/cert/${domain}.pem \
    --reloadcmd     "nginx -s reload"
  else
    echo "${domain} 申请失败"
  fi
}


echo "尝试申请 *.chunyu.work"

export CF_Token="复制下来的 Token"
export CF_Account_ID="复制下来的 Account ID"
export CF_Zone_ID="复制下来的 Zone ID"

acme_fan chunyu.work

echo "尝试申请 *.hechunyu.com"

export CF_Token="复制下来的 Token"
export CF_Account_ID="复制下来的 Account ID"
export CF_Zone_ID="复制下来的 Zone ID"

acme_fan hechunyu.com


ssl证书申请
https://www.hechunyu.com/archives/sslzheng-shu-shen-qing
作者
chunyu
发布于
2023年08月27日
许可协议