gpt4 book ai didi

python - Flask + sqlalchemy 证书验证失败 : IP address mismatch

转载 作者:行者123 更新时间:2023-12-04 13:54:32 36 4
gpt4 key购买 nike

我正在使用 ssl 连接从 flask 应用程序连接到远程 mysql 数据库(在我的本地网络上)。

app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://user:password@192.168.1.24/AwesomeDB?ssl_ca=client-ssl/ca.pem&ssl_cert=client-ssl/client-cert.pem&ssl_key=client-ssl/client-key.pem"
对数据库的任何调用都会引发这个神秘的错误。
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on '192.168.1.24' ([SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: IP address mismatch, certificate is not valid for '192.168.1.24'. (_ssl.c:1122))")
我可以从终端登录到 mysql 监视器就好了。
mysql -u user -p -h 192.168.1.24 --ssl-ca=client-ssl/ca.pem --ssl-cert=client-ssl/client-cert.pem --ssl-key=client-ssl/client-key.pem
我在 macos 11.0.1 和 python 3.9.0 上。
我试过安装和链接 certifi如所述 here .没有 ssl 一切正常。请帮忙。
编辑:问题不是特定于 macOS,我尝试从 ubuntu 连接,结果相同。

最佳答案

尝试使用 Flask SQL alchemy over SSL 连接到 CLoudSQL(GCP) 时,我遇到了类似的问题。当与 Flask SQL alchemy 一起使用时,看起来 CLoudSQL 在某种程度上更喜欢 mysqlconnector 而不是 pymysql 驱动程序。因此,用 SQLALCHEMY_DATABASE_URI 中的 mysqlconnector 替换 pymysql 驱动程序就可以了。
确保您已安装 mysqlconnector 软件包

pip install mysql-connector-python via pip
这是工作代码的一小段
>>> from flask import Flask
>>> from flask_sqlalchemy import SQLAlchemy
>>>
>>> app = Flask(__name__)
>>>
>>> app.config["SQLALCHEMY_TRACK_MODIFICATIONS"]=False
>>>
>>> app.config["SQLALCHEMY_DATABASE_URI"] = 'mysql+mysqlconnector://{username}:{password}@{db_hostname}/{database}?ssl_ca=server-ca.pem'
>>>
>>> db = SQLAlchemy(app)
>>>
>>> class User(db.Model):
... id = db.Column(db.Integer, primary_key=True)
... username = db.Column(db.String(80), unique=True, nullable=False)
... email = db.Column(db.String(120), unique=True, nullable=False)
... def __repr__(self):
... return '<User %r>' % self.username
...
>>> db.create_all()
>>>
>>> admin = User(username='admin', email='admin@example.com')
>>> guest = User(username='guest', email='guest@example.com')
>>>
>>> db.session.add(admin)
>>> db.session.add(guest)
>>> db.session.commit()
>>>
>>> User.query.all()
[<User 'Flask'>, <User 'admin'>, <User 'guest'>]
注意:在可能的情况下,最好使用 pymysql 适配器,因为它是 more performant即使 mysqlconnector 得到 Oracle 的正式支持。两者都是用纯python实现的。

关于python - Flask + sqlalchemy 证书验证失败 : IP address mismatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64830600/

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