前面用logstash
的时候,由于elasticsearch
证书格式不对,一直连不上,这里记录一下关于证书的概念。
elasticsearch为了安全点,就需要开启XPach 安全机制(SSL+密码)。而从8.0版本开始,也默认地简化了安全功能,为用户自动配置:用户认证、基于角色的访问控制进行用户授权、使用 TLS 加密的节点到节点通信、使用 HTTPS 与 Elasticsearch API 进行加密通信。
1. XPach 安全机制介绍:
- Elasticsearch 的 Xack安全机,制提供了一些强大的功能,用于保护 Elasticsearch 集群中的数据和系统。以下是 XPack 安全机制的一些主要功能1.用户身份验证 (Authentication):XPack允许您配置多种身份验证方式,例如基于用户名和密码的认证、LDAP认证、Active Directov认证等,以确保只有授权用户可以访问Elasticsearch 集群。
- 访问控制(Authorization):Xpack 提供了细粒度的访问控制功能,可以基于角色和权限来限制用户对不同索引、文档和操作的访问权限。
3.传输层加密(Transport Layer Encryption):XPack 支持通过 SSL/TLS 加密保护节点之间的通信,防止数据在传输过程中被窃听或篡改。
4.字段级别的安全(field-level Security):Xpack 允许您定义字段级别的安全策略,控制用户对特定字段的访问权限,确保敏感数据得到保护。
5.审计日志(Audit Logging):XPack 可以记录所有用户活动和系统操作,生成审计日志,帮助您跟踪和监控系统的安全状况。
6.实时监控(Real-time Monitoring):XPack 提供实时监控功能,可以监控集群和节点的运行状况,帮助您及时发现和解决问题。
7.安全管理(Security Management):XPack 提供了一个集中式的安全管理界面,可以用于配置和管理所有的 XPack 安全功能。这些安全机制可以帮助您保护Elasticsearch
集群中的数据安全,确保系统只被授权的用户访问,并防止数据泄露或篡改。
2. CA证书
在安装Elasticsearch
时,我们单独用一个服务来生成了证书。那证书怎么来理解的,过程是怎样的?
CA证书一般都和ssl证书有关。这个证书的生成需要一定的资质,得到认可才能使用生成证书来使用。
一般我们网站要设置ssl访问,都是去阿里云申请ssl证书,注意虽然从阿里云申请,但对接的是一些能生产证书的公司。
在访问https网站的时候,我们的浏览器有时会提示 证书过期、不受信任等消息。是因为我们浏览器里面已经内置了一些值得信任的能生产证书的厂商,认为用他们的证书就安全(申请证书需要填身份信息),并且内置了这些厂商的公开的公钥证书(CA证书)用来验证我们访问的服务器网站https连接。这里面涉及到2个概念,大家要弄清楚:1个是 网站服务器 用的证书(ssl证书),还有一个是 验证网站服务器证书的 CA证书。
- CA证书(Certificate Authority Certificate):服务器证书认证机构(CA)签发的证书,用于验证服务器证书的真实性。浏览器或客户端会在与服务器建立连接时检查其证书是否被受信任的CA机构签发。
- 服务器证书(Server Certificate):是一种服务器证书,用于验证服务器的身份和提供公钥给客户端,以进行数据加密和认证。
- CA指纹(Certificate Authority Fingerprint):指由CA签发的证书的数字指纹,用于验证证书的真实性
3. elasticsearch-certutil
我们是用elasticsearch-certutil工具来生成证书的,主要分为2步。
elasticsearch-certutil
就相当于一个获得认可的 证书机构,要先用它来生产 CA 证书,然后再 关联 CA 证书生成 服务器证书 给elasticsearch服务用。
- 生成CA证书:
# elasticsearch-certutil ca 命令: -out 指定了输出目录
elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip
默认生成.p12
格式的,这里指定了 pem
,但是实际是 ca.crt
(可以直接把后缀改成pem)
ca.crt
相当于公钥
ca.key
相当于私钥
- 生成服务器证书
要用到第一步的CA证书
- 生成服务器证书
# elasticsearch-certutil cert 命令:--in 指定了配置文件,--ca-cert 和 --ca-key分别指定了 CA证书的 公钥和私钥,到时候 其他连接 elasticsearch的就可以拿ca.crt来验证了
elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key
配置文件:instances.yml
instances:
- name: es01
dns:
# es01 一般是hostname,这样就可以用https://es01:9200访问了
- es01
- localhost
ip:
- 172.18.0.11
- name: es02
dns:
- es02
- localhost
ip:
- 172.18.0.12
- name: es03
dns:
- es03
- localhost
ip:
- 172.18.0.13