为了使 BI Connector 能够安全地传输数据,您应该在 MongoDB 实例、 mongosqld实例和 BI 工具中启用传输层安全性 (TLS) 加密。 TLS配置的完整描述超出了本文档的范围,但本教程概述了创建自己的TLS证书用于测试目的以及在启用TLS的情况下启动 MongoDB 组件的过程。
重要
这些过程仅用于测试目的。 生产环境应使用由公认的证书颁发机构 (CA) 颁发的TLS证书。
先决条件
关于集群可用性的说明
要确保BI Connector启用 TLS 时MongoDB副本集和分片的集群的读取可用性,请使用滚动升级过程。当副本集主节点 (primary node in the replica set)升级时,应用程序必须等到故障转移和选举周期完成。
提示
创建和测试自签名证书
本教程包含创建多个文件的说明,这些文件允许 mongosqld进程接受来自SQL客户端(例如MySQL Shell )的 OpenSSL加密连接,并与 mongod实例建立加密连接。我们创建两个 .pem 文件。每个文件都包含一个加密密钥和一个自签名 TLS 证书。
创建证书目录。
使用 Windows
cmd提示符,创建一个目录来保存证书。 本教程使用C:\opt\certs。mkdir C:\opt\certs cd C:\opt\certs 本教程假定您的 OpenSSL 目录位于
C:\OpenSSL。 如果它位于系统的其他位置,请适当编辑命令或将目录移动到C:\OpenSSL。如果
C:\OpenSSL\bin目录不包含名为openssl.cfg的配置文件,请创建一个。例子
这是配置文件示例。
# # OpenSSL configuration file. # # Establish working directory. dir = . [ ca ] default_ca = CA_default [ CA_default ] serial = $dir/serial database = $dir/certindex.txt new_certs_dir = $dir/certs certificate = $dir/cacert.pem private_key = $dir/private/cakey.pem default_days = 365 default_md = md5 preserve = no email_in_dn = no nameopt = default_ca certopt = default_ca policy = policy_match [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional [ req ] default_bits = 1024 default_keyfile = key.pem default_md = md5 string_mask = nombstr distinguished_name = req_distinguished_name req_extensions = v3_req [ req_distinguished_name ] # Variable name Prompt string #--------------------------- ---------------------------------- 0.organizationName = Organization Name (company) organizationalUnitName = Organizational Unit Name (department, division) emailAddress = Email Address emailAddress_max = 40 localityName = Locality Name (city, district) stateOrProvinceName = State or Province Name (full name) countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 commonName = Common Name (hostname, IP, or your name) commonName_max = 64 # Default values for the above, for consistency and less typing. # Variable name Value #--------------------------- ------------------------------ 0.organizationName_default = My Company localityName_default = My Town stateOrProvinceName_default = State or Providence countryName_default = US [ v3_ca ] basicConstraints = CA:TRUE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always [ v3_req ] basicConstraints = CA:FALSE subjectKeyIdentifier = hash 设置环境变量以供日后使用。
set OPENSSL_CONF=C:\OpenSSL\bin\openssl.cfg
生成自签名证书颁发机构。
将目录更改为
C:\opt\certs。cd C:\opt\certs 启动 OpenSSL 应用程序。
C:\OpenSSL\bin\openssl.exe C:\Users\username>cd C:\opt\certs C:\Users\username>C:\OpenSSL\bin\openssl.exe OpenSSL> 以下命令生成私钥并将其输出到
mdbprivate.key。genrsa -out C:\opt\certs\mdbprivate.key -aes256 \ -passout pass:password 以下命令生成证书颁发机构文件并将其输出到
mdbca.crt。以下命令会提示用户输入多条信息,这些信息将合并到证书请求中。 其中一个字段名为
Common Name,即完全限定的域名 (FQDN)。 本教程此步骤中生成的证书的Common Name条目必须与第 3 和第 9 步中生成的证书的Common Name条目不同。req -x509 -new -key C:\opt\certs\mdbprivate.key -days 1000 -out C:\opt\certs\mdbca.crt -passin pass:password
我们现在有两个文件: mdbca.crt证书颁发机构文件和用于签署该请求的mdbprivate.key密钥。
为 MongoDB Server 生成 PEM 证书。
以下命令生成供 mongod进程TLS 使用的密钥和 CSR。对于此步骤,Common Name 响应必须是 mongod实例使用 TLS 的服务器的 FQDN,例如 www.example.com。
在 OpenSSL 提示符下输入以下命令:
req -new -nodes -newkey rsa:2048 -keyout .\mdb.key -out .\mdb.csr
更新 mongod 配置文件。
要将 mongod 配置为要求对传入连接使用 TLS,请按如下方式修改配置文件。您的值可能会有所不同,具体取决于创建 TLS 文件的位置。
选项 | 值 |
|---|---|
| |
| |
| |
| |
|
例子
以下配置文件包含 TLS 连接和 x.509身份验证的指令。
您的配置文件可能需要其他或不同的选项。
systemLog: destination: file path: 'C:\data\mongod.log' logAppend: true net: bindIp: <step-3-FQDN> port: 27017 ssl: mode: requireSSL PEMKeyFile: 'C:\opt\certs\mdb.pem' CAFile: 'C:\opt\certs\mdbca.crt' clusterFile: 'C:\opt\certs\mdb.pem' security: clusterAuthMode: x509 storage: dbPath: 'C:\data\db'
为BI Connector创建密钥和CSR。
此 CSR 的 Common Name 条目应与运行mongosqld 的服务器的 FQDN 匹配。
注意
此 CSR 的 Common Name 条目必须与您在步骤 2 中创建的第一个 CSR 的 Common Name 条目不同。
启动 OpenSSL 应用程序,并在 OpenSSL 提示符下输入以下命令:
req -new -nodes -newkey rsa:2048 -keyout .\bi.key -out .\bi.csr
开始 mongosqld
您的 mongosqld 配置文件需要多个 TLS 特定的选项。您的值可能会有所不同,具体取决于创建 TLS 证书和 .pem 文件的位置。
选项 | 值 |
|---|---|
| |
| |
| |
| |
| |
|
以下示例配置文件使用位于C:\opt\certs目录中的文件。 它指定对应于 MongoDB 用户的用户名和密码,该用户有足够的权限运行mongosqld并从test数据库读取数据。
systemLog: logAppend: false path: 'C:\logs\mongosqld.log' verbosity: 2 security: enabled: true mongodb: net: uri: <step-3-FQDN> auth: username: <username> password: <password> ssl: enabled: true PEMKeyFile: 'C:\opt\certs\mdb.pem' CAFile: 'C:\opt\certs\mdbca.crt' net: bindIp: localhost port: 3307 ssl: mode: 'requireSSL' PEMKeyFile: 'C:\opt\certs\bi.pem' CAFile: 'C:\opt\certs\mdbca.crt' schema: sample: namespaces: 'test.*'
mongosqld--config使用 选项启动 ,以使用配置文件。
.\mongosqld --config C:\path\to\mongosqld.conf
使用 ODBC DSN 进行测试。
要创建通过 TLS 连接的 ODBC DSN ,请按照 DSN 教程 中的说明进行操作,并使用 TLS 证书路径信息配置新的 DSN 。

注意
您无需在SSL Certificate字段中输入证书路径。
在 DSN 配置屏幕的Connection标签页上,选中标有Enable Cleartext Authentication的复选框。

单击Test按钮测试 ODBC 连接。
设置DSN后,您可以使用它连接到任何几种 BI 工具,例如Power BI或Qlik Sense。
生成自签名证书颁发机构。
以下命令生成私钥并将其输出到
mdbprivate.key。openssl genrsa -out /opt/certs/mdbprivate.key -aes256 \ -passout pass:password 以下命令生成证书颁发机构文件并将其输出到
mdbca.crt。以下命令会提示用户输入多条信息,这些信息将合并到证书请求中。 其中一个字段名为
Common Name,即完全限定的域名 (FQDN)。 本教程此步骤中生成的证书的Common Name条目必须与第 3 和第 9 步中生成的证书的Common Name条目不同。openssl req -x509 -new -key /opt/certs/mdbprivate.key \ -days 1000 -out /opt/certs/mdbca.crt \ -passin pass:password
我们现在有两个文件: mdbca.crt证书颁发机构文件和用于签署该请求的mdbprivate.key密钥。
为 MongoDB Server 生成 PEM 证书。
以下命令生成供 mongod进程使用的密钥以及证书签名请求 (CSR)。 Common Name 响应必须是运行 mongod实例的托管的完全限定域名 ( FQDN ),例如 www.example.com。要确定服务器的 FQDN,请在命令提示符下使用 hostname -f。
系统可能会提示您输入Extra Attribute元素的挑战密码。 在本教程中,您可以将此元素留空。
openssl req -new -nodes -newkey rsa:2048 -keyout /opt/certs/mdb.key \ -out /opt/certs/mdb.csr
更新 mongod 配置文件。
要将 mongod 配置为要求对传入连接使用 TLS,请按如下方式修改配置文件。您的值可能会有所不同,具体取决于创建 TLS 文件的位置。
选项 | 值 |
|---|---|
| |
| |
| |
| |
|
|
例子
以下配置文件包含 TLS 连接和 x.509身份验证的指令。
您的配置文件可能需要其他或不同的选项。
systemLog: destination: file path: '/data/mongod.log' logAppend: true processManagement: fork: true pidFilePath: '/data/mongod.pid' net: bindIp: localhost port: 27017 ssl: mode: requireSSL PEMKeyFile: '/opt/certs/mdb.pem' CAFile: '/opt/certs/mdbca.crt' clusterFile: '/opt/certs/mdb.pem' security: clusterAuthMode: x509 storage: dbPath: '/data'
为BI Connector创建密钥和CSR。
此 CSR 的 Common Name 条目应与运行mongosqld 的托管的 FQDN 匹配。要确定托管的 FQDN,请在命令提示符下使用 hostname -f。
系统可能会提示您输入Extra Attribute元素的挑战密码。 在本教程中,您可以将此元素留空。
注意
此 CSR 的 Common Name 条目必须与您在步骤 2 中创建的第一个 CSR 的 Common Name 条目不同。
openssl req -new -nodes -newkey rsa:2048 \ -keyout /opt/certs/bi.key \ -out /opt/certs/bi.csr
启动 mongosqld。
您的mongosqld配置文件需要多个TLS特定的选项。 您的值可能会有所不同,具体取决于创建TLS文件的位置。
选项 | 值 |
|---|---|
| |
| |
| |
| |
| |
|
例子
以下配置文件使用位于/opt/certs/目录中的文件。 它指定一个用户名和密码,对应于具有足够权限运行mongosqld和读取test数据库的MongoDB用户。
systemLog: logAppend: false path: './logs/mongosqld.log' verbosity: 2 security: enabled: true mongodb: net: uri: <step9-common-name> auth: username: <username> password: <password> ssl: enabled: true PEMKeyFile: '/opt/certs/mdb.pem' CAFile: '/opt/certs/mdbca.crt' net: bindIp: localhost port: 3307 ssl: mode: 'requireSSL' PEMKeyFile: '/opt/certs/bi.pem' CAFile: '/opt/certs/mdbca.crt' schema: sample: namespaces: 'test.*'
mongosqld--config使用 选项启动 ,以使用配置文件。
mongosqld --config /path/to/mongosqld.conf