【问题标题】:How to set up Openshift with let's encrypt (letsencrypt)如何使用 let's encrypt (letsencrypt) 设置 Openshift
【发布时间】:2026-01-10 05:05:01
【问题描述】:

如何设置 Openshift 应用以使用 let's encrypt ?

NB Openshift 不适用于简单的 python webserver 方法来连接服务器,您需要使用正确的端口并绑定到正确的 IP 地址。此外,app/gear 不需要有 html 根目录。

(我将在下面发布答案的问题。)

【问题讨论】:

标签: openshift lets-encrypt


【解决方案1】:

首先,vote here 以便 OpenShift 将“让我们加密”作为优先事项。

我的步骤将适用于 Django 应用程序,但只需稍作更改,您就可以使它们在任何 OpenShift 设备上运行。
在您的 localhost/notebook/pc 上生成证书:

  1. git clone https://github.com/letsencrypt/letsencrypt 到您的本地计算机。
  2. cd letsencrypt
  3. ./letsencrypt-auto -a manual -d example.com -d www.example.com
    现在将要求您确认您的域所有权。
  4. 在您的应用中,确保 example.com/.well-known/acme-challenge/{some hash} 返回所需的哈希值。在 django 中,您可以将此行添加到 urls.py:

    url(r'^.well-known/acme-challenge/.*', views.https_confirmation, name="https_confirmation"),
    

    这个给view.py:

    def https_confirmation(request):
        if request.META['HTTP_HOST'] == 'www.example.com':
            return HttpResponse("fqTGI3nUiYnelm...", content_type="text/plain")
        else: #naked domain example.com
            return HttpResponse("HASH pre example.com", content_type="text/plain")
    

    如果您的 acme 确认页面未显示,请重新启动 OpenShift 应用。

  5. 只需将创建的证书/etc/letsencrypt/archive/example.com 上传到 OpenShift Web 控制台。 Fullchain.pem 作为 SSL 证书privkey.pem 作为 证书私钥

就是这样,现在您应该在 ssllabs.com 上获得 A 评级。
此外,要要求 Django 应用程序使用 HTTPS,请设置这些:

  1. settings.py:

    if not DEBUG:
        SESSION_COOKIE_SECURE = True
        CSRF_COOKIE_SECURE = True`
    
  2. 创建文件wsgi/.htaccess 并将这些行放在那里:

    RewriteEngine on
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    
  3. 为 WSGI 启用 HTTPS - 在文件 wsgi/application 中:

    # make django aware that SSL is turned on
    os.environ['HTTPS'] = "on"
    

    应该就是这样了 :) 更新证书时需要重复这些步骤,因此每 90 天(60 天更好,这样您就不会在最后一天遇到问题)。这是非常烦人的步骤,所以希望(和vote)OpenShift 将很快实现 Letsencrypt!

【讨论】:

    【解决方案2】:

    Lucus03 的回答很好,我只是想添加一个一般性评论。

    假设 您至少有一个允许自定义域的青铜级 Openshift 帐户。 这工作正常,您可以访问您的网站(没有 https)。 http://www.testdomain.com

    我们需要遵循手动流程。 像我这样刚接触证书的人可能对一般概念不太清楚。

    Let's Encrypt 需要在颁发证书之前确认您控制了域。 这意味着将临时文件放在托管您网站的服务器上。 Let's Encrypt 然后检查这些并颁发证书。

    在手动过程中,临时文件首先下载到您的本地电脑。 然后您手动将文件放在服务器上的正确位置。 这些文本文件必须可以通过您的站点查看,否则该过程将失败。

    由于使用 Openshift 的应用程序种类繁多,您将看到不同的软件堆栈 用过的。 例如 http://velin-georgiev-blog.appspot.com/blog/details/5707532110659584 指的是 Flask How to set up Openshift with let's encrypt (letsencrypt) by Lucas03 Django

    如果您可以使用浏览器在 www.testdomain.com 上显示临时文件,您可能可以忽略软件堆栈并坚持使用您所知道的。

    【讨论】:

      【解决方案3】:

      假设应用程序名为 https 并且证书的域名名为 www.example.com

      首先(如果尚未完成)安装 rhc 工具,https://developers.openshift.com/en/managing-client-tools.html

      第二次(如果尚未完成)通过您的 DNS 提供商设置 CNAME 记录 - 在 developers.openshift.com/en/managing-domains-ssl.html 在之前测试 www.example.com (http) 是否正常工作并指向您的 openshift 应用程序。

      第三 登录您的应用程序

      rhc ssh -a https
      

      从应用程序中,安装 Simple Let's Encrypt Client 并更新一些所需的 python 包

      pip install git+https://github.com/kuba/simp_le
      pip install --upgrade six
      pip install --upgrade setuptools
      

      现在停止应用程序(齿轮)设置一个 python2 网络服务器,它具有正确的端口和正确的 IP。 [$OPENSHIFT_PYTHON_IP & OPENSHIFT_PYTHON_PORT]

      (注意这是 python 3.4 中的一行, python -m http.server $OPENSHIFT_PYTHON_PORT --bind $OPENSHIFT_PYTHON_IP 但是在撰写本文时openshift只有python 3.2或python 2。所以需要一个简单的python 17行脚本)

      gear stop
      mkdir -p /tmp/http/.well-known/acme-challenge
      cd /tmp/http
      wget https://gist.githubusercontent.com/bmsleight/bc34254eed0ee458738e/raw/61110fe6e3980f0c6a401acae93f221f56b1eced/simple_acme_server.py
      python2 simple_acme_server.py &
      

      转到数据目录作为存储证书的好地方,让 simp_le 发挥它的魔力

      cd ~/app-root/data/
      simp_le --email example@example.com -f account_key.json   -f fullchain.pem -f key.pem   -d www.example.com --default_root /tmp/http 
      

      假设没有错误,停止 python2 网络服务器,重新启动应用程序/齿轮并退出 openshift 服务器

      killall python2
      gear start
      exit
      

      第四次 证书和密钥的上传必须在应用程序之外完成,因此从您的本地计算机上获取副本然后上传它们(是的 scp 是错误的方式 - RTFM)

      rhc scp -a https download ./ ./app-root/data/fullchain.pem
      rhc scp -a https download ./ ./app-root/data/key.pem
      rhc alias update-cert https www.example.com --certificate fullchain.pem --private-key key.pem
      

      第五 在letsencrypt.org表达爱意

      【讨论】:

      • 很好的答案,但我认为为具有不同名称的应用程序执行此操作会更清楚。将应用命名为 https 并使用协议 https 会造成不必要的混乱。
      • 有没有办法在服务器端设置证书和密钥? rhc alias update-cert 在服务器端不起作用。
      • 除非订阅了“青铜”计划,否则它不起作用。 johnc 回答的“假设”中提到了这一点。
      【解决方案4】:

      上面的答案是正确的,但有些复杂。我在下面找到了最简单的答案,请尝试一下。参考Let’s Encrypt on OpenShift

      假设你已经让我们加密,创建一个新文件夹,说“ssl”。在“ssl”文件夹中创建配置、工作和日志目录。然后运行letsencrypt 命令。

      $ mkdir ssl
      $ cd ssl
      $ mkdir config work logs
      $ letsencrypt --text --email name@email.com --domains www.mydomain.com,mydomain.com,foo.mydomain.com --agree-tos --renew-by-default --manual certonly --config-dir ./config/ --work-dir ./work/ --logs-dir ./logs/
      

      它指示将文件上传到您的 openshift 部署。上传后,您可以继续操作,证书将供您使用。好,易于。

      另外,请确保您的端点部署在“http”协议而不是“https”。否则 letencrypt 会抛出它已经有证书的错误。 :-)

      【讨论】:

      • 有没有办法自动续订?
      • 对于这种在一台机器上生成并在另一台机器上使用的证书,我找不到自动更新证书的正确方法。
      【解决方案5】:

      如果在 OpenShift V3+ 上部署,请查看 https://github.com/ibotty/openshift-letsencrypt 以获取公开路由上的自动化 Letencrypt 证书管理。

      【讨论】:

      • 这是作为答案发布的,但它不会尝试回答问题。它可能应该是编辑、评论、另一个问题或完全删除。
      • 它仍然是有用的信息,因为它解决了可能正在使用 OpenShift 3 的人的问题,而其他答案适用于 OpenShift 2。每个版本的完成方式非常不同。由于最初的问题没有说明现在哪个版本和内容已更改为 OpenShift 3,因此如果不知道为 OpenShift 3 提供解决方案,您将不可避免地让人们来到这里并感到困惑。