Nodejs mysql SSL
Một trong những yêu cầu để tuân thủ HIPAA là đảm bảo rằng tất cả giao tiếp giữa các thành phần ứng dụng được thực hiện một cách an toàn Show Ứng dụng phụ trợ cần tuân thủ HIPAA bao gồm
Giao tiếp giữa ELB và API đã được thực hiện qua HTTPS. Nhưng API đã truy cập cơ sở dữ liệu qua HTTP Vấn đề
Dung dịchChúng tôi có thể thiết lập kết nối SSL với từng loại cơ sở dữ liệu RDS (Amazon Aurora, MySQL, PostgreSQL, v.v.). Trong hướng dẫn này, chúng tôi sẽ trình bày các bước để kết nối qua SSL với Cơ sở dữ liệu RDS PostgreSQL từ một Nút. ứng dụng js chạy trên EC2 Hỗ trợ SSL có sẵn ở tất cả các khu vực AWS cho PostgreSQL. Amazon RDS tạo chứng chỉ SSL cho phiên bản CSDL PostgreSQL của bạn khi phiên bản được tạo. Nếu chúng tôi bật xác minh chứng chỉ SSL, thì chứng chỉ SSL sẽ bao gồm điểm cuối phiên bản CSDL làm Tên chung (CN) cho chứng chỉ SSL để bảo vệ chống lại các cuộc tấn công giả mạo Để định cấu hình Nút của chúng tôi. js để giao tiếp bằng SSL với RDS DB, chúng tôi đã làm theo các bước tiếp theo
public initializeSSLDbConnection = () => { 4. thử nghiệm ứng dụng Kết nối với Công cụ DB qua SSLTrong trường hợp chúng tôi muốn truy vấn trực tiếp một số dữ liệu từ cơ sở dữ liệu của mình, chúng tôi cũng cần kết nối với nó qua SSL. Để làm điều đó, chúng tôi đã sử dụng DBeaver bằng cách sử dụng cấu hình mạng tiếp theo Số nguyên trong JavaScript sử dụng biểu diễn IEEE-754. Điều này có nghĩa là nút. js không thể biểu diễn chính xác các số nguyên trong phạm vi ±9,007,199,254,740,991. Tuy nhiên, MariaDB không hỗ trợ số nguyên lớn hơn Điều này có nghĩa là khi giá trị được đặt trên một cột không nằm trong phạm vi an toàn, thì việc triển khai mặc định sẽ nhận được biểu thị không chính xác của số Trình kết nối cung cấp hai tùy chọn để giải quyết vấn đề này SSLTrình kết nối có thể mã hóa dữ liệu trong quá trình truyền bằng giao thức Bảo mật tầng vận chuyển (TLS). TLS/SSL cho phép mã hóa chuyển giao và có thể tùy chọn sử dụng xác thực danh tính cho máy chủ và máy khách Thuật ngữ SSL (Lớp cổng bảo mật) thường được sử dụng thay thế cho TLS, mặc dù nói đúng ra thì giao thức SSL là tiền thân của TLS và không được triển khai vì nó hiện được coi là không an toàn Có hai loại xác thực SSL khác nhau
Cấu hình máy chủĐể sử dụng SSL, bạn cần đảm bảo rằng Máy chủ MariaDB được định cấu hình chính xác. Bạn có thể xác định điều này bằng biến hệ thống SHOW VARIABLES LIKE 'have_ssl'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_ssl | DISABLED | +---------------+----------+ Giá trị NO chỉ ra rằng MariaDB đã được biên dịch mà không hỗ trợ TLS. ĐÃ TẮT có nghĩa là nó được biên dịch với sự hỗ trợ của TLS, nhưng nó hiện đang bị tắt. Để sử dụng SSL với Trình kết nối, máy chủ phải trả về CÓ, cho biết hỗ trợ TLS khả dụng và được bật. Để biết thêm thông tin, hãy xem tài liệu Máy chủ MariaDB Cấu hình người dùngKích hoạt trên máy chủ, Trình kết nối sử dụng xác thực SSL một chiều để kết nối với máy chủ. Ngoài ra, bạn cũng nên định cấu hình người dùng của mình để kết nối thông qua SSL. Điều này đảm bảo rằng tài khoản của họ chỉ có thể được sử dụng với kết nối SSL Đối với câu lệnh GRANT, hãy sử dụng tùy chọn xác thực SSL một chiều và tùy chọn xác thực SSL hai chiều. Để biết thêm thông tin, hãy xem tài liệu TẠO NGƯỜI DÙNG CREATE USER 'johnSmith'@'%' IDENTIFIED BY PASSWORD('passwd'); GRANT ALL ON company.* TO 'johnSmith'@'%' REQUIRE SSL; Bây giờ khi người dùng này cố gắng kết nối với MariaDB mà không có SSL, máy chủ sẽ từ chối kết nối Cấu hình
đối tượng JSON Trình kết nối sử dụng Nút. js triển khai TLS. Để biết thêm thông tin, hãy xem tài liệu CA đáng tin cậyTheo mặc định, Nút. js tin tưởng Cơ quan cấp chứng chỉ gốc nổi tiếng (CA), dựa trên Mozilla. Để có danh sách đầy đủ, (bao gồm Let's Encrypt phổ biến và miễn phí), hãy xem Danh sách chứng chỉ CA Khi sử dụng chứng chỉ được ký bằng chuỗi chứng chỉ từ CA gốc mà Node biết. js, cấu hình duy nhất bạn cần làm là bật tùy chọn CREATE USER 'johnSmith'@'%' IDENTIFIED BY PASSWORD('passwd'); GRANT ALL ON company.* TO 'johnSmith'@'%' REQUIRE SSL;3 Chuỗi chứng chỉ là danh sách các chứng chỉ được cấp từ cùng một hệ thống phân cấp của Tổ chức phát hành chứng chỉ. Để bất kỳ chứng chỉ nào được xác thực, tất cả các chứng chỉ trong chuỗi phải được xác thực Trong trường hợp chứng chỉ trung gian hoặc chứng chỉ gốc không được Trình kết nối tin cậy, Trình kết nối sẽ từ chối kết nối và đưa ra lỗi Chứng chỉ có thể cung cấp xác minh tên máy chủ cho trình điều khiển. Theo mặc định, điều này được thực hiện đối với trường tên DNS subjectAlternativeName của chứng chỉ Khi chứng chỉ máy chủ được ký bằng chuỗi chứng chỉ sử dụng CA gốc đã biết trong kho lưu trữ tin cậy JavaScript, việc đặt tùy chọn CREATE USER 'johnSmith'@'%' IDENTIFIED BY PASSWORD('passwd'); GRANT ALL ON company.* TO 'johnSmith'@'%' REQUIRE SSL;3 sẽ bật xác thực SSL một chiều Ví dụ, const mariadb = require('mariadb'); mariadb .createConnection({ host: 'myHost.com', ssl: true, user: 'myUser', password:'MyPwd', database:'db_name' }).then(conn => {}) Khi máy chủ sử dụng chứng chỉ tự ký hoặc sử dụng chứng chỉ trung gian, có hai khả năng khác nhau Trong môi trường phi sản xuất, bạn có thể yêu cầu Trình kết nối tin cậy tất cả các chứng chỉ bằng cách đặt rejectUnauthorized thành false. KHÔNG sử dụng cái này trong sản xuất //connecting mariadb .createConnection({ host: 'myHost.com', ssl: { rejectUnauthorized: false }, user: 'myUser', password:'MyPwd', }).then(conn => {}) Một giải pháp thay thế an toàn hơn là cung cấp chuỗi chứng chỉ cho Trình kết nối const fs = require("fs"); const mariadb = require('mariadb'); //reading certificates from file const serverCert = [fs.readFileSync("server.pem", "utf8")]; //connecting mariadb .createConnection({ user: "myUser", host: "myHost.com", ssl: { ca: serverCert } }).then(conn => {}) Sử dụng các giao thức hoặc mật mã TLS cụ thểTrong trường hợp bạn không thích giao thức hoặc mật mã TLS mặc định hoặc khi bạn muốn sử dụng một phiên bản cụ thể, bạn buộc Trình kết nối sử dụng phiên bản bạn muốn bằng cách sử dụng tùy chọn CREATE USER 'johnSmith'@'%' IDENTIFIED BY PASSWORD('passwd'); GRANT ALL ON company.* TO 'johnSmith'@'%' REQUIRE SSL;5 và CREATE USER 'johnSmith'@'%' IDENTIFIED BY PASSWORD('passwd'); GRANT ALL ON company.* TO 'johnSmith'@'%' REQUIRE SSL;6 Chẳng hạn, giả sử bạn muốn kết nối bằng TLS phiên bản 1. 2 SHOW VARIABLES LIKE 'have_ssl'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_ssl | DISABLED | +---------------+----------+0 Để biết thêm thông tin về những gì có sẵn, hãy xem các giá trị Xác thực SSL lẫn nhau hoặc xác thực lẫn nhau dựa trên chứng chỉ đề cập đến việc hai bên xác thực lẫn nhau bằng cách xác minh các chứng chỉ kỹ thuật số được cung cấp. Điều này cho phép cả hai bên yên tâm về danh tính của bên kia. Để sử dụng xác thực lẫn nhau, bạn phải đặt tùy chọn trong câu lệnh GRANT. Ví dụ, SHOW VARIABLES LIKE 'have_ssl'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_ssl | DISABLED | +---------------+----------+1 Tùy chọn này khiến máy chủ yêu cầu Trình kết nối cấp chứng chỉ ứng dụng khách. Nếu người dùng không được đặt với YÊU CẦU X509, thì máy chủ sẽ mặc định xác thực một chiều Khi sử dụng xác thực lẫn nhau, bạn cần có chứng chỉ (và khóa riêng liên quan của nó) cho Trình kết nối cũng như máy chủ. Nếu Trình kết nối không cung cấp chứng chỉ và người dùng được đặt thành YÊU CẦU X509, máy chủ sẽ trả về thông báo cơ bản CREATE USER 'johnSmith'@'%' IDENTIFIED BY PASSWORD('passwd'); GRANT ALL ON company.* TO 'johnSmith'@'%' REQUIRE SSL;7 Trong trường hợp bạn muốn xem cách xác định người dùng, bạn có thể tìm thấy thông tin này bằng cách truy vấn mysql. bảng người dùng trên máy chủ. Chẳng hạn, giả sử bạn muốn có thông tin về người dùng johnSmith SHOW VARIABLES LIKE 'have_ssl'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_ssl | DISABLED | +---------------+----------+3 Bạn có thể kiểm tra bằng cách tạo người dùng với REQUIRE X509 để kiểm tra SHOW VARIABLES LIKE 'have_ssl'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_ssl | DISABLED | +---------------+----------+4 Sau đó sử dụng thông tin đăng nhập của nó trong ứng dụng của bạn SHOW VARIABLES LIKE 'have_ssl'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_ssl | DISABLED | +---------------+----------+5 Sử dụng kho khóaKho khóa cho phép bạn lưu trữ khóa riêng và chuỗi chứng chỉ được mã hóa bằng mật khẩu để gửi. Chẳng hạn, sử dụng OpenSSL, bạn có thể tạo kho khóa bằng định dạng PKCS12 CREATE USER 'johnSmith'@'%' IDENTIFIED BY PASSWORD('passwd'); GRANT ALL ON company.* TO 'johnSmith'@'%' REQUIRE SSL;0 Sau đó, bạn có thể sử dụng kho khóa trong ứng dụng của mình CREATE USER 'johnSmith'@'%' IDENTIFIED BY PASSWORD('passwd'); GRANT ALL ON company.* TO 'johnSmith'@'%' REQUIRE SSL;1 Sự lựa chọn khácF. A. QKhách hàng xác minh chứng chỉ SAN (tên thay thế chủ đề) và CN để đảm bảo rằng chứng chỉ tương ứng với tên máy chủ. Nếu SAN/CN của chứng chỉ không tương ứng với tùy chọn máy chủ, nó sẽ trả về một lỗi chẳng hạn như CREATE USER 'johnSmith'@'%' IDENTIFIED BY PASSWORD('passwd'); GRANT ALL ON company.* TO 'johnSmith'@'%' REQUIRE SSL;2 Để khắc phục điều này, hãy sửa giá trị máy chủ để tương ứng với máy chủ được xác định trong chứng chỉ thói quen lỗi. ssl_choose_client_version. giao thức không được hỗ trợKể từ nút. js 12 phiên bản TLS tối thiểu được đặt thành 1. 2 Máy chủ MariaDB có thể được xây dựng với thư viện SSL khác nhau, phiên bản cũ chỉ hỗ trợ TLS tối đa 1. 1. Lỗi "1976. lỗi. 1425F102. quy trình SSL. ssl_choose_client_version. giao thức không được hỗ trợ" có thể xảy ra nếu triển khai SSL MariaDB không hỗ trợ TLSv1. 2 Làm cách nào để kết nối với cơ sở dữ liệu MySQL bằng SSL?Định cấu hình kết nối SSL MySQL . Tạo thư mục để lưu trữ các khóa SSL. Để tạo thư mục chứa khóa SSL, hãy thực hiện các bước sau. . Tạo khóa SSL. Ghi chú. . Chỉnh sửa cấu hình MySQL. . Kiểm tra cấu hình SSL. . Tạo người dùng và cho phép truy cập từ xa. . Kiểm tra kết nối MySQL từ xa MySQL có tốt cho Nodejs không?js được kết hợp với MongoDB và các cơ sở dữ liệu NoSQL khác, nhưng Node. js cũng hoạt động tốt với các cơ sở dữ liệu quan hệ như MySQL . Nếu bạn muốn viết một microservice mới với Node. js cho cơ sở dữ liệu hiện có, rất có thể bạn sẽ sử dụng MySQL, một trong những cơ sở dữ liệu mã nguồn mở phổ biến nhất thế giới.
Nodejs có thể giao tiếp với MySQL không?Khi bạn đã thiết lập và chạy MySQL trên máy tính của mình, bạn có thể truy cập nó bằng cách sử dụng Nút. js . Để truy cập cơ sở dữ liệu MySQL bằng Node. js, bạn cần có trình điều khiển MySQL. |