CHƯƠNG 412. Bất kỳ cơ chế hoạt động nào của cơ sở dữ liệu đều liên quan đến hai dạng dữ liệu: dữ liệu ở trạng thái tĩnh hoặc dữ liệu trạng thái động. Dữ liệu trạng thái động là luồng dữ liệu di chuyển qua các mạng hoặc phần mềm trong khi dữ liệu ở trạng thái tĩnh không di chuyển đến bất kỳ đâu. Cả hai kiểu dữ liệu này đều dễ bị can thiệp từ bên ngoài bởi người dùng ẩn danh, vì vậy mongodb cung cấp cho người dùng giải pháp mã hóa.
CHƯƠNG 413. 2.3.3.1. Mã hóa dữ liệu truyền
CHƯƠNG 414. Dữ liệu di chuyển giữa MongoDB và máy chủ ứng dụng theo hai cách: thông qua Bảo mật lớp truyền tải (TLS) và Lớp cổng bảo mật (SSL).
CHƯƠNG 415. Đây là hai giao thức mã hóa được sử dụng nhiều nhất để bảo mật dữ liệu gửi và nhận giữa hai hệ thống. Về cơ bản, khái niệm này là mã hóa các kết nối đến các cá thể mongod và mongos sao cho lưu lượng mạng chỉ có chính khách hàng đó mới có thể đọc được. use admin db.creat eRole( { role: "manageOpRole", privileges: [
{ resource: { cluster: true }, actions: [ "killop", "inprog" ] },
{ resource: { db: "", collection: "" }, actions: [ "killCursors" ] }
CHƯƠNG 416. TLS/ SSL được sử dụng trong MongoDB với một số chứng thư số dưới dạng tệp PEM được cấp bởi tổ chức phát hành chứng thư số hoặc có thể là chứng thư tự ký. Tiếp theo là sự hạn chế ở kênh truyền được mã hóa nhưng không có xác thực đối với danh tính máy chủ do đó dễ bị tấn công ở giữa đường truyền từ bên ngoài. Do đó, bạn nên sử dụng các chứng thư của cơ quan đáng tin cậy cho phép MongoDB drivers xác minh danh tính máy chủ.
CHƯƠNG 417. Bên cạnh mã hóa, TLS / SSL có thể được sử dụng trong việc xác thực máy khách và xác thực nội bộ của các thành viên của nhóm bản sao và cụm phân đoạn thông qua các chứng chỉ.
Cấu hình TLS/ SSL cho Client
CHƯƠNG 418. Có nhiều cài đặt tùy chọn TLS / SSL khác nhau có thể được sử dụng trong cấu hình của các giao thức này.
CHƯƠNG 419. --ssl: Cho phép kết nối TLS / SSL.
CHƯƠNG 420. mongo --ssl --host example.com --sslCAFile /etc/ssl/ca.pem
CHƯƠNG 421. --sslCAFile: Chỉ định tệp PEM của tổ chức phát hành chứng thư (CA) để xác minh chứng thư được cung cấp bởi mongod hoặc mongos. Do đó, Mongo shell sẽ xác minh chứng thư do cá thể mongod cấp dựa trên tệp CA được chỉ định và tên máy chủ.
CHƯƠNG 422. Kết nối phiên bản MongoDB yêu cầu chứng thư từ ứng dụng client:
CHƯƠNG 423. --sslPEMKeyFile: Chỉ định tệp .pem có chứa chứng thư mongo shell và khóa để hiển thị cho mongod hoặc mongos. Trong quá trình kết nối:
CHƯƠNG 424. Mongo shell sẽ xác minh xem chứng chỉ có phải từ cơ quan cấp chứng thư được chỉ định (--sslCAFile) hay không. Nếu không, shell sẽ tự ngắt kết nối.
CHƯƠNG 425. Shell sẽ xác minh xem tên máy chủ được chỉ định trong tùy chọn --host có khớp với SAN / CN trong chứng thư được hiển thị bởi mongod hoặc mongos hay không. Nếu tên máy
mongo --ssl --host hostname.example.com
--sslPEMKeyFile /etc/ssl/client.pem --sslCAFile /etc/ssl/ca.pem
chủ này không khớp với một trong hai, thì kết nối sẽ không thành công.
CHƯƠNG 426. Nếu không muốn sử dụng chứng thư tự ký, bạn phải đảm bảo mạng kết nối đáng tin cậy.
CHƯƠNG 427. Bên cạnh đó, cần giảm sự tiếp xúc của khóa bí mật, đặc biệt là những nơi có liên quan đến replica sets / sharded cluster. Điều này có thể đạt được bằng cách sử dụng các chứng thư khác nhau trên các máy chủ khác nhau.
CHƯƠNG 428. Các tùy chọn bổ sung có thể được sử dụng trong các kết nối là:
CHƯƠNG 429. requestSSL: Hạn chế mỗi máy chủ chỉ sử dụng các kết nối được mã hóa TLS/SSL.
CHƯƠNG 430. --sslAllowConnectionsWithoutCertificates: Cho phép xác thực nếu client xuất trình chứng thư, ngược lại nếu không có chứng thư, client sẽ vẫn được kết nối ở chế độ mã hóa. Ví dụ:
CHƯƠNG 431.
CHƯƠNG 432. --sslDisabledProtocols: ngăn chặn máy chủ chấp nhận các kết nối đến sử dụng các giao thức. Ví dụ:
CHƯƠNG 433.
CHƯƠNG 434. 2.3.3.2. Mã hóa dữ liệu ở trạng thái tĩnh
CHƯƠNG 435. Thuật toán mã hóa được sử dụng trong MongoDB Enterprise phiên bản 3.2 là AES256-GCM. Từ phiên bản 4.0, MongoDB Enterprise trên Windows không còn hỗ trợ AES256-GCM mà chỉ hỗ trợ trên Linux. Thay vào đó là sử dụng thuật toán mã hóa AES256-CBC. Nó sử dụng cùng một khóa bí mật để mã hóa và giải mã dữ liệu. Mã hóa có thể được bật bằng chế độ FIPS, do đó đảm bảo mã hóa đáp ứng tiêu chuẩn và tuân thủ cao nhất.
mongod --sslMode requireSSL --
sslAllowConnectionsWithoutCertificates
mongod --
sslMode requireSSL --sslDisabledProtocols TLS1_0,TLS1_1 --sslPEMKeyFile /etc/ssl/mongodb.pem
--sslCAFile /etc/ssl/ca.pem
CHƯƠNG 436. Toàn bộ tệp cơ sở dữ liệu được mã hóa bằng mã hóa dữ liệu trong suốt (TDE) ở tầng lưu trữ.
CHƯƠNG 437. Quá trình mã hóa dữ liệu bao gồm: - Tạo khóa chủ.
- Tạo khóa cho mỗi cơ sở dữ liệu.
- Mã hóa dữ liệu bằng các khóa cơ sở dữ liệu. - Mã hóa khóa cơ sở dữ liệu bằng khóa chủ.
CHƯƠNG 438. Bất cứ khi nào tệp được mã hóa, một khóa chủ sẽ được tạo ra và dễ dàng để hiểu cách các khóa này được quản lý và lưu trữ. Tất cả các khóa cơ sở dữ liệu được tạo sau đó đều được mã hóa bằng khóa chủ.
CHƯƠNG 439. Sự khác biệt giữa khóa cơ sở dữ liệu và khóa chủ là các khóa cơ sở dữ liệu có thể được lưu trữ cùng với chính dữ liệu được mã hóa nhưng đối với khóa chủ khuyến khích nên được lưu trữ trong một máy chủ khác với nơi dữ liệu được mã hóa.
CHƯƠNG 440. Quá trình mã hóa diễn ra minh bạch trong lớp lưu trữ; tức là tất cả các tệp dữ liệu được mã hóa hoàn toàn từ góc độ hệ thống tệp, và dữ liệu chỉ tồn tại ở trạng thái không được mã hóa trong bộ nhớ và trong quá trình truyền.
CHƯƠNG 441. Với dữ liệu được sao chép, các tiêu chuẩn mã hóa không được chia sẻ cho các nút khác vì dữ liệu không được mã hóa hoàn toàn thông qua dây nối. Người dùng có thể sử dụng lại khóa cho các nút khác tuy nhiên nên sử dụng các khóa khác nhau cho mỗi nút tương ứng khác nhau.