1Panel证书申请报错acme:error:403::urn:ietf:params:acme:error:unauthorized

之前通过阿里云申请的SSL免费证书(1年)到期了,想着如果每年都要手动上传KEY/PEM信息会有些麻烦,不如使用1Panel自带的证书申请+自动续签好了。于是尝试将某二级域名也替换成Let’s Encrypt免费证书

结果以HTTP形式连着申请了两次都失败了,报错信息如下:

1
2
3
4
5
6
7
8
9
2024/09/09 16:20:37 开始申请证书,域名 [***.youdiandongxi.com] 申请方式 [HTTP] 
2024/09/09 16:20:37 [INFO] [***.youdiandongxi.com] acme: Obtaining bundled SAN certificate
2024/09/09 16:20:37 [INFO] [***.youdiandongxi.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/************
2024/09/09 16:20:37 [INFO] [***.youdiandongxi.com] acme: Could not find solver for: tls-alpn-01
2024/09/09 16:20:37 [INFO] [***.youdiandongxi.com] acme: use http-01 solver
2024/09/09 16:20:37 [INFO] [***.youdiandongxi.com] acme: Trying to solve HTTP-01
2024/09/09 16:20:41 [INFO] Deactivating auth: https://acme-v02.api.letsencrypt.org/acme/authz-v3/************
2024/09/09 16:20:42 申请 [***.youdiandongxi.com] 证书失败, error: one or more domains had a problem:
[***.youdiandongxi.com] acme: error: 403 :: urn:ietf:params:acme:error:unauthorized :: **.**.**.**: Invalid response from ....

最开始以为是申请的证书达到上限了,去Let’s Encrypt官网文档查阅了一番并没有看到有注册量上限,只有以下几种情况会报错:

  1. 所有签发请求均受每周 5 个重复证书的限制;
  2. 所有颁发请求都受到每个帐户、每个主机名、每小时 5 次失败的验证失败限制;
  3. 一个 IP 地址每 3 个小时最多可注册 10 个账户

上述情况都没有针对累计证书数量做限制,又在1Panel的官方Github仓库找到了这个issues:

[FEATURE] 申请证书体验优化 #1621,其中有个回复是修改nginx配置(经我查看配置已经是正确的)

评论区有人测试可行,但我的配置已经是调整后的了评论区有人测试可行,但我的配置已经是调整后的了

再查看错误信息error: 403 :: urn:ietf:params:acme:error:unauthorized403?unauthorized?突然想起来这个二级域名是我自己调试项目使用的,给它开启了HTTP Basic Authentication,每次登录时需要输入设置的用户名及密码!

登录验证示例登录验证示例

于是我尝试关闭了1Panel网站自带的密码访问功能。

当我发现可能是这个原因后,迅速关闭了密码访问当我发现可能是这个原因后,迅速关闭了密码访问

再次尝试后,申请成功!


拓展问题:如何在HTTP Basic Authentication中排除SSL续签目录?

因为1Panel的证书可以自动续签,如果开启了HTTP Basic Authentication,下次SSL续签访问该目录仍会被阻止导致申请失败!在与AI进行了友好交流之后,发现按以下配置项进行配置,可以解决该问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
...

# 网站主目录设置“密码认证”
location / {
auth_basic "Authentication";
auth_basic_user_file /***/***.pass;

root /***/***;
}

# 续签验证目录单独设置,不走“密码认证”
location ^~ /续签验证目录 {
allow all;
root /***/***;
}

...
}

评论区