使用MySQLdb SSL连接到Amazon RDS获取空的'Ssl_cipher'

时间:2014-01-27 17:13:51

标签: python django ssl mysql-python amazon-rds

我刚刚花了一个星期来讨论这个问题中记录的问题:https://stackoverflow.com/questions/21315427/why-does-the-ca-information-need-to-be-in-a-tuple-for-mysqldb

现在把它归结为一个问题。这是一个连接到我在Amazon RDS上的MySQL服务器的脚本:

#! /usr/bin/env python
import MySQLdb
ssl = ({'ca': '/home/James/Downloads/mysql-ssl-ca-cert-copy.pem'},)
conn = MySQLdb.connect(host='db.doopdoop.eu-west-n.rds.amazonaws.com', user='user', passwd='pass', ssl=ssl)
cursor = conn.cursor()
cursor.execute("SHOW STATUS LIKE 'Ssl_Cipher'")
print cursor.fetchone()

这让我回到('Ssl_cipher', ''),我收集的意思是连接没有加密。还使用Django的manage.py shell函数尝试了这个,并得到了相同的结果。那么,为什么我没有例外呢?当然,数据正在流动,但显然安全性正在被忽视。任何有关我在哪里出错的帮助都将不胜感激。

我尝试将MySQL-Python更新到1.2.5但没有成功。

1 个答案:

答案 0 :(得分:0)

您的问题的可能解决方法:使用默认文件。它看起来像这样:

[mysql]
host = db.doopdoop.eu-west-n.rds.amazonaws.com
user = user
password = pass
ssl-ca = /home/James/Downloads/mysql-ssl-ca-cert-copy.pem

然后将connect()调用更改为:

conn = MySQLdb.connect(read_default_file=options_path)

其中options_path是上述文件的路径。这也可以使您的代码中的身份验证数据保持不变。

Django设置如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/path/to/my.cnf',
        },
    }
}

参考:https://docs.djangoproject.com/en/dev/ref/databases/#connecting-to-the-database