代码之家  ›  专栏  ›  技术社区  ›  Keith Fitzgerald

python mysqldb ssl连接

  •  6
  • Keith Fitzgerald  · 技术社区  · 16 年前

    我将数据库设置为需要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 回复  |  直到 13 年前
        1
  •  8
  •   Keith Fitzgerald    16 年前

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

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

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

        2
  •  1
  •   Drew Solomon Duskis    13 年前

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

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

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

    注意:有一个公开的问题似乎与使用OpenSSLv1.0.1为MySQL5.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>'
                                    }
                              }
                }
    }