2010-07-04 135 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>' 
           } 
          } 
      } 
}