如何通过ssl连接将Django连接到mysql数据库?

时间:2010-12-01 11:14:27

标签: mysql django ssl

我正在尝试将Django连接到可通过ssl连接访问的mysql数据库。我该如何配置?

我的第一个猜测是设置数据库定义的'OPTIONS'属性。但是,我找不到有关可能使用的选项的信息。选项'ssl':'/ map / to / ca-cert.pem'不起作用。

以下命令似乎有效:

mysql -h url.to.host -u lizard -p --ssl-ca=./ca-cert.pem

编辑:好的我正在查看python-mysqldb文档......也许我可以在那里找到答案。

4 个答案:

答案 0 :(得分:14)

Django使用Python MySQLdb库与MySQL进行交互。查看the MySQLdb connection documentation,看起来ssl选项需要字典参数。所以这可能有用:

'OPTIONS': {'ssl': {'key': '/map/to/ca-cert.pem'}}

答案 1 :(得分:6)

必须为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>'
                                }
                          }
            }
}

答案 2 :(得分:2)

我收到了一个&#34; SSL连接错误:SSL_CTX_set_default_verify_paths失败&#39;) &#34;运行 <RadioButton android:id="@+id/answerA2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:fontFamily="monospace" android:paddingLeft="8dp" android:paddingRight="8dp" android:onClick="onRadioButtonClicked" android:text="@string/a2" android:textSize="13sp" tools:targetApi="jelly_bean" />

时出错

我用pip来安装django-mysql-ssl包。它仍然没有工作。我不得不改变&#34; ca&#34;到&#34; ssl-ca&#34;现在它的工作原理。

python manage.py migrate

我不确定它是否实际使用加密,但它不再引发错误。我正在运行连接到AWS mariaDB实例的本地django应用程序。

答案 3 :(得分:0)

如果使用SSL加密连接,则可能需要cipher参数

DATABASE = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',
        'USER': 'user',
        'PASSWORD': 'pass',
        'HOST': 'host',
        'PORT': '3306',
        'OPTIONS': {
            'ssl': {
                'ca': 'path/to/pem',
                'key': 'path/to/pem',
                'cert': 'path/to/pem',
                'cipher': 'AES128-SHA' #| 'AES128-SHA256' | 'DHE-RSA-AES256-SHA'
            }
        }
    }
}

MySQL将默认的密码列表传递给SSL库。 可以在此处找到更多详细信息:

  1. https://dev.mysql.com/doc/refman/5.7/en/encrypted-connection-protocols-ciphers.html#encrypted-connection-cipher-configuration
  2. https://dev.mysql.com/doc/refman/5.7/en/encrypted-connection-protocols-ciphers.html#encrypted-connection-protocol-negotiation

不能为@Drew答案留下评论,所以让它成为新的答案。