我正在尝试将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文档......也许我可以在那里找到答案。
答案 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库。 可以在此处找到更多详细信息:
不能为@Drew答案留下评论,所以让它成为新的答案。