【问题标题】:SSL for SaaS application用于 SaaS 应用程序的 SSL
【发布时间】:2020-04-27 18:01:48
【问题描述】:

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

【问题讨论】:

    标签: haproxy lets-encrypt saas haproxy-ingress


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 它在我使用 test.com 和 www.test.com 时工作。但是当我通过添加 CNAME 以 www.example.com 访问 www.test.com 时,出现 SSL 问题。在我的 haproxy 中有acl host_star hdr_end(host) -i .test.com。如果我使用 CNAME,我需要添加 acl,如 acl host_star hdr_end(host) -i .example.com 在使用letsencrypt创建ssl时验证DNS。每个cnew自定义域,我需要更新haproxy上的acl以创建ssl。如何我能解决吗?
    • 所有域名都必须作为主体替代名称包含在证书中。
    • Fagunde 我可以创建多个ssl而不在haproxy上配置多个服务器名称吗?否则我需要在创建免费ssl之前在haproxy配置文件中添加每个域名。
    • 不确定我是否理解您的问题,但如果您有多个证书文件,您可以将它们放在一个目录中。每个证书文件名都必须包含域名。然后您可以配置 haproxy 以从该目录读取证书。如果这是您正在寻找的,请告诉我,我可以为您提供一个示例配置文件。
    • bold 前端 https-in: bind *:443 ssl crt-list /etc/ssl/private/crt-list.txt bold 喜欢我已经做到了。但是当我创建多个 ssl 时面临问题。例如,如果我在 nginx 上创建 ssl。我需要在 virtualhost.SAme 中配置与 haproxy 相同的域,我需要在 haproxy config 上配置特定的域名。否则 ssl 没有创建。怎么能我解决了吗?
    【解决方案2】:

    试图定义步骤。由较大的脚本缩减而来,如果您有错误,请在此处写入以解决此问题。

    先决条件:

    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. 停止 haproxy

    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

    待办事项: 没有介绍如何更新脚本,希望将来这样做

    【讨论】:

    • 当我使用 test.com 和 www.test.com 时它可以工作。但是当我以 身份访问 www.test.com 时www.example.com 通过添加 CNAME,获取 SSL 问题。在我的 haproxy 中有 acl host_star hdr_end(host) -i .test.com。如果我使用 CNAME,我需要添加像 acl host_star hdr_end(host) -i .example.com 这样的 acl 以在使用letsencrypt 创建 ssl 时验证 DNS
    • ssl 只能用于 www.test.com ,不能用于 www.example.com 。您需要为 www.example.com 运行所有步骤,每个站点都有自己的证书,确实有涵盖多个站点的特殊证书,但不是来自letsencrypt。很高兴我帮了忙。请将答案标记为响应
    猜你喜欢
    • 2017-03-06
    • 2013-11-07
    • 1970-01-01
    • 2012-05-28
    • 2011-01-29
    • 2012-12-29
    • 1970-01-01
    • 2011-09-20
    • 2020-08-01
    相关资源
    最近更新 更多