我如何使用 Lets 加密证书管理器和 Ha-proxy 负载均衡器?我需要在我的 SaaS 应用程序上实现自定义域功能服务。除了 SSL 之外一切正常。我该如何实现?使用 Haproxy 作为负载均衡器。
2 回答
试图定义步骤。从更大的脚本中减少,如果您有错误,请在此处写入以解决此问题。
先决条件:
- haproxy 已安装,例如这里:ip is 200.200.200.200
- 域 dns 已获取并定向到 haproxy,例如:test.com
- http 正在运行,如果它正在运行,那么整个网络链正在运行
- 安装了letsencrypt并使用帐户
- 可以停止 haproxy 并关闭网站
脚步:
清理 /etc/letsencrypt 中与 test.com 一起的旧文件夹
rm -rf *test.com*
停止代理
运行命令:
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
检查是否一切正常
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
创建文件夹 /etc/letsencrypt/live/www.test.com 和 etc/letsencrypt/live/test.com
创建存档文件的链接文件
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
- 将证书复制到 haproxy
cat fullchain.pem privatekey.pem > /etc/haproxy/ssl/test.com-fullchain.pem
www 也一样
- 添加 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 前端相同
- 重新启动 haproxy ,检查证书是否处于活动状态
要查看证书的到期日期:键入
openssl x509 -enddate -noout -in test.com-fullchain.pem
待办事项:未涉及如何更新脚本,希望将来这样做
这是一个可能的解决方案。在我看来更容易。它使用 Haproxy 社区和 Certbot 客户端。
在单独的服务器上安装 Certbot 客户端并开发 REST API 以与客户端交互。在这里,您将能够将您的应用程序与 Certbot 集成以生成证书。
在 HAproxy 服务器上创建一个目录来存储证书。在服务器上安装 NFS 并将此目录挂载到 Certbot 服务器上。使用 Certbot 生成证书时,部署到此挂载点。
为 Certbot 创建一个部署脚本,以便在部署新证书时重新加载 Haproxy 服务。
在 Certbot 服务器上安排任务,使其每天运行一次更新过程。
如果你不喜欢 Certbot 客户端,你可以自己开发一个客户端。我现在正在 Scala 中开发一个以与我的电子商务平台集成,这并不难。