0

我如何使用 Lets 加密证书管理器和 Ha-proxy 负载均衡器?我需要在我的 SaaS 应用程序上实现自定义域功能服务。除了 SSL 之外一切正常。我该如何实现?使用 Haproxy 作为负载均衡器。

4

2 回答 2

0

试图定义步骤。从更大的脚本中减少,如果您有错误,请在此处写入以解决此问题。

先决条件:

  1. haproxy 已安装,例如这里:ip is 200.200.200.200
  2. 域 dns 已获取并定向到 haproxy,例如:test.com
  3. http 正在运行,如果它正在运行,那么整个网络链正在运行
  4. 安装了letsencrypt并使用帐户
  5. 可以停止 haproxy 并关闭网站

脚步:

  1. 清理 /etc/letsencrypt 中与 test.com 一起的旧文件夹rm -rf *test.com*

  2. 停止代理

  3. 运行命令:

    certbot certonly --standalone --preferred-challenges http --http-01-port 80 -d test.com

    certbot certonly --standalone --preferred-challenges http --http-01-port 80 -d www.test.com

  4. 检查是否一切正常

    root@200.200.200.200:/etc/letsencrypt/renewal# cat www.test.com.conf

应该:

#renew_before_expiry = 30 days
version = 0.22.2
archive_dir = /etc/letsencrypt/archive/www.test.com
cert = /etc/letsencrypt/live/www.test.com/cert.pem
privkey = /etc/letsencrypt/live/www.test.com/privkey.pem
chain = /etc/letsencrypt/live/www.test.com/chain.pem
fullchain = /etc/letsencrypt/live/www.test.com/fullchain.pem

# Options used in the renewal process
[renewalparams]
http01_port = 80
installer = None
pref_challs = http-01,
account = YOUR_ACCOUNT
authenticator = standalone
  1. 创建文件夹 /etc/letsencrypt/live/www.test.com 和 etc/letsencrypt/live/test.com

  2. 创建存档文件的链接文件

ln -s ../../archive/test.com/cert1.pem cert.pem
ln -s ../../archive/test.com/chain1.pem chain.pem
ln -s ../../archive/test.com/fullchain1.pem fullchain.pem
ln -s ../../archive/test.com/privkey1.pem privatekey.pem
  1. 将证书复制到 haproxy cat fullchain.pem privatekey.pem > /etc/haproxy/ssl/test.com-fullchain.pem

www 也一样

  1. 添加 haproxy 一个 ssl 前端
frontend test_com_ssl
  bind *:443 ssl crt /etc/haproxy/ssl/ ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

  default_backend test_com

后端可以与 http 前端相同

  1. 重新启动 haproxy ,检查证书是否处于活动状态

要查看证书的到期日期:键入

openssl x509 -enddate -noout -in test.com-fullchain.pem

待办事项:未涉及如何更新脚本,希望将来这样做

于 2020-01-11T18:15:26.597 回答
0

这是一个可能的解决方案。在我看来更容易。它使用 Haproxy 社区和 Certbot 客户端。

  1. 在单独的服务器上安装 Certbot 客户端并开发 REST API 以与客户端交互。在这里,您将能够将您的应用程序与 Certbot 集成以生成证书。

  2. 在 HAproxy 服务器上创建一个目录来存储证书。在服务器上安装 NFS 并将此目录挂载到 Certbot 服务器上。使用 Certbot 生成证书时,部署到此挂载点。

  3. 为 Certbot 创建一个部署脚本,以便在部署新证书时重新加载 Haproxy 服务。

  4. 在 Certbot 服务器上安排任务,使其每天运行一次更新过程。

如果你不喜欢 Certbot 客户端,你可以自己开发一个客户端。我现在正在 Scala 中开发一个以与我的电子商务平台集成,这并不难。

于 2020-01-11T03:47:42.187 回答