Docs 菜单
Docs 主页
/
BI Connector
/

为 BI Connector 配置 TLS

在此页面上

  • 先决条件
  • 创建和测试自签名证书

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

重要

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

  • 有足够权限运行mongosqld的 MongoDB 用户。

  • 一个可以启动和停止的 mongod实例。

  • 可以启动和停止的mongosqld实例。

  • OpenSSL

  • MySQLshell

    提示

    另请参阅:

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

提示

另请参阅:

本教程包含有关创建多个文件的说明,这些文件允许mongosqld进程接受来自SQL客户端(例如MySQL shell )的 OpenSSL 加密连接,并与mongod实例建立加密连接。 我们创建两个 .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 响应必须是 实例 使用 TLSmongod 的服务器的 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 步骤 中创建的第一个 CSR2 的 条目不同。

启动 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