bjdgyc / anylink

AnyLink是一个企业级远程办公 ssl vpn 软件,可以支持多人同时在线使用。基于 openconnect 协议开发,并且借鉴了 ocserv 的开发思路,可以完全兼容 AnyConnect 客户端。
GNU Affero General Public License v3.0
1.56k stars 375 forks source link

Let’s Encrypt申请证书的支持方式 #236

Closed itviewer closed 1 year ago

itviewer commented 1 year ago

在后台配置各个域名服务商的api key是个麻烦,难扩展,又危险的事情,免费证书申请除了添加解析记录,还可以先解析域名,在解析域名后的服务器上直接向Let’s Encrypt请求证书。

考虑应该类似 Caddy 那样全自动申请和更新证书,只需要用户自己解析域名到部署anylink的服务器,不需要额外配置域名服务商的api。

wsczx commented 1 year ago

Caddy可以做到用户只需要解析而不用提供api就给申请Let’s Encrypt证书吗?

itviewer commented 1 year ago

以下为演示步骤

  1. 随便找个有 443或80 端口的公网服务器
  2. 把你域名解析到这个服务器,确保解析已经生效,假设你域名为 anylink.pro
    
    wget https://github.com/caddyserver/caddy/releases/download/v2.6.4/caddy_2.6.4_linux_amd64.tar.gz
    tar -zxvf caddy_2.6.4_linux_amd64.tar.gz
    cat >Caddyfile <<EOF
    anylink.pro {
      file_server {
         root /root/site/ClientDownloadPage
      }
    }
    EOF

sudo ./caddy run


不用在什么地方配置域名服务商的api key,就这样一个 https 静态网站就搭好了,http 访问 80 自动跳转 https 443,3个月后证书自动续期。除了解析域名,别的什么配置都不需要。我自己就是用上述步骤搭建了 https://anylink.pro/

申请域名证书无非就是验证域名的所有权,通过域名注册商的 api 修改解析记录固然可以,但 api key 有泄露的安全隐患

其次是通过用户自己把域名解析到具有80或443端口的服务器(这对于网站来说不算问题),然后使用下述方式其一向 Let’s Encrypt 申请证书
https://advancedweb.hu/when-to-use-lets-encrypts-webroot-and-standalone-authorization/

多数的 ACME 客户端应该都支持上述模式,我只用过 [acme.sh](https://github.com/acmesh-official/acme.sh)

猜测原理:
用户自己解析域名到服务器,服务器搭建临时服务向 Let’s Encrypt 申请证书,Let’s Encrypt 通过已经解析好的域名回调这个临时服务,这足以证明你对该域名的所有权,因此给你返回证书。

这对网站应用不是问题,目前**不清楚** Let’s Encrypt 回调是否必须要服务器的 80或443,如果80或443被其它应用占用的话可能会有问题。
itviewer commented 1 year ago

这种方式可能需要 anylink 必须占用 80 端口?好像 api key 方式还是需要的

itviewer commented 1 year ago

https://letsencrypt.org/zh-cn/docs/allow-port-80/

根据描述,可以使用3种方式验证

对于 anylink 不能使用 80和443 的情形,还是需要 dns 来验证,如果用户的 anylink 允许使用 80或者443,可以避免使用域名注册商的api key

itviewer commented 1 year ago

直接开放80、443的用户多么?我感觉不会太多,有必要把http验证方式集成进去吗?

算了吧,有精力就折腾,没精力就这样吧,我自己搭vpn 因为服务器上有网站,所以不能用443,不知道企业用户会不会都是这种情形,企业用户搭 vpn 不用443的话,那确实只能用dns验证

wsczx commented 1 year ago

好像不需要80、443也可以,但是我确实没有测试过,后面我试试看

wangwanjie commented 7 months ago

直接开放80、443的用户多么?我感觉不会太多,有必要把http验证方式集成进去吗?

算了吧,有精力就折腾,没精力就这样吧,我自己搭vpn 因为服务器上有网站,所以不能用443,不知道企业用户会不会都是这种情形,企业用户搭 vpn 不用443的话,那确实只能用dns验证

haproxy 了解一下