gpt4 book ai didi

python - 无法在后端使用 python flask 和 ssl 验证 Facebook webhook 订阅中的 URL

转载 作者:太空狗 更新时间:2023-10-30 01:13:13 27 4
gpt4 key购买 nike

我正在尝试开始使用 FB 的新 Messenger 平台。所以我有名称为 www.mysite.com 的服务器我获得了该域的有效 SSL 证书并且 Apache 设置正确 - 一切正常。

我的服务器上有一个运行 flask 的 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 在我的防火墙中打开。

但是当我去 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 获得的证书文件。还尝试在回调 url 中使用 /webhook - 也不走运。同样的错误。

最佳答案

如上面的回答所述,问题是您没有颁发者证书,这意味着无法建立安全连接。这些证书可以从您的证书提供商处下载,在您的例子中是 Comodo。拥有它们后,您需要同时为用户提供服务,以便建立 SSL 连接。根据您的托管方式,有多种方法可以做到,但最简单的方法是将证书连接在一起。它们连接的顺序很重要,如果以不正确的顺序完成,将导致 Key Mismatch 错误。首先是您的证书,然后是颁发者证​​书和根证书,如下所示:

-----BEGIN CERTIFICATE-----
(Your Primary SSL certificate: your_domain_name.crt)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Your Intermediate certificate: Intermediate.crt)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Your Root certificate: TrustedRoot.crt)
-----END CERTIFICATE-----

这可以像这样从 CLI 轻松完成:

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

此命令以正确的顺序组合 3 个文件,并将输出存储在名为 combined.crt 的新文件中。 参见 here了解更多详情。

关于python - 无法在后端使用 python flask 和 ssl 验证 Facebook webhook 订阅中的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36642005/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com