2010-12-01 45 views
6

Tôi đang cố kết nối Django với cơ sở dữ liệu mysql có thể truy cập thông qua kết nối ssl. Làm thế nào để cấu hình này?Làm thế nào để kết nối Django với một cơ sở dữ liệu mysql qua kết nối ssl?

Dự đoán đầu tiên của tôi sẽ đặt thuộc tính 'TÙY CHỌN' của định nghĩa cơ sở dữ liệu. Tuy nhiên, tôi không thể tìm thấy thông tin về những tùy chọn có thể sử dụng. Tùy chọn 'ssl': '/map/to/ca-cert.pem' không hoạt động.

Lệnh sau dường như làm việc:

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

Edit: Ok Tôi nhìn vào tài liệu python-mysqldb ... có lẽ tôi có thể tìm thấy câu trả lời ở đó.

Trả lời

12

Django sử dụng thư viện Python MySQLdb để giao tiếp với MySQL. Nhìn vào the MySQLdb connection documentation, có vẻ như tùy chọn ssl yêu cầu đối số từ điển. Vì vậy, đây có thể làm việc:

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

Cảm ơn. Nó cũng hoạt động với 'ca' thay vì 'chìa khóa'. Câu trả lời là trên trang này: http://dev.mysql.com/doc/refman/5.5/en/mysql-ssl-set.html –

+2

Có vẻ như 'ca' là tùy chọn chính xác, 'chính' trên chính nó khiến MySQL không xác minh được nội dung. Đọc thêm về nó tại đây: http://stackoverflow.com/questions/7287088/ca-ssl-parameter-for-python-mysqldb-not-working-but-key-does và tại đây: http: //bugs.mysql. com/bug.php? id = 62743 –

6

Client mysql phải được cung cấp với ba phím:

CA cert khách hàng cert khách hàng chủ chốt

Xem tài liệu Mysql cho hướng dẫn để tạo các phím và thiết lập máy chủ: http://dev.mysql.com/doc/refman/5.5/en/creating-ssl-certs.html

LƯU Ý: Có sự cố mở có vẻ liên quan đến việc sử dụng openssl v1.0.1 để tạo chứng chỉ cho mysql 5.5.x (http : //bugs.mysql.com/bug.php id = 64870)

Đây là một bài viết mẫu cho Django cài đặt tập tin:

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>' 
           } 
          } 
      } 
} 
+1

Tôi không hoàn toàn chắc chắn "phải" trong câu đầu tiên là chính xác trừ khi xác thực ** khóa ** + đang được sử dụng (trái ngược với việc mã hóa lưu lượng mạng). – jblaine

0

Tôi đã nhận được một "lỗi kết nối SSL: SSL_CTX_set_default_verify_paths thất bại ') "lỗi khi chạy python manage.py migrate

Tôi đã sử dụng pip để cài đặt gói django-mysql-ssl. Nó vẫn không hoạt động. Tôi đã phải thay đổi "ca" thành "ssl-ca" và bây giờ nó hoạt động.

'OPTIONS': { 
        'ssl': {'ssl-ca': '<PATH TO CA CERT>', 

          } 
         } 

Tôi không chắc liệu nó có thực sự sử dụng mã hóa hay không, nhưng nó không còn gây ra lỗi nữa. Tôi đang chạy ứng dụng django địa phương kết nối với một trường hợp AWS mariaDB.

Các vấn đề liên quan