web-dev-qa-db-ja.com

Let'sEncrypt(letsencrypt)を使用してOpenshiftをセットアップする方法

Let's Encryptで動作するようにOpenshiftアプリを設定するにはどうすればよいですか?

NB Openshiftは、サーバーへの単純なpython webserverアプローチでは機能しません。正しいポートを使用し、正しいIPアドレスにバインドする必要があります。また、app/gearにhtmlルートが必要ではありません。 。

(以下に回答を掲載する質問です。)

17
Brendan Sleight

まず、 ここに投票 であるため、OpenShiftは「Let’sEncrypt」を優先します。

私の手順は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をOpenShiftWebコンソールにアップロードするだけです。 Fullchain.pemasSSL Certificateandprivkey.pemasCertificate Private Key

これで、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日が良いので、最後の可能な日に問題が発生することはありません)。これはかなり面倒な手順なので、hope(および vote )OpenShiftがLetsencryptをすぐに実装します!

13
Lucas03

Lucus03の回答は良いですが、一般的なコメントを追加したいと思います。

前提条件カスタムドメインを許可するブロンズのOpenshiftアカウントが少なくともあります。これは正常に機能しており、サイトにアクセスできます(httpsなし)。 http://www.testdomain.com

手動のプロセスに従う必要があります。私のように証明書を初めて使用する人は、一般的な概念が明確でない場合があります。

Let's Encryptは、証明書を発行する前に、ドメインを制御していることを確認する必要があります。これは、サイトをホストするサーバーに一時ファイルを配置することを意味します。 Let's Encryptはこれらをチェックし、証明書を発行します。

手動プロセスでは、一時ファイルが最初にローカルPCにダウンロードされます。次に、ファイルをサーバー上の正しい場所に手動で配置します。これらのテキストファイルは、サイトから表示できる必要があります。表示できない場合、プロセスは失敗します。

Openshiftを使用するアプリケーションはさまざまであるため、さまざまなソフトウェアスタックが使用されていることがわかります。例 http://velin-georgiev-blog.appspot.com/blog/details/5707532110659584 参照Flask Openshiftを設定する方法暗号化(letsencrypt) Lucas03 Django

ブラウザを使用してwww.testdomain.comに一時ファイルを表示できる場合は、ソフトウェアスタックを無視して、知っていることに固執することができます。

4
JohnC

アプリケーションがhttpsと呼ばれ、証明書のドメイン名がwww.example.comと呼ばれると仮定します。

最初(まだ実行されていない場合)rhcツールをインストールします https://developers.openshift.com/en/managing-client-tools.html

Second(まだ行っていない場合)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

次に、アプリケーション(ギア)を停止します。正しいポートと正しいIPを使用してpython2Webサーバーをセットアップします。 [$ 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 [email protected] -f account_key.json   -f fullchain.pem -f key.pem   -d www.example.com --default_root /tmp/http 

エラーがないと仮定して、python2 Webサーバーを停止し、アプリケーション/ギアを再起動して、openshiftサーバーを終了します。

killall python2
gear start
exit

Forth証明書とキーのアップロードはアプリケーションの外部で行う必要があるため、ローカルマシンから-コピーを取得してからアップロードします(はい、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

5番目 letsencrypt.orgで愛を示してください

3
Brendan Sleight

上記の答えは正しいですが、やや複雑です。以下の答えが最も簡単であることがわかりました。試してみてください。 OpenShiftで暗号化しましょう

暗号化を許可したと仮定して、「ssl」という新しいフォルダを作成します。 「ssl」フォルダにconfig、work、logsディレクトリを作成します。次に、letsencryptコマンドを実行します。

$ mkdir ssl
$ cd ssl
$ mkdir config work logs
$ letsencrypt --text --email [email protected] --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デプロイメントにファイルをアップロードするように指示します。アップロードしたら、先に進むことができ、証明書を自由に使用できます。素晴らしくて簡単。

また、エンドポイントが「https」ではなく「http」プロトコルでデプロイされていることを確認してください。それ以外の場合、letsencryptはすでに証明書を持っているというエラーをスローします。 :-)

2
sbharti

OpenShift V3 +にデプロイする場合は、公開されたルートでの自動化されたletsencrypt証明書管理について https://github.com/ibotty/openshift-letsencrypt を参照してください。

2
patlachance