2016-04-15 12 views
4

FBから新しいメッセンジャープラットフォームを使用しようとしています。 私はサーバ名がwww.mysite.comです。 私はそのドメインに対して有効なSSL証明書を取得しており、Apacheは正しく設定されています。バックエンドのPythonフラスコとFacebookのwebhookサブスクリプションのURLを検証できません

私はフラスコを実行している私のサーバー上のPythonコードを持っていると私は、サーバーのために得たこれらの証明書を指すように:

from flask import Flask, request 
from pymessenger.bot import Bot 
import requests 
import ipdb 
from OpenSSL import SSL 
app = Flask(__name__) 
TOKEN = "<access_token>" 
bot = Bot(TOKEN) 

@app.route("/webhook", methods = ['GET', 'POST']) 
def hello(): 
    if request.method == 'GET': 
     if (request.args.get("hub.verify_token") == "my_awesome_token"): 
       return request.args.get("hub.challenge") 
    if request.method == 'POST': 
     output = request.json 
     event = output['entry'][0]['messaging'] 
     for x in event: 
      if (x.get('message') and x['message'].get('text')): 
       message = x['message']['text'] 
       recipient_id = x['sender']['id'] 
       bot.send_text_message(recipient_id, message) 
      else: 
       pass 
     return "success" 


if __name__ == "__main__": 
    # tried this - no luck 
    #context = SSL.Context(SSL.SSLv23_METHOD) 
    #context.use_privatekey_file('/home/mysite.com.key') 
    #context.use_certificate_file('/home/intermediate.crt') 

    # tried this - also same result 
    context = ('/mysite.com.crt', '/mysite.com.key') 

    app.run(host='www.mysite.com',port=5002, debug=True, ssl_context=context) 

それがエラーなしで起動すると、私は私のブラウザでナビゲートする場合 - 私はそれを参照してください接続を取得します。

enter image description here

ポート5002が開いているINF私のファイアウォールです。

しかし、私はFBに移動し、そのURLに加入しようとする - それは、このエラーで失敗し続けて:私は、考えられる理由とのこぎりで半分にインターネットを読んだ

enter image description here

The URL couldn't be validated. 
Callback verification failed with the following errors: curl_errno = 60; 
curl_error = SSL certificate problem: unable to get local issuer certificate; 
HTTP Status Code = 200; 
HTTP Message = Connection established 

多くの異なる提案がありますが、私はこれらの作業を行うことはできません - 私は同じ結果を95%の時間で終わらせます。 5% - 私が試したいくつかの "狂った"設定でFlaskがうまくいっていないために起こったいくつかのエラー。

何が間違っていますか?私はCOMODOから得た証明書ファイルを使用しています。 /webhookを使用するコールバックURLでも試しました。同じエラー。

+2

チェーンに沿って中間証明書が不足しているため、チェーンが完了せず、証明書を正常に検証できません。これらの中間証明書もサーバーに置く必要があります。 Comodoに必要なものと入手方法を確認してください。https://support.comodo.com/index.php?/Default/Knowledgebase/List/Index/75/instantsslenterprisesslintranetssl – CBroe

+0

@CBroeはコモドの人とチャットしています助けて。私はあなたのリンクをたどった - 私はダウンロードのためのいくつかの証明書を見る。だから基本的に私はそれらの1つが必要ですか?もし私がそれを持っていたら、私はそれと何をしますか? (申し訳ありません - 私はsslにまったく新しいです)。 UPD:私にファイルへのリンクがあります:) https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/979/108/domain-validation-sha-2 彼らが言うように、4.07kbは1つです。私はそれをどうしますか? – GeekSince1982

+2

私はこのダウンロードしたバンドルをCRTに連結しました - falsk = WORKS !!! ありがとうございます! – GeekSince1982

答えて

2

また、発行者証明書を追加します。 Comodoは独自の証明書を発行します。サーバーを起動している間にそれを含める必要があります。

1

上記の回答に記載されているように、問題は発行者証明書がないことです。つまり、セキュアな接続が確立できません。これらの証明書は、あなたのケースComodoの証明書プロバイダからダウンロードできます。一度それらを持っていれば、SSL接続を確立できるように、両方をユーザに提供する必要があります。どのようにホスティングしているかによって複数の方法がありますが、最も簡単な方法は証明書をまとめて連結することです。それらが連結されている順序は重要であり、誤った順序で実行されるとKeyMismatchエラーが発生します。あなたの証明書はまず、発行者証明書とルート証明書に続く、次のようにする必要があります。

これは次のようにCLIから簡単に行うことができます。

cat your_domain_name.crt Intermediate.crt TrustedRoot.crt > combined.crt 

このコマンドは、3つのファイルを結合し適切な順序で出力し、combined.crtという新しいファイルに出力を格納します。 詳細については、hereを参照してください。

0

私はcertbotとLet's Encryptを使用します。

クライアントソフトウェアをインストールします。

は次にコマンド=>須藤./certbot-auto --apache -d YOUR_DOMAIN_NAME.COMを実行します(私は、すべての作品をapacheの、nginxのを試してみましたが、一人でフラスコ、フロントでHTTPSを置く必要はありません)

CD/etc/letsencrypt/live/YOUR_DOMAIN_NAMEなどです。COM/

コンテキスト=( '/etc/letsencrypt/live/YOUR_DOMAIN_NAME.COM/fullchain.pem'、 '/etc/letsencrypt/live/YOUR_DOMAIN_NAME.COM/privkey.pem')

私は証明書を使用最初にfullchain.pemの代わりに.pemを実行し、上記のエラーが発生した後、cert.pemをfullchain.pemに変更した後

関連する問題