还有其他通过证书颁发机构生成服务器/客户端Pem的方法,即不涉及
file.srl,但是此答案是针对此问题的后续措施。
值得一提的是,大多数MongoDB v3.0 +发行版现在都包含对SSL的支持,请确保选择支持SSL的软件包。下面的示例已在带有PyMongo
v3.2.1的Ubuntu Linux 14.04上使用MongoDB
v3.2进行了测试。一台机器生成CA,服务器和客户端pem文件用于演示的位置。
让我们生成
ca.pem和
privkey.pem。主题结构为
/C=<Country Name>/ST=<State>/L=<LocalityName>/O=<Organisation Name>/emailAddress=<email>/CN=<Common Name>。
mkdir ~/sslcd ~/sslopenssl req -out ca.pem -new -x509 -days 3650 -subj "/C=AU/ST=NSW/O=Organisation/CN=root/emailAddress=user@domain.com"
生成
server .pem文件:
hostname # note down the valueecho "00" > file.srl # two random digits numberopenssl genrsa -out server.key 2048openssl req -key server.key -new -out server.req -subj "/C=AU/ST=NSW/O=Organisation/CN=server1/CN=<hostname value>/emailAddress=user@domain.com"openssl x509 -req -in server.req -CA ca.pem -CAkey privkey.pem -CAserial file.srl -out server.crt -days 3650cat server.key server.crt > server.pemopenssl verify -CAfile ca.pem server.pem
尽管您也可以使用IP地址作为
CN值,但不建议这样做。请参阅RFC-6125。
现在让我们生成
client.pem文件:
openssl genrsa -out client.key 2048openssl req -key client.key -new -out client.req -subj "/C=AU/ST=NSW/O=Organisation/CN=client1/emailAddress=user@domain.com"openssl x509 -req -in client.req -CA ca.pem -CAkey privkey.pem -CAserial file.srl -out client.crt -days 3650cat client.key client.crt > client.pemopenssl verify -CAfile ca.pem client.pem
生成
.pem文件后,现在可以运行mongod。例如:
mongod --sslMode requireSSL --sslPEMKeyFile ~/server.pem --sslCAFile ~/ca.pem
您可以使用mongo
shell测试连接,例如:
mongo --ssl --sslPEMKeyFile ~/client.pem --sslCAFile ~/ca.pem --host <server hostname>
一旦成功建立连接,就可以尝试使用PyMongo。例如:
import ssl from pymongo import MongoClientclient = 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部署应使用由单个证书颁发机构生成和签名的有效证书。如果使用自签名证书,尽管将对通信通道进行加密,但不会验证服务器身份。使用由受信任的证书颁发机构签名的证书,将允许MongoDB驱动程序验证服务器的身份。通常,除非信任网络,否则请避免使用自签名证书。
您可能会发现有用的其他相关链接:
- MongoDB:配置SSL。
- MongoDB:安全性教程。
- MongoDB安全清单。



