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;