如何使用let加密设置Openshift(letsencrypt)

时间:2016-01-30 18:12:34

标签: openshift lets-encrypt

如何设置Openshift应用程序以使用let加密?

NB Openshift无法使用简单的python webserver方法处理服务器,您需要使用正确的端口并绑定到正确的IP地址。 app / gear也没有必要有html root。

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

5 个答案:

答案 0 :(得分:13)

首先,vote here以便OpenShift让“加密”#39;他们的首要任

我的步骤对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")
    

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

  5. 只需将创建的证书/etc/letsencrypt/archive/example.com上传到OpenShift Web控制台即可。 Fullchain.pem SSL证书 privkey.pem 证书私钥
  6. 就是这样,现在你应该在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!

答案 1 :(得分:4)

Lucus03的回答很好,我只想补充一般性意见。

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

我们需要遵循手动流程。 像我一样对证书不熟悉的人可能不清楚一般概念。

让我们的加密需要确认您在颁发证书之前控制域名。 这意味着将临时文件放在托管您站点的服务器上。 让加密然后检查这些并颁发证书。

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

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

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

答案 2 :(得分: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的加密客户端并带来一些最新所需的python包

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

现在停止应用程序(齿轮)设置一个python2网络服务器,使用正确的端口和正确的IP。 [$ OPENSHIFT_PYTHON_IP&amp; 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上表达一些爱意

答案 3 :(得分:2)

上面的答案是正确的,但有些复杂。我发现下面的答案最简单,请试一试。参考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”。否则letsencrypt会抛出已有证书的错误。 : - )

答案 4 :(得分:2)

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