2010-07-04 117 views
5

我将我的数据库设置为需要ssl。我已经证实我可以通过命令行连接到数据库通过传递公共密钥[并确认我无法连接,如果我不通过公共密钥]Python MySQLDB 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', 
    } 
} 
+0

你已经能够用裸'MySQLdb'连接? – 2010-07-04 03:46:17

+0

是的,我可以按照以下说明连接: http://riskable.com/?p=271 但我似乎无法找到如何在django的数据库选项中表达ssl_settings的等价物。 – 2010-07-04 14:31:50

回答

8

找到了答案。选项应该看起来像这样:

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

请确保您保留逗号,否则解析似乎失败?

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)

这是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>' 
           } 
          } 
      } 
}