Python MySQLDB SSL连接

时间:2010-07-04 03:38:14

标签: python mysql database django ssl

我将数据库设置为要求ssl。我已经确认我可以通过传递公钥来通过命令行连接到数据库[并且如果我没有传递公钥则确认我无法连接]

我在django应用程序中遇到的错误与我没有传递密钥时相同。似乎我没有正确设置我的settings.py以将路径传递给公钥。

我的设置有什么问题?我正在使用python-mysqldb。

DATABASES['default'] = {
    'ENGINE': 'django.db.backends.mysql',
    'HOST': 'my-host-goes-here',
    'USER': 'my-user-goes-here',
    'NAME': 'my-db-name-goes-here',
    'PASSWORD': 'my-db-pass-goes-here',
    'OPTIONS': {
        'SSL': '/path/to/cert.pem',
    }
}

2 个答案:

答案 0 :(得分:8)

找到答案。选项应如下所示:

'OPTIONS': {'ssl': {'ca':'/path/to/cert.pem',},},

确保你保留逗号,否则解析似乎失败了?

答案 1 :(得分:1)

必须为mysql客户端提供三个密钥:

CA证书 客户证书 客户端密钥

有关创建这些密钥和设置服务器的说明,请参阅Mysql文档:http://dev.mysql.com/doc/refman/5.5/en/creating-ssl-certs.html

注意:有一个开放的问题似乎与使用openssl v1.0.1为mysql 5.5.x创建证书有关(http://bugs.mysql.com/bug.php?id=64870)< / p>

这是Django设置文件的示例条目:

DATABASES = {
'default': {
              'ENGINE': 'django.db.backends.mysql',  
              'NAME': '<DATABASE NAME>',                     
              'USER': '<USER NAME>',
              'PASSWORD': '<PASSWORD>',
              'HOST': '<HOST>', 
              'PORT': '3306'    
              'OPTIONS':  {
                        'ssl': {'ca': '<PATH TO CA CERT>',
                                'cert': '<PATH TO CLIENT CERT>',
                                'key': '<PATH TO CLIENT KEY>'
                                }
                          }
            }
}