Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để kết nối với cơ sở dữ liệu MySQL từ xa qua SSL bằng Play Framework?

Giả sử bạn đã thiết lập chứng chỉ CA cho máy chủ MySQL (trường hợp này xảy ra khi sử dụng Amazon RDS), có một vài bước để thực hiện việc này.

Đầu tiên, chứng chỉ CA phải được nhập vào tệp Java KeyStore bằng cách sử dụng keytool , đi kèm với JDK. KeyStore trong trường hợp này sẽ chứa tất cả các chứng chỉ CA mà chúng tôi muốn tin cậy. Đối với Amazon RDS, chứng chỉ CA có thể được tìm thấy tại đây . Với mysql-ssl-ca-cert.pem trong thư mục làm việc của mình, bạn có thể chạy lệnh sau:

keytool -import -alias mysqlServerCACert -file mysql-ssl-ca-cert.pem -keystore truststore.jks

Thao tác này sẽ tạo một tệp Java KeyStore mới có tên là truststore.jks sau khi nhắc bạn nhập mật khẩu KeyStore và hỏi bạn có muốn tin cậy chứng chỉ hay không (vâng, bạn có). Nếu bạn đã có tệp kho tin cậy, bạn có thể chạy lệnh tương tự, thay thế cho truststore.jks với đường dẫn đến KeyStore hiện có của bạn (thay vào đó, bạn sẽ được nhắc nhập mật khẩu của KeyStore hiện có). Tôi thường đặt truststore.jks trong conf của tôi thư mục.

Thứ hai, trong application.conf bạn cần thêm một vài tham số URL JDBC vào URL cơ sở dữ liệu:

verifyServerCertificate=true - Từ chối kết nối nếu không xác minh được chứng chỉ máy chủ.

useSSL=true - Kết nối bằng SSL.

requireSSL=true - Từ chối kết nối nếu máy chủ MySQL không hỗ trợ SSL.

Ví dụ:nếu URL cơ sở dữ liệu hiện tại của bạn là:

db.default.url="jdbc:mysql://url.to.database/test_db"

Sau đó, bây giờ nó sẽ là:

db.default.url="jdbc:mysql://url.to.database/test_db?verifyServerCertificate=true&useSSL=true&requireSSL=true"

Cuối cùng, có một vài tùy chọn dòng lệnh cần được chuyển khi khởi động máy chủ Play để định cấu hình cửa hàng tin cậy MySQL-Connector / J sẽ sử dụng. Giả sử truststore.jks của tôi tệp nằm trong conf và mật khẩu là password , Tôi sẽ khởi động máy chủ của mình (ở chế độ nhà phát triển) như thế này:

activator run -Djavax.net.ssl.trustStore="conf/truststore.jks" -Djavax.net.ssl.trustStorePassword="password"

Ngoài ra, tôi cũng muốn đảm bảo rằng không thể kết nối với cơ sở dữ liệu mà không sử dụng SSL, đề phòng trường hợp các tùy chọn bằng cách nào đó bị rối loạn ở cấp ứng dụng. Ví dụ:if db.default.user=root , sau đó khi đăng nhập bằng root trong máy chủ MySQL, hãy chạy các truy vấn sau:

GRANT USAGE ON *.* TO 'root'@'%' REQUIRE SSL;
FLUSH PRIVILEGES;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Điều chỉnh cài đặt múi giờ mặc định trên RDS

  2. Cách sử dụng python mysqldb để chèn nhiều hàng cùng một lúc

  3. Làm thế nào để sử dụng GROUP BY để nối các chuỗi trong MySQL?

  4. Truy xuất 10 hàng TOP mà không cần sử dụng TOP hoặc LIMIT? - Câu hỏi Phỏng vấn Tuần # 247

  5. tạo cột văn bản làm khóa duy nhất