为 BI Connector 配置 TLS
在此页面上
为了使BI Connector能够安全地传输数据,您应该在MongoDB实例、 mongosqld
实例和BI工具中启用传输层安全性 (TLS)加密。 TLS配置的完整描述超出了本文档的范围,但本教程概述了创建自己的TLS证书用于测试目的以及在启用TLS的情况下启动MongoDB组件的进程。
重要
这些过程仅用于测试目的。 生产环境应使用由公认的证书颁发机构 (CA) 颁发的TLS证书。
先决条件
关于集群可用性的说明
为确保 BI Connector 启用 TLS 时 MongoDB 副本集 和 分片集群 的读取可用性,请使用 滚动升级过程 。当副本集主节点升级时,应用程序必须等到故障转移和选举周期完成。
创建和测试自签名证书
本教程包含有关创建多个文件的说明,这些文件允许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
密钥。
更新mongod
配置文件。
要将mongod
配置为要求对传入连接使用TLS ,请按如下方式修改配置文件。 您的值可能会有所不同,具体取决于创建TLS文件的位置。
选项 | 值 |
---|---|
requireSSL | |
C:\opt\certs\mdb.pem | |
C:\opt\certs\mdbca.crt | |
C:\opt\certs\mdb.pem | |
x509 |
例子
以下配置文件包含针对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'
开始 mongosqld
您的mongosqld
配置文件需要多个TLS特定的选项。 您的值可能会有所不同,具体取决于创建TLS证书和.pem
文件的位置。
选项 | 值 |
---|---|
true | |
C:\opt\certs\mdb.pem | |
C:\opt\certs\mdbca.crt | |
requireSSL | |
C:\opt\certs\bi.pem | |
C:\opt\certs\mdbca.crt |
以下示例配置文件使用位于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文件的位置。
选项 | 值 |
---|---|
requireSSL | |
/opt/certs/mdb.pem | |
/opt/certs/mdbca.crt | |
/opt/certs/mdb.pem | |
security.clusterAuthmode | x509 |
例子
以下配置文件包含针对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。
Common Name
此 CSR 的 条目应与运行 的托管的 FQDN mongosqld
相匹配。要确定托管的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文件的位置。
选项 | 值 |
---|---|
true | |
/opt/certs/mdb.pem | |
/opt/certs/mdbca.crt | |
requireSSL | |
/opt/certs/bi.pem | |
/opt/certs/mdbca.crt |
例子
以下配置文件使用位于/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