Heroku SSL连接错误不支持的协议



我已经使用Heroku一段时间来托管我的Discord bot。它已经成功地连接到托管在ClearDB上的MySQL数据库。然而,最近,每当我使用bot并试图连接到数据库时,它都会抛出这个错误:

2026 (HY000): SSL connection error: error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol

到现在为止,它一直工作得很好,我没有改变任何东西。对于后台,我所做的就是删除一个管道,使我的应用成为一个没有管道的独立应用。万一这对你有帮助。

是因为Heroku更新了吗?我怎么修理我的机器人?如果您需要更多的信息,请告诉我。

任何帮助都是感激的,并提前感谢您!

编辑:数据库连接代码:

import mysql.connector
def create_conn():
conn = None
try:
conn = mysql.connector.connect(host="HOST",
database="DB",
user="USER",
password="PWD")
except Exception as e:
print(e)
return conn

def execute_query(query, params, fetchall=True):
conn = create_conn()
if conn:
cursor = conn.cursor()
cursor.execute(query % params)
try:
if fetchall:
results = cursor.fetchall()
else:
results = cursor.fetchone()
except:
results = None
conn.commit()
cursor.close()
conn.close()
return results
else:
return False

数据库连接过去是可以工作的,当我在我的测试机器(树莓派)上运行它时仍然可以工作。

编辑2:让:

aiohttp==3.6.3
async-timeout==3.0.1
attrs==20.3.0
CacheControl==0.12.6
cachetools==4.2.0
certifi==2020.12.5
cffi==1.14.4
chardet==3.0.4
click==7.1.2
cryptography==3.3.1
cssselect==1.1.0
cssutils==1.0.2
discord==1.0.1
discord-pretty-help==1.2.0
discord.py==1.6.0
emoji==0.6.0
Flask==1.1.2
google-api-core==1.24.1
google-api-python-client==1.12.8
google-auth==1.24.0
google-auth-httplib2==0.0.4
google-cloud-core==1.5.0
google-cloud-firestore==2.0.2
google-cloud-storage==1.35.0
google-crc32c==1.1.0
google-resumable-media==1.2.0
googleapis-common-protos==1.52.0
grpcio==1.34.0
gunicorn==20.0.4
httplib2==0.18.1
idna==2.8
importlib-metadata==3.3.0
itsdangerous==1.1.0
jeepney==0.6.0
Jinja2==2.11.2
keyring==21.8.0
lxml==4.6.2
MarkupSafe==1.1.1
msgpack==1.0.2
multidict==4.7.6
mysql-connector-python==8.0.22
numpy==1.19.4
pandas==1.1.5
premailer==3.7.0
proto-plus==1.13.0
protobuf==3.14.0
pyasn1==0.4.8
pyasn1-modules==0.2.8
pycparser==2.20
python-dateutil==2.8.1
python-dotenv==0.15.0
pytz==2020.4
requests==2.25.1
rsa==4.7
schedule==0.6.0
SecretStorage==3.3.0
six==1.15.0
typing-extensions==3.7.4.3
uritemplate==3.0.1
urllib3==1.26.2
Werkzeug==1.0.1
yagmail==0.14.245
yarl==1.5.1
zipp==3.4.0

以防你可以通过:

conn = mysql.connector.connect(host="HOST",
database="DB",
user="USER",
password="PWD", 
ssl_disabled=True)

我不太确定如何做到这一点,但我很确定你必须禁用SSL才能工作,希望这对你有帮助。

显然,你需要在你的应用程序和MySQL之间强制一个SSL连接。

如果您使用的是ruby stack,那么遵循给定的选项,您的SSL错误问题将得到解决。

  • 从您的ClearDB仪表板中下载CA、Client和Private Key文件,并将它们放在应用程序文件系统的根目录中。
  • 确保你已经安装了OpenSSL,你可以在这里找到Unix/Linux/OS X,这里是Windows。*由于在Heroku上使用的MySQL客户端库配置,您需要从私钥文件中剥离密码,可以这样做:
$ openssl rsa -in cleardb_id-key.pem -out cleardb_id-key-no-password.pem

您现在可以删除cleardb_id-key。Pem并重命名cleardb_id-key-no-password。Pem转换为cleardb_id-key。您将在您的应用程序中使用。

*用你修改过的CLEARDB_DATABASE_URL的值设置DATABASE_URL配置变量,像这样:

$ heroku config:add DATABASE_URL="mysql2://abc1223:dfk243@us-cdbr-east.cleardb.com/my_heroku_db?
sslca=cleardb-ca-cert.pem&sslcert=cleardb_id-cert.pem&sslkey=cleardb_id-key.pem&reconnect=true"

注意到我们是如何在URL的末尾添加" reconnect=true "参数的吗?这是为了在连接超时的情况下,您的应用程序将自动重新连接到ClearDB。

从这里,简单地重新启动你的应用程序(如果Heroku还没有为你这样做),只要你在你的DATABASE_URL中指定正确的文件名和证书路径,你的应用程序现在将通过SSL连接到ClearDB。

最新更新