認証局を使用して、つまり file.srl
を使用せずに、サーバー/クライアントpemを生成する方法は他にもあります。 、しかし、この答えは質問をフォローアップすることです。
ほとんどのMongoDBv3.0+ディストリビューションにSSLのサポートが含まれるようになったことに言及する価値があります。必ず、SSLをサポートするパッケージを選択してください。以下の例は、PyMongov3.2.1を搭載したUbuntuLinux14.04上のMongoDBv3.2でテストされています。単一のマシンがデモンストレーション目的でCA、サーバー、およびクライアントのpemファイルを生成した場合。
ca.pem
を生成しましょう およびprivkey.pem
。件名の構造は、 / C =
> 。
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セキュリティチェックリスト。