Python - MySQL SSL连接

时间:2017-05-26 17:22:29

标签: python mysql windows ssl

我设置的MySQL服务器使用SSL,我也有CA证书。

当我使用MySQL Workbench连接到服务器时,我不需要证书。我还可以在没有CA证书的Mac上使用Python和MySQLdb连接到服务器。

但是当我尝试在Windows机器上使用完全相同的Python和MySQLdb设置进行连接时,我被拒绝访问。看来我需要CA.当我进入CA时,我收到以下错误

_mysql_exceptions.OperationalError: (2026, 'SSL connection error')

我打开连接的代码如下:

db = MySQLdb.connect(host="host.name",    
                 port=3306,
                 user="user",         
                 passwd="secret_password",  
                 db="database", 
                 ssl={'ca': '/path/to/ca/cert'})  

有人能指出窗户上的问题是什么吗?

4 个答案:

答案 0 :(得分:1)

我刚使用Python 2.7和MySQLdb(1.2.4)进行了以下操作:

database = MySQLdb.connect(host='hostname', user='username', db='db_name',
    passwd='PASSWORD', ssl={'ca': '/path/to/ca-file'})

这就是您所拥有的,因此这里还必须进行其他操作。我想知道您的本地CA文件是否有问题,或者服务器上的证书是否有问题?您可以从服务器获取CA文件的副本吗?

答案 1 :(得分:0)

我使用pymysql并且使用SSL密钥和证书进行连接时遇到了一些问题:对于“ssl”属性,我将其设置为内部字典。请尝试以下方法:

db = MySQLdb.connect(host="host.name",
    port=3306,
    user="user",
    passwd="secret_password",
    db="database",
    ssl={'ssl':
            {'ca': '/path/to/ca/ca',
             'key': '/path/to/ca/key',
             'cert': '/path/to/ca/cert'
            }
         }
)  

答案 2 :(得分:0)

我知道这有点老了,但是我找到了一种方法来使其工作。使用pymysql代替MySQLdb并将连接写为:

var myAnswer = {"VehicleResults":[{"Id":"0","FinanceProductResults":[{"Term":36,"AnnualMileage":10000,"Deposits":1000,"ProductResults":[{"Key":"PCP","Payment":170.08},{"Key":"HP","Payment":279.37}]}]}]}

myAnswer.VehicleResults[0].FinanceProductResults[0].ProductResults[0]

人们(包括我自己)想念的要点是ssl必须是包含以下内容的字典  键“ ssl”,其中另一个字典具有键“ ca”作为值。这应该对您有用。

答案 3 :(得分:0)

import pymysql

conn = pymysql.connect(host= # your host, usually localhost,
user = # your username,
passwd = # your password,
db = #your database name ,
ssl ={'ssl': r'path of your pem file'})