使用InfluxDB启用HTTPS
此页面记录了早期版本的 InfluxDB OSS。 InfluxDB OSS v2 是最新的稳定版本。 请参阅等效的 InfluxDB v2 文档: 启用 TLS 加密。
启用HTTPS会加密客户端与InfluxDB服务器之间的通信。配置了签名证书后,HTTPS还可以验证InfluxDB服务器对连接客户端的真实性。
InfluxData 强烈建议 启用HTTPS,特别是如果您计划通过网络向InfluxDB发送请求。
要求
要在InfluxDB中启用HTTPS,您需要一个现有或新的InfluxDB实例和一个传输层安全性(TLS)证书(也称为安全套接字层(SSL)证书)。
InfluxDB 支持三种类型的 TLS 证书:
由证书颁发机构签发的单域名证书
单域证书为HTTPS请求提供加密安全,并允许客户端验证InfluxDB服务器的身份。使用此证书选项,每个InfluxDB实例都需要一个唯一的单域证书。
由证书颁发机构签署的通配符证书
通配符证书为HTTPS请求提供加密安全性,并允许客户端验证InfluxDB服务器的身份。 通配符证书可以在不同服务器上的多个InfluxDB实例之间使用。
自签名证书
自签名证书不是由证书颁发机构(CA)签署的。在自己的机器上生成自签名证书。与CA签名的证书不同,自签名证书仅为HTTPS请求提供加密安全性。它们不允许客户端验证InfluxDB服务器的身份。使用此证书选项,每个InfluxDB实例都需要一个唯一的自签名证书。
无论您的证书类型如何,InfluxDB 支持由私钥文件 (.key) 和签名证书文件 (.crt) 组成的证书对,此外还支持将私钥文件和签名证书文件合并为单个捆绑文件 (.pem) 的证书。
以下两个部分概述了如何在Ubuntu 16.04上使用CA签名的证书和自签名证书为InfluxDB设置HTTPS。步骤可能在其他操作系统中有所不同。
使用CA证书设置HTTPS
步骤 1:安装证书
将私钥文件 (.key) 和签名证书文件 (.crt) 或单个捆绑文件 (.pem) 放置在 /etc/ssl 目录中。
步骤 2:设置证书文件权限
运行InfluxDB的用户必须具有对TLS证书的读取权限。
注意: 您可以选择设置多个用户、组和权限。最终,确保所有运行 InfluxDB 的用户都具有对 TLS 证书的读取权限。
运行以下命令以授予InfluxDB对证书文件的读取和写入权限。
sudo chown influxdb:influxdb /etc/ssl/<CA-certificate-file>
sudo chmod 644 /etc/ssl/<CA-certificate-file>
sudo chmod 600 /etc/ssl/<private-key-file>
步骤 3:审核 TLS 配置设置
默认情况下,InfluxDB 支持 ciphers、min-version 和 max-version 的值,这些值列在 Go crypto/tls 包文档的常量部分,并依赖于用于构建 InfluxDB 的 Go 版本。您可以配置 InfluxDB 以支持限制的 TLS 密码套件 ID 和版本列表。有关更多信息,请参见 传输层安全性 (TLS) 配置设置。
步骤 4:在 InfluxDB 配置文件中启用 HTTPS
HTTPS 默认情况下是禁用的。
在配置文件 (/etc/influxdb/influxdb.conf) 的 [http] 部分启用 HTTPS,通过设置:
https-enabled设置为truehttps-certificate到/etc/ssl/(或到.crt /etc/ssl/).pem https-private-key到/etc/ssl/(或到.key /etc/ssl/).pem
[http]
[...]
# Determines whether HTTPS is enabled.
https-enabled = true
[...]
# The SSL certificate to use when HTTPS is enabled.
https-certificate = "<bundled-certificate-file>.pem"
# Use a separate private key location.
https-private-key = "<bundled-certificate-file>.pem"
步骤 5:重新启动 InfluxDB 服务
重启InfluxDB进程以使配置更改生效:
sudo systemctl restart influxdb
步骤 6: 验证 HTTPS 设置
通过使用CLI工具连接到InfluxDB,验证HTTPS是否正常工作:
influx -ssl -host <domain_name>.com
成功的连接返回以下内容:
Connected to https://<domain_name>.com:8086 version 1.x.x
InfluxDB shell version: 1.x.x
>
就这样!您已经成功设置了与 InfluxDB 的 HTTPS。
使用自签名证书设置HTTPS
步骤 1:生成自签名证书
以下命令生成一个私钥文件 (.key) 和一个自签名证书文件 (.crt),这些文件在指定的 NUMBER_OF_DAYS 内有效。它将这些文件输出到 InfluxDB 数据库的默认证书文件路径,并赋予所需的权限。
sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/influxdb-selfsigned.key -out /etc/ssl/influxdb-selfsigned.crt -days <NUMBER_OF_DAYS>
当您执行命令时,它会提示您提供更多信息。 您可以选择填写该信息或留空; 这两种操作都会生成有效的证书文件。
运行以下命令以授予InfluxDB在证书上的读写权限。
chown influxdb:influxdb /etc/ssl/influxdb-selfsigned.*
步骤 2:检查 TLS 配置设置
默认情况下,InfluxDB 支持在 Go crypto/tls 包文档的常量部分 中列出的 TLS ciphers、 min-version 和 max-version 的值,并且依赖于用于构建 InfluxDB 的 Go 版本。您可以配置 InfluxDB 以支持受限的 TLS 密码套件 ID 和版本列表。有关更多信息,请参见 传输层安全性 (TLS) 设置 [tls]。
步骤 3:在配置文件中启用 HTTPS
HTTPS 默认情况下是禁用的。
在配置文件 (/etc/influxdb/influxdb.conf) 的 [http] 部分启用 HTTPS,通过设置:
https-enabled设置为truehttps-certificate到/etc/ssl/influxdb-selfsigned.crthttps-private-key到/etc/ssl/influxdb-selfsigned.key
[http]
[...]
# Determines whether HTTPS is enabled.
https-enabled = true
[...]
# The TLS or SSL certificate to use when HTTPS is enabled.
https-certificate = "/etc/ssl/influxdb-selfsigned.crt"
# Use a separate private key location.
https-private-key = "/etc/ssl/influxdb-selfsigned.key"
如果为 InfluxDB Enterprise 设置 HTTPS,您还需要在集群中的元节点和数据节点之间配置不安全的 TLS 连接。 指南中提供了 InfluxDB Enterprise HTTPS 设置指南。
步骤 4:重启 InfluxDB
重启InfluxDB进程以使配置更改生效:
sudo systemctl restart influxdb
步骤 5:验证 HTTPS 设置
通过使用CLI工具连接到InfluxDB,验证HTTPS是否正常工作:
influx -ssl -unsafeSsl -host <domain_name>.com
成功的连接返回以下内容:
Connected to https://<domain_name>.com:8086 version 1.x.x
InfluxDB shell version: 1.x.x
>
就这样!您已经成功设置了与 InfluxDB 的 HTTPS。
将Telegraf连接到受保护的InfluxDB实例
将Telegraf连接到使用HTTPS的InfluxDB实例需要一些额外的步骤。
在 Telegraf 配置文件 (/etc/telegraf/telegraf.conf) 中,编辑 urls 设置以指示 https 而不是 http,并将 localhost 更改为相关的域名。 如果您使用的是自签名证书,请取消注释 insecure_skip_verify 设置并将其设置为 true。
###############################################################################
# OUTPUT PLUGINS #
###############################################################################
>
# Configuration for InfluxDB server to send metrics to
[[outputs.influxdb]]
## The full HTTP or UDP endpoint URL for your InfluxDB instance.
## Multiple urls can be specified as part of the same cluster,
## this means that only ONE of the urls will be written to each interval.
# urls = ["udp://localhost:8089"] # UDP endpoint example
urls = ["https://<domain_name>.com:8086"]
>
[...]
>
## Optional SSL Config
[...]
insecure_skip_verify = true # <-- Update only if you're using a self-signed certificate
接下来,重启 Telegraf,你就准备好了!