sql >> データベース >  >> NoSQL >> MongoDB

PyMongoを使用した自己署名SSL接続

    認証局を使用して、つまり file.srl を使用せずに、サーバー/クライアントpemを生成する方法は他にもあります。 、しかし、この答えは質問をフォローアップすることです。

    ほとんどのMongoDBv3.0+ディストリビューションにSSLのサポートが含まれるようになったことに言及する価値があります。必ず、SSLをサポートするパッケージを選択してください。以下の例は、PyMongov3.2.1を搭載したUbuntuLinux14.04上のMongoDBv3.2でテストされています。単一のマシンがデモンストレーション目的でCA、サーバー、およびクライアントのpemファイルを生成した場合。

    ca.pemを生成しましょう およびprivkey.pem 。件名の構造は、 / C = / ST = / L = / O = / emailAddress = / CN => 。

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

    server .pemを生成します ファイル:

    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
    

    IPアドレスはCNとして使用できますが 値も、お勧めしません。 RFC-6125を参照してください。

    それでは、 client.pemを生成しましょう。 ファイル:

    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
    

    .pemを生成した後 ファイル、これでmongodを実行できます。例:

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

    たとえば、mongoシェルを使用して接続をテストできます。

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

    正常に接続できたら、PyMongoを試すことができます。例:

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

    または、 mongodを使用することもできます フラグ--sslAllowInvalidHostnamesは、 localhostを指定します 、など。

    本番環境で使用する場合、MongoDBデプロイメントでは、単一の認証局によって生成および署名された有効な証明書を使用する必要があります。自己署名証明書を使用する場合、通信チャネルは暗号化されますが、サーバーIDの検証は行われません。信頼できる認証局によって署名された証明書を使用すると、MongoDBドライバーがサーバーのIDを確認できるようになります。一般に、ネットワークが信頼されていない限り、自己署名証明書の使用は避けてください。

    役立つと思われるその他の関連リンク:

    • MongoDB:SSLを構成します。
    • MongoDB:セキュリティチュートリアル。
    • MongoDBセキュリティチェックリスト。



    1. rails + docker + sidekiq + 127.0.0.1:6379でのRedisへの接続エラー(Errno ::ECONNREFUSED)

    2. Node.jsのソケットを介したRedis接続

    3. Angular、NodeJS、Express、MongoDBを使用してオンラインフードストアWebサイトを作成する

    4. MongoDBAggregationFrameworkのステージとパイプライン