当前位置: 首页 > 知识库问答 >
问题:

烧瓶sqlalChemy证书验证失败:IP地址不匹配

南宫阳冰
2023-03-14

我正在使用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。没有ssl,一切正常。请帮忙。

编辑:这个问题不是macos特有的,我试着从ubuntu连接,结果也是一样的。

共有1个答案

窦宏旷
2023-03-14

当我试图连接到CLoudSQL(GCP)使用FlaskSQL炼金术超过SSL时,我面临着类似的问题。看起来CLoudSQL在与FlaskSQL炼金术一起使用时,不知何故更喜欢MySQL连接器而不是pymysql驱动程序。所以在SQLALCHEMY_DATABASE_URI中用mysql连接器替换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适配器,因为它的性能更高,即使Oracle正式支持mysqlconnector。不过,这两个都是用纯python实现的。

 类似资料:
  • - 我运行了此脚本,但出现了此错误。我怎么做?

  • 您好,我在构建python映像时遇到问题 错误说, 但是当升级pip时,同样的错误显示。 错误:由于环境原因无法安装程序包错误:HTTPSConnectionPool(host='files.pythonhosted.org',port=443):url超过最大重试次数:/packages/ac/cf/0cc542fc93de2f3b9b53cb979c7d118cffb93204afb4629a

  • 问题内容: 遇到了应从具有自签名证书的邮件服务器发送电子邮件的问题,我得到的错误是: 有没有人遇到过类似的事情? 编辑: 我也尝试过设置stream_context参数(params:SSL上下文选项): 运气不好,它仍然会失败,并出现与上述相同的错误。 谢谢。 问题答案: PHP 5.6引入了SSL证书验证,因此,如果您的配置被破坏,它将因该错误而失败。您应该修复SSL,但是可以通过将属性设置为

  • 问题内容: 我有IP地址和掩码,例如。我想检查是否在该范围内。是否存在可以执行此操作的库或实用程序,或者我需要自己写点东西? 问题答案: 首先,您需要将IP地址转换为flat ,这将更易于使用: 一旦您的IP地址为s,就可以执行一些算法来执行检查:

  • 本文向大家介绍在Python中验证IP地址,包括了在Python中验证IP地址的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个字符串;我们必须检查给定的输入是否是有效的IPv4地址或IPv6地址,或者都不是。 IPv4地址以点分十进制表示法规范表示,点分十进制表示法由四个十进制数字组成,每个数字范围为0到255,并用点号(“。”)分隔,例如192.168.254.1;此外,IPv4地址中的

  • 我正在尝试使用python从web获取数据。我导入了urllib。请求包,但在执行时,我得到错误: 我正在Mac OS High Sierra上使用Python 3.7 当我将URL更改为“http”时,我能够获取数据。但是,我相信,这可以避免检查SSL证书。 因此,我在互联网上查找并找到了一个解决方案:运行 这解决了我的问题。但是我对SSL之类的东西一无所知。你能帮我理解它到底做了什么来解决我的