influxb的HTTPS设置
这篇描述了怎样在InfluxDB中开启HTTPS。设置HTTPS可以保护客户端和InfluxDB服务器之间的通信,在某些情况下,HTTPS可以用来验证InfluxDB服务器对客户端的真实性。
注意,在服务器内网中是可以不用https,因为https会加密,会影响应用访问influxdb的速度。
如果你想通过 Rest请求来发送数据到InfluxDB,并且客户度在外网,我们强烈建议你开启HTTPS。如果在内网,就肯定没有必要了。
在阅读本章前,亲爱的小伙伴们,首先大家需要会Rest哦。
准备
为了给InfluxDB上设置HTTPS,你需要一个已有的或是新建的InfluxDB实例,还需要一个SSL证书。InfluxDB支持三种类型的TLS/SSL证书:
-
由证书颁发机构签名的单域证书
这些证书为HTTPS请求提供加密安全性,并允许客户端验证InfluxDB服务器的身份。 如果使用此证书,每个InfluxDB实例都需要一个唯一的单域证书。这种证书一般要花几千块一年,并且一个域名,因为,我们并不是要做一个公共服务,也不是做一个官网,所以,我觉得没有必要。 -
证书颁发机构签发的通配证书
这些证书为HTTPS请求提供加密安全性,并允许客户端验证InfluxDB服务器的身份。 可以在不同服务器上的多个InfluxDB实例中使用通配符证书。*.xxx.xx就是一个通配符证书,这个证书可以被多个二级域名使用。 -
自签证书
自签名证书不由CA签名,您可以在自己的机器上生成。 与CA签署的证书不同,自签名证书仅为HTTPS请求提供加密安全性。 他们不允许客户端验证InfluxDB服务器的身份。 如果您无法获得CA签发的证书,我们建议使用自签名证书。 如果使用此证书,每个InfluxDB实例都需要一个唯一的自签名证书。
无论您的证书类型如何,InfluxDB都支持由私钥文件(.key)和签名证书文件(.crt)文件对组成的证书,以及将私钥文件和签名的证书文件组合成一个捆绑的证书文件(.pem)。
上面这段知识,大家可以死记硬背,因为在很多书中,很多其他课程的学习中,都会遇到key、crt和pem,我们经常分不清,这样吧,老师,在这里,不厌其烦,再重复一下下。
- .key 文件是证书私钥文件,如果申请证书时没有选择系统创建CSR,则没有该文件。请您保存好该私钥文件。
- .crt 文件是证书文件。
- .pem 文件是证书文件。pem是key和crt之和。
以下两部分将介绍在Ubuntu 16.04上如何使用CA签发的证书和自签名证书给InfluxDB设置HTTPS。其他操作系统的具体步骤可能不同。
使用CA签发的证书设置HTTPS
第一步:安装SSL / TLS证书
将私钥文件(.key)和签名的证书文件(.crt)或单个捆绑文件(.pem)放在/etc/ssl
目录中。
第二步:确保文件权限
证书文件需要root用户的读写权限。通过运行以下命令确保您具有正确的文件权限:
sudo chown root:root /etc/ssl/<CA-certificate-file> sudo chmod 644 /etc/ssl/<CA-certificate-file> sudo chmod 600 /etc/ssl/<private-key-file>
第三步:在InfluxDB的配置文件中开启HTTPS
默认HTTPS是关闭的,在InfluxDB的配置文件/etc/influxdb/influxdb.conf
的[http]
部分通过如下设置开启HTTPS:
https-enabled
设为true
http-certificate
设为/etc/ssl/<signed-certificate-file>.crt
(或者/etc/ssl/<bundled-certificate-file>.pem
)http-private-key
设为/etc/ssl/<private-key-file>.key
(或者/etc/ssl/<bundled-certificate-file>.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"
第四步:重启InfluxDB
重启InfluxDB使配置生效:
sudo systemctl restart influxdb
第五步:验证HTTPS安装
可以通过InfluxDB的CLI来验证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
第一步:生成自签名证书
我们经常是因为没有钱,或者没有必要,所以不必要去购买证书,这时候,我们就自己通过命令生成证书吧。
以下命令生成私有密钥文件(.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 365
当执行该命令时,将提示您提供更多信息,例如你的邮件,公司等。 您可以选择填写该信息或将其留空; 这样就会生成证书,生成的证书在/etc/ssl目录中,其中*.key 和 *.crt是我们会用到的。
第二步:在InfluxDB的配置文件中开启HTTPS
默认HTTPS是关闭的,在InfluxDB的配置文件/etc/influxdb/influxdb.conf
的[http]
部分通过如下设置开启HTTPS:
https-enabled
设为true
http-certificate
设为/etc/ssl/influxdb-selfsigned.crt
http-private-key
设为/etc/ssl/influxdb-selfsigned.key
[http] [...] # Determines whether HTTPS is enabled. https-enabled = true [...] # The 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
重启InfluxDB使配置生效:
sudo systemctl restart influxdb
第四步:验证HTTPS安装
可以通过InfluxDB的CLI来验证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 >
将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就可以啦!