启用 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
下载或生成证书文件
选择以下选项之一
下载并安装 CA 证书文件
如果使用由 CA 签名的证书,请按照其说明下载并安装证书文件。记下证书文件的安装位置,然后继续设置证书文件权限。
我的证书在哪里?
证书文件的位置取决于您的系统、域名和证书颁发机构。
例如,如果 Let’s Encrypt 是您的 CA,并且您使用 certbot 安装证书,则默认位置是 /etc/letsencrypt/live/$domain
。有关 Let’s Encrypt 证书路径的更多信息,请参阅 我的证书在哪里?
生成自签名证书
要生成自签名证书,请在您的系统上使用 openssl
命令。
以下示例
- 为您的 TLS 证书配置主题备用名称 (
subjectAltName
, SAN)。 - 为类 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_name
和alt_names
中的配置字段值——例如,在[alt_names]
部分中,设置您用于访问 InfluxDB 服务器的域名和 IP 地址。
输出是一个私钥和一个 CSR,其中包括 主题备用名称 SAN 扩展中指定的域名和 IP 地址。生成的证书对 example.com
、www.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-version
和 tls-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 相关问题的修复。
此页内容是否对您有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB 和本文档的反馈和错误报告。要获得支持,请使用以下资源
拥有年度合同或支持合同的客户可以联系 InfluxData 支持。