文档文档

启用 TLS 加密

启用 TLS 加密客户端和 InfluxDB 服务器之间的通信。当配置签名证书后,TLS 还允许客户端验证 InfluxDB 服务器的真实性。

按照步骤设置基于 HTTPS 的 TLS,连接到您的服务器,并排除问题

InfluxData 强烈建议 启用 HTTPS,特别是当您计划通过网络向 InfluxDB 发送请求时。

获取要求

要使用 InfluxDB 启用 HTTPS,您需要传输层安全 (TLS) 证书,也称为安全套接字层 (SSL) 证书。 InfluxDB 支持三种类型的 TLS 证书

由证书颁发机构 (CA) 签名的单域名证书

单域名证书为 HTTPS 请求提供加密安全性,并允许客户端验证 InfluxDB 服务器的身份。这些证书由受信任的第三方 证书颁发机构 (CA) 签名和颁发。使用此证书选项,每个 InfluxDB 实例都需要一个唯一的单域名证书。

由证书颁发机构签名的通配符证书

通配符证书为 HTTPS 请求提供加密安全性,并允许客户端验证 InfluxDB 服务器的身份。通配符证书可用于不同服务器上的多个 InfluxDB 实例。

自签名证书

自签名证书不是由受信任的第三方 CA 签名的。与 CA 签名证书不同,自签名证书仅为 HTTPS 请求提供加密安全性。它们不允许客户端验证 InfluxDB 服务器的身份。使用此证书选项,每个 InfluxDB 实例都需要一个唯一的自签名证书。您可以在自己的机器上生成自签名证书。

配置 InfluxDB 以使用 TLS

  1. 下载或生成证书文件
  2. 设置证书文件权限
  3. 使用 TLS 标志运行 influxd
  4. 验证 TLS 连接

下载或生成证书文件

选择以下选项之一

下载并安装 CA 证书文件

如果使用由 CA 签名的证书,请按照其说明下载并安装证书文件。记下证书文件的安装位置,然后继续设置证书文件权限

我的证书在哪里?

证书文件的位置取决于您的系统、域名和证书颁发机构。

例如,如果 Let’s Encrypt 是您的 CA,并且您使用 certbot 安装证书,则默认位置是 /etc/letsencrypt/live/$domain。有关 Let’s Encrypt 证书路径的更多信息,请参阅 我的证书在哪里?

生成自签名证书

要生成自签名证书,请在您的系统上使用 openssl 命令。

以下示例

  1. 为您的 TLS 证书配置主题备用名称 (subjectAltName, SAN)。
  2. 为类 Unix 和 Windows 系统生成位于 /etc/ssl 中的证书。

仅出于示例目的,此代码创建了一个未加密的私钥。

加密私钥

使用加密密钥以增强安全性。如果您必须使用未加密的密钥,请确保安全地存储它并具有适当的文件权限。

# Create a temporary configuration file that defines properties for
# the Subject Alternative Name (SAN) extension
cat > san.cnf <<EOF
   [req]
   distinguished_name = req_distinguished_name
   req_extensions = v3_req
   prompt = no

   [req_distinguished_name]
   C = US
   ST = California
   L = San Francisco
   O = Example Company
   OU = IT Department
   CN = example.com

   [v3_req]
   keyUsage = keyEncipherment, dataEncipherment
   extendedKeyUsage = serverAuth
   subjectAltName = @alt_names

   [alt_names]
   DNS.1 = example.com
   DNS.2 = www.example.com
   IP.1 = 10.1.2.3
EOF

# Generate a private key and certificate signing request (CSR)
# using the configuration file 
openssl req -new -newkey rsa:2048 -nodes \
  -keyout /etc/ssl/influxdb-selfsigned.key \
  -out /etc/ssl/influxdb-selfsigned.csr \
  -config san.cnf

# Generate the self-signed certificate
openssl x509 -req -in /etc/ssl/influxdb-selfsigned.csr \
  -signkey /etc/ssl/influxdb-selfsigned.key \
  -out /etc/ssl/influxdb-selfsigned.crt \
  -days NUMBER_OF_DAYS \
  -extensions v3_req -extfile san.cnf

# Remove the temporary configuration file
rm san.cnf

将以下内容替换为您自己的值

  • NUMBER_OF_DAYS:文件保持有效的天数
  • /etc/ssl:您的系统的 SSL 配置目录
  • req_distinguished_namealt_names 中的配置字段值——例如,在 [alt_names] 部分中,设置您用于访问 InfluxDB 服务器的域名和 IP 地址。

输出是一个私钥和一个 CSR,其中包括 主题备用名称 SAN 扩展中指定的域名和 IP 地址。生成的证书对 example.comwww.example.com 和 IP 地址 10.1.2.3 有效。

设置证书文件权限

运行 InfluxDB 的用户必须对 TLS 证书文件具有读取权限。

您可以选择设置多个用户、组和权限。最终,请确保所有运行 InfluxDB 的用户都对 TLS 证书具有读取权限。

在您的终端中,运行 chown 以设置所有者,并运行 chmod 以设置已安装证书文件的权限。

以下示例演示了如何将所有权转移给用户和组 influxdb,并在前面的步骤中生成的自签名证书和密钥文件上设置读取权限

sudo chown influxdb: /etc/ssl/influxdb-selfsigned.crt /etc/ssl/influxdb-selfsigned.key
sudo chmod 644 /etc/ssl/influxdb-selfsigned.crt
sudo chmod 600 /etc/ssl/influxdb-selfsigned.key

验证证书和密钥文件

为了确保证书和密钥文件正确且相互匹配,请在您的终端中输入以下命令

openssl x509 -noout -modulus -in /etc/ssl/influxdb-selfsigned.crt | openssl md5
openssl rsa -noout -modulus -in /etc/ssl/influxdb-selfsigned.key | openssl md5

使用 TLS 标志运行 influxd

要使用 TLS 命令行标志启动 InfluxDB,请输入以下命令,并提供密钥和证书文件的路径

influxd \
  --tls-cert="/etc/ssl/influxdb-selfsigned.crt" \
  --tls-key="/etc/ssl/influxdb-selfsigned.key" > /var/log/influxdb.log 2>&1 &

如果成功,InfluxDB 将在后台运行并记录到 influxdb.log

验证 TLS 连接

要测试您的证书,请使用 https:// 协议访问 InfluxDB——例如,使用 cURL

curl --verbose https://localhost:8086/api/v2/ping

如果使用自签名证书,请跳过证书验证——例如,在 cURL 命令中,传递 -k, --insecure 标志

curl --verbose --insecure https://localhost:8086/api/v2/ping

如果成功,curl --verbose 输出将显示 TLS 握手——例如

* [CONN-0-0][CF-SSL] TLSv1.3 (IN), TLS handshake

您可以使用 tls-min-versiontls-strict-ciphers 进一步配置 TLS 设置。

将 Telegraf 连接到安全的 InfluxDB 实例

要将 Telegraf 连接到启用了 TLS 的 InfluxDB 2.7 实例,请更新 Telegraf 配置文件中的以下 influxdb_v2 输出设置

  • 更新 URL 以使用 HTTPS 而不是 HTTP。
  • 如果使用自签名证书,请取消注释并将 insecure_skip_verify 设置为 true

Telegraf 配置示例

###############################################################################
#                            OUTPUT PLUGINS                                   #
###############################################################################

# Configuration for sending metrics to InfluxDB
[[outputs.influxdb_v2]]
  ## The URLs of the InfluxDB cluster nodes.
  ##
  ## Multiple URLs can be specified for a single cluster, only ONE of the
  ## urls will be written to each interval.
  urls = ["https://127.0.0.1:8086"]

  [...]

  ## Optional TLS Config for use on HTTP connections.
  [...]
  ## Use TLS but skip chain & host verification
  insecure_skip_verify = true

使用更新后的配置文件重启 Telegraf。

TLS 问题排查

识别和解决激活 TLS 后出现的问题。

检查 InfluxDB 日志

查看 InfluxDB 日志中是否有关于该问题的任何错误消息或警告。

TLS 错误示例

msg="http: TLS handshake error from [::1]:50476:
remote error: tls: illegal parameter" log_id=0rqN8H_0000 service=http

验证证书和密钥文件

为了确保证书和密钥文件正确且相互匹配,请在您的终端中输入以下命令

openssl x509 -noout -modulus -in /etc/ssl/influxdb-selfsigned.crt | openssl md5
openssl rsa -noout -modulus -in /etc/ssl/influxdb-selfsigned.key | openssl md5

使用 OpenSSL 进行测试

使用 OpenSSL 测试服务器的证书和密钥——例如,在您的终端中输入以下命令

openssl s_client -connect localhost:8086 -CAfile /etc/ssl/influxdb-selfsigned.crt

检查文件权限

确保 InfluxDB 进程对证书和密钥文件具有读取访问权限——例如,输入以下命令以设置文件权限

sudo chmod 644 /etc/ssl/influxdb-selfsigned.crt
sudo chmod 600 /etc/ssl/influxdb-selfsigned.key

验证 TLS 配置

确保 InfluxDB 中的 TLS 配置正确。检查 InfluxDB 配置或命令行标志中证书和密钥文件的路径。

错误示例:无法验证 <IP_ADDRESS> 的证书

Sep 25 14:00:02 host influxd-systemd-start.sh[11782]: ts=2024-09-25T12:00:02.055617Z lvl=error msg="Unable to gather" log_id=0rr6jG30000 service=scraper scraper-name="new target" error="Get \"https://10.1.2.3:8086/metrics\": tls: failed to verify certificate: x509: cannot validate certificate for 10.1.2.3 because it doesn't contain any IP SANs"
Sep 25 14:00:02 host influxd-systemd-start.sh[11782]: ts=2024-09-25T12:00:02.055397Z lvl=info msg="http: TLS handshake error from 10.1.2.3:46380: remote error: tls: bad certificate" log_id=0rr6jG30000 service=http

如果您通过 IP 地址访问您的 InfluxDB 服务器,请在您的 subjectAltName 配置中包含该地址。

更新 OpenSSL 和 InfluxDB

确保您正在使用最新版本的 OpenSSL 和 InfluxDB,因为更新可能包含针对 TLS 相关问题的修复。


此页内容是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像当前一样使用它,而无需对您的代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、近实时数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。 InfluxDB 3 Enterprise 以 Core 的基础为构建,增加了高可用性、读取副本、增强的安全性以及数据压缩,从而加快查询速度并优化存储。 InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看