Documentation

启用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 证书路径的更多信息,请参见 Where are my certificates?

生成自签名证书

要生成 自签名证书,请在您的系统上使用 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 地址。

输出是一个私钥和一个包含指定域名和IP地址的CSR,位于主题备用名称SAN扩展中。生成的证书对于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 输出设置:

  • 将网址更新为使用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 配置中的证书和密钥文件的路径 或者命令行标志。

示例错误:无法验证证书

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 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看: