对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

为 BI Connector 配置 TLS

为了使 BI Connector 能够安全地传输数据,您应该在 MongoDB 实例、 mongosqld实例和 BI 工具中启用传输层安全性 (TLS) 加密。 TLS配置的完整描述超出了本文档的范围,但本教程概述了创建自己的TLS证书用于测试目的以及在启用TLS的情况下启动 MongoDB 组件的过程。

重要

这些过程仅用于测试目的。 生产环境应使用由公认的证书颁发机构 (CA) 颁发的TLS证书。

为确保BI Connector启用 TLS 时MongoDB 副本集 分片的集群 的读取可用性,请使用 滚动升级过程 。当副本集主节点 (primary node in the replica set)节点升级时,应用程序必须等到故障转移和选举周期完成。

本教程包含创建多个文件的说明,这些文件允许 进程接受来自SQL客户端(例如MySQLmongosqld Shell)的mongod OpenSSL加密连接,并与 实例建立加密连接。我们创建两个.pem 文件。每个文件都包含一个加密密钥和一个自签名 TLS 证书。

1
  1. 使用 Windows cmd提示符,创建一个目录来保存证书。 本教程使用C:\opt\certs

    mkdir C:\opt\certs
    cd C:\opt\certs
  2. 本教程假定您的 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
  3. 设置环境变量以供日后使用。

    set OPENSSL_CONF=C:\OpenSSL\bin\openssl.cfg
2
  1. 将目录更改为C:\opt\certs

    cd C:\opt\certs
  2. 启动 OpenSSL 应用程序。

    C:\OpenSSL\bin\openssl.exe
    C:\Users\username>cd C:\opt\certs
    C:\Users\username>C:\OpenSSL\bin\openssl.exe
    OpenSSL>
  3. 以下命令生成私钥并将其输出到mdbprivate.key

    genrsa -out C:\opt\certs\mdbprivate.key -aes256 \
    -passout pass:password
  4. 以下命令生成证书颁发机构文件并将其输出到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密钥。

3

以下命令生成 mongod 进程 TLS 使用的密钥和 CSR。在此步骤中,Common Name 响应必须是 mongod 实例 TLS 所在服务器的 FQDN,如 www.example.com

在 OpenSSL 提示符下输入以下命令:

req -new -nodes -newkey rsa:2048 -keyout .\mdb.key -out .\mdb.csr
4

在 OpenSSL 提示符下输入以下命令:

x509 -CA .\mdbca.crt -CAkey .\mdbprivate.key -CAcreateserial -req -days 1000 -in .\mdb.csr -out .\mdb.crt -passin pass:password
5

.pem文件由密钥和证书连接在一起组成。 要创建.pem文件供 MongoDB 实例使用,请退出 OpenSSL 提示符,然后在C:\opt\certs目录中的cmd提示符下输入以下命令:

copy .\mdb.key + .\mdb.crt mdb.pem

现在,证书目录中应包含以下文件:

mdb.crt
mdb.csr
mdb.key
mdb.pem
mdbca.crt
mdbprivate.key

如有遗漏,请Go并查看前面的步骤,检查是否有错误。

6

要将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'

如果您希望使用命令行选项而不是配置文件来启动mongod ,请参阅mongosqld以了解等效选项。

7
mongod.exe --config C:\path\to\mongod.conf
8

使用mongo shell连接到服务器以测试TLS连接。 您的mongo命令需要以下TLS选项:

选项

C:\opt\certs\mdbca.crt (在步骤 2d 中生成的文件)

C:\opt\certs\mdb.pem (第 5 步中生成的文件)

.\mongo.exe --ssl --host <step3-common-name> ^
--sslCAFile "C:\opt\certs\mdbca.crt" ^
--sslPEMKeyFile "C:\opt\certs\mdb.pem"

适当地编辑您的选项。

9

Common Name CSR 的 条目应与运行 的服务器的mongosqld FQDN 相匹配。

注意

CSRCommon Name 条目必须与您在Common Name 第 2 步 中创建的第一个 CSR 的 条目不同。

启动 OpenSSL 应用程序,并在 OpenSSL 提示符下输入以下命令:

req -new -nodes -newkey rsa:2048 -keyout .\bi.key -out .\bi.csr
10

在 OpenSSL 提示符下输入以下命令:

x509 -CA .\mdbca.crt -CAkey .\mdbprivate.key -CAcreateserial -req -days 1000 -in .\bi.csr -out .\bi.crt -passin pass:password
11

退出 OpenSSL 应用程序,并在cmd提示符下输入以下命令:

copy .\bi.key + .\bi.crt bi.pem
12

您的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
13

要创建通过 TLS 连接的 ODBC DSN ,请按照 DSN 教程 中的说明进行操作,并使用 TLS 证书路径信息配置新的 DSN

DSN 配置屏幕的屏幕截图

注意

您无需在SSL Certificate字段中输入证书路径。

在 DSN 配置屏幕的Connection标签页上,选中标有Enable Cleartext Authentication的复选框。

DSN 配置屏幕的屏幕截图

单击Test按钮测试 ODBC 连接。

设置DSN后,您可以使用它连接到任何几种 BI 工具,例如Power BIQlik Sense。

1

创建一个目录来保存证书。 本教程使用/opt/certs 。 运行mongodmongosqld程序的系统用户必须能够读取您的证书目录。

mkdir /opt/certs
cd /opt/certs
2
  1. 以下命令生成私钥并将其输出到mdbprivate.key

    openssl genrsa -out /opt/certs/mdbprivate.key -aes256 \
    -passout pass:password
  2. 以下命令生成证书颁发机构文件并将其输出到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密钥。

3

以下命令生成供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
4
openssl x509 -CA /opt/certs/mdbca.crt
-CAkey /opt/certs/mdbprivate.key \
-CAcreateserial -req -days 1000 \
-in /opt/certs/mdb.csr -out /opt/certs/mdb.crt \
-passin pass:password
5

.pem文件由密钥和证书连接在一起组成。 要创建.pem文件供MongoDB实例使用,请在/opt/certs/目录中输入以下命令:

cat /opt/certs/mdb.key /opt/certs/mdb.crt > /opt/certs/mdb.pem

现在,证书目录中应包含以下文件:

mdb.crt
mdb.csr
mdb.key
mdb.pem
mdbca.crt
mdbprivate.key

如有遗漏,请Go并查看前面的步骤,检查是否有错误。

6

要将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'

如果您希望使用命令行选项而不是配置文件来启动mongod ,请参阅mongosqld以了解等效选项。

7
mongod --config /path/to/mongod.conf
8

使用mongo shell连接到服务器以测试TLS连接。 您的mongo命令需要以下TLS选项:

选项

/opt/certs/mdbca.crt (在步骤2.2中生成的文件)

/opt/certs/mdb.pem (第 5 步中生成的文件)

mongo --tls --host <step3-common-name> \
--tlsCAFile /opt/certs/mdbca.crt \
--tlsPEMKeyFile /opt/certs/mdb.pem

适当地编辑您的选项。

9

Common Name CSR 的 条目应与运行 的托管的 FQDN mongosqld相匹配。要确定托管的FQDN ,请在命令提示符下使用hostname -f

系统可能会提示您输入Extra Attribute元素的挑战密码。 在本教程中,您可以将此元素留空。

注意

CSRCommon Name条目必须与您在步骤2中创建的第一个CSRCommon Name条目不同。

openssl req -new -nodes -newkey rsa:2048 \
-keyout /opt/certs/bi.key \
-out /opt/certs/bi.csr
10
openssl x509 -CA /opt/certs/mdbca.crt \
-CAkey /opt/certs/mdbprivate.key \
-CAcreateserial -req -days 1000 \
-in /opt/certs/bi.csr -out /opt/certs/bi.crt \
-passin pass:password
11
cat /opt/certs/bi.key /opt/certs/bi.crt > /opt/certs/bi.pem
12

您的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
13

要连接到 mongosqld实例,请使用以下命令行选项启动MySQL shell 。

mysql --ssl-mode REQUIRED --ssl-ca=/opt/certs/mdbca.crt \
--enable-cleartext-plugin --port 3307 -u <username> -p