MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Kết nối SSL tự ký bằng PyMongo

Có những cách khác để tạo pem máy chủ / máy khách với Tổ chức phát hành chứng chỉ, tức là mà không liên quan đến file.srl , nhưng câu trả lời này là để theo dõi câu hỏi.

Đáng nói là hầu hết các bản phân phối MongoDB v3.0 + hiện nay đều có hỗ trợ SSL, hãy nhớ chọn gói hỗ trợ SSL. Ví dụ dưới đây được thử nghiệm với MongoDB v3.2 trên Ubuntu Linux 14.04 với PyMongo v3.2.1. Trong đó một máy duy nhất đã tạo tệp CA, máy chủ và tệp pem ứng dụng khách cho mục đích trình diễn.

Hãy tạo ca.pemprivkey.pem . Cấu trúc chủ đề là /C=<Country Name>/ST=<State>/L=<Locality Name>/O=<Organisation Name>/emailAddress=<email>/CN=<Common Name> .

mkdir ~/ssl
cd ~/ssl
openssl req -out ca.pem -new -x509 -days 3650 -subj "/C=AU/ST=NSW/O=Organisation/CN=root/[email protected]"

Tạo server .pem tệp:

hostname  # note down the value
echo "00" > file.srl # two random digits number
openssl genrsa -out server.key 2048
openssl req -key server.key -new -out server.req -subj  "/C=AU/ST=NSW/O=Organisation/CN=server1/CN=<hostname value>/[email protected]"
openssl x509 -req -in server.req -CA ca.pem -CAkey privkey.pem -CAserial file.srl -out server.crt -days 3650
cat server.key server.crt > server.pem
openssl verify -CAfile ca.pem server.pem

Mặc dù bạn có thể sử dụng địa chỉ IP là CN giá trị tốt, nó không được khuyến khích. Xem RFC-6125.

Bây giờ, hãy tạo client.pem tệp:

openssl genrsa -out client.key 2048
openssl req -key client.key -new -out client.req -subj "/C=AU/ST=NSW/O=Organisation/CN=client1/[email protected]"
openssl x509 -req -in client.req -CA ca.pem -CAkey privkey.pem -CAserial file.srl -out client.crt -days 3650
cat client.key client.crt > client.pem
openssl verify -CAfile ca.pem client.pem

Sau khi tạo .pem , bây giờ bạn có thể chạy mongod. ví dụ:

mongod --sslMode requireSSL --sslPEMKeyFile ~/server.pem --sslCAFile ~/ca.pem

Bạn có thể kiểm tra kết nối bằng cách sử dụng trình bao mongo, ví dụ:

mongo --ssl --sslPEMKeyFile ~/client.pem --sslCAFile ~/ca.pem --host <server hostname>

Sau khi kết nối thành công, bạn có thể thử với PyMongo. Ví dụ:

import ssl 
from pymongo import MongoClient
client = MongoClient(
    '<server hostname>',
    27017,
    ssl=True,
    ssl_certfile='~/client.pem',
    ssl_cert_reqs=ssl.CERT_REQUIRED,
    ssl_ca_certs='~/ca.pem'
 )

Ngoài ra, bạn cũng có thể sử dụng mongod cờ --sslAllowInvalidHostnames để chỉ định localhost , v.v.

Để sử dụng trong sản xuất, việc triển khai MongoDB của bạn phải sử dụng các chứng chỉ hợp lệ được tạo và ký bởi một tổ chức phát hành chứng chỉ duy nhất. Nếu bạn sử dụng chứng chỉ tự ký, mặc dù kênh liên lạc sẽ được mã hóa, nhưng sẽ không có xác nhận danh tính máy chủ. Việc sử dụng chứng chỉ do tổ chức phát hành chứng chỉ đáng tin cậy ký sẽ cho phép trình điều khiển MongoDB xác minh danh tính của máy chủ. Nói chung, tránh sử dụng chứng chỉ tự ký trừ khi mạng được tin cậy.

Các liên kết liên quan khác mà bạn có thể thấy hữu ích:

  • MongoDB:Định cấu hình SSL.
  • MongoDB:Hướng dẫn bảo mật.
  • Danh sách kiểm tra bảo mật MongoDB.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mã hóa MongoDB Data-at-Rest

  2. mgo - hiệu suất truy vấn dường như luôn chậm (500-650ms)

  3. Cập nhật các mảng lồng nhau trong mongodb

  4. Làm cách nào để thực hiện các truy vấn không phân biệt chữ hoa chữ thường trên Mongodb?

  5. Làm thế nào để thực hiện một Order By dựa trên giá trị trong MongoDB?