MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Koneksi SSL yang ditandatangani sendiri menggunakan PyMongo

Ada cara lain untuk menghasilkan pem server/klien dengan Otoritas Sertifikat yaitu tanpa melibatkan file.srl , tetapi jawaban ini adalah untuk menindaklanjuti pertanyaan tersebut.

Patut disebutkan bahwa sebagian besar distribusi MongoDB v3.0+ sekarang menyertakan dukungan untuk SSL, pastikan untuk memilih paket yang mendukung SSL. Contoh di bawah ini diuji dengan MongoDB v3.2 di Ubuntu Linux 14.04 dengan PyMongo v3.2.1. Di mana satu mesin menghasilkan file pem CA, server, dan klien untuk tujuan demonstrasi.

Mari buat ca.pem dan privkey.pem . Struktur subjeknya adalah /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]"

Buat server .pem berkas:

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

Meskipun Anda dapat menggunakan alamat IP sebagai CN nilai juga, tidak dianjurkan. Lihat RFC-6125.

Sekarang mari kita buat client.pem berkas:

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

Setelah membuat .pem file, sekarang Anda dapat menjalankan mongod. misalnya:

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

Anda dapat menguji koneksi menggunakan shell mongo, misalnya:

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

Setelah Anda berhasil terhubung, Anda dapat mencoba dengan PyMongo. Misalnya:

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'
 )

Atau, Anda juga dapat menggunakan mongod tandai --sslAllowInvalidHostnames untuk menentukan localhost , dll.

Untuk penggunaan produksi, penerapan MongoDB Anda harus menggunakan sertifikat valid yang dibuat dan ditandatangani oleh otoritas sertifikat tunggal. Jika Anda menggunakan sertifikat yang ditandatangani sendiri, meskipun saluran komunikasi akan dienkripsi, tidak akan ada validasi identitas server. Menggunakan sertifikat yang ditandatangani oleh otoritas sertifikat tepercaya akan mengizinkan driver MongoDB untuk memverifikasi identitas server. Secara umum, hindari menggunakan sertifikat yang ditandatangani sendiri kecuali jaringannya tepercaya.

Tautan terkait lainnya yang mungkin berguna bagi Anda:

  • MongoDB:Konfigurasikan SSL.
  • MongoDB:Tutorial Keamanan.
  • Daftar Periksa Keamanan MongoDB.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dapatkan nama semua kunci dalam koleksi

  2. Melakukan kueri regex dengan PyMongo

  3. MongoDB findOneAndDelete()

  4. MongoDB $cosh

  5. Sisipan mongodb/luwak bukan fungsi