Heroku SSL 连接错误不支持的协议
Posted
技术标签:
【中文标题】Heroku SSL 连接错误不支持的协议【英文标题】:Heroku SSL connection error unsupported protocol 【发布时间】:2021-05-04 09:51:13 【问题描述】:我使用 Heroku 来托管我的 Discord 机器人已经有一段时间了。它已成功连接到托管在 ClearDB 上的 mysql 数据库。但是,最近,每当我使用该机器人并尝试连接到数据库时,它都会抛出此错误:
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: requirements.txt:
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
【问题讨论】:
你用工作台检查过吗,如果建立连接,还看看服务器是否正在运行 你升级了 OpenSSL .. 看看这个***.com/questions/53058362/… @Yan 如果您使用 Heroku 和 ClearDB 连接到 GitHub 存储库,您应该如何升级 OpenSSL? 您使用的是哪个堆栈?你在 ruby 堆栈上运行吗? @KrishnanShankar 很难说,但你说过你已经删除了一个管道并运行了一个独立的应用程序。底层操作系统版本是否可能不同。签出此 SO ***.com/questions/61649764/… ... 可能需要更新配置以设置最低 TLS 版本。 【参考方案1】:我不太确定如何执行此操作,但我很确定您必须禁用 SSL 才能使其工作,希望这会有所帮助。
【讨论】:
它可能有效,但不能真正解决问题。此外,这并不安全,凭据和数据将以明文形式传输【参考方案2】:显然,您需要在应用和 MySQL 之间强制建立 SSL 连接。
如果您使用的是ruby stack
,请按照给定的选项操作,您的 SSL 错误问题将得到解决。
$ 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.pem,您将在您的应用中使用它。
*使用修改后的 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"
注意到我们如何将“reconnect=true”参数添加到 URL 的末尾了吗?这样您的应用程序将在连接超时时自动重新连接到 ClearDB。
从这里,只需重新启动您的应用程序(如果 Heroku 尚未为您这样做),只要您在 DATABASE_URL 中指定正确的文件名和证书路径,您的应用程序现在将通过 SSL 连接到清除数据库。
【讨论】:
【参考方案3】:以防万一您可以通过以下方式打开 ssl:
conn = mysql.connector.connect(host="HOST",
database="DB",
user="USER",
password="PWD",
ssl_disabled=True)
【讨论】:
以上是关于Heroku SSL 连接错误不支持的协议的主要内容,如果未能解决你的问题,请参考以下文章
MySQL主从服务器slave无法连接master:SSL连接错误:协议版本不匹配
curl: (35) 首次请求时连接出现未知 SSL 协议错误