本文最后更新于 1 分钟前,文中所描述的信息可能已发生改变。
在生产环境中,为了确保 Elastic APM Server 与 Elasticsearch 之间的通信安全,我们需要配置 SSL/TLS 证书。本文将详细介绍如何导出 Elasticsearch 的 CA 证书并配置 APM Server 使用该证书进行安全连接。
环境准备
在开始配置之前,请确保您的环境满足以下条件:
- Elasticsearch 集群已启用 SSL/TLS
- APM Server 已安装
- 具有系统管理员权限
- 已安装 OpenSSL 工具
导出 Elasticsearch CA 证书
1. 使用 OpenSSL 导出证书
首先,我们需要从 Elasticsearch 服务器导出当前使用的 CA 证书:
bash
# 连接到 Elasticsearch 并导出证书
openssl s_client -connect localhost:9200 </dev/null | openssl x509 > es-ca.crt
这个命令的工作原理:
openssl s_client -connect localhost:9200
- 建立到 Elasticsearch 的 SSL 连接</dev/null
- 提供空输入,避免交互式等待| openssl x509
- 解析 SSL 证书信息> es-ca.crt
- 将证书保存到文件
2. 验证证书内容
导出证书后,可以验证证书的有效性:
bash
# 查看证书详细信息
openssl x509 -in es-ca.crt -text -noout
# 检查证书有效期
openssl x509 -in es-ca.crt -dates -noout
配置 APM Server
1. 创建证书目录
为了更好地管理证书文件,我们需要创建专门的证书目录:
bash
# 创建证书目录
sudo mkdir -p /etc/apm-server/certs
# 设置适当的权限
sudo chmod 755 /etc/apm-server/certs
2. 复制证书文件
将导出的证书文件复制到 APM Server 的配置目录:
bash
# 复制证书文件到 APM Server 配置目录
sudo cp es-ca.crt /etc/apm-server/certs/
# 设置证书文件权限
sudo chmod 644 /etc/apm-server/certs/es-ca.crt
sudo chown root:root /etc/apm-server/certs/es-ca.crt
3. 修改 APM Server 配置
编辑 APM Server 的配置文件 /etc/apm-server/apm-server.yml
:
yaml
# APM Server 配置
apm-server:
host: "0.0.0.0:8200"
# Elasticsearch 输出配置
output.elasticsearch:
hosts: ["https://your-elasticsearch-host:9200"]
username: "elastic"
password: "your-secure-password"
# SSL 配置
ssl.enabled: true
ssl.verification_mode: certificate
ssl.certificate_authorities:
- "/etc/apm-server/certs/es-ca.crt"
4. SSL 验证模式说明
在配置中,ssl.verification_mode
有以下几种选项:
full
- 验证证书和主机名(推荐用于生产环境)certificate
- 仅验证证书有效性none
- 不进行任何验证(不推荐)
启动和验证服务
1. 重启 APM Server 服务
bash
# 重启 APM Server 服务
sudo systemctl restart apm-server
# 启用开机自启动
sudo systemctl enable apm-server
# 检查服务状态
sudo systemctl status apm-server
2. 检查服务日志
查看 APM Server 日志以确认配置是否正确:
bash
# 查看实时日志
sudo journalctl -u apm-server -f
# 查看最近的日志
sudo journalctl -u apm-server --since "10 minutes ago"
# 查看日志文件
sudo tail -f /var/log/apm-server/apm-server
3. 验证连接
测试 APM Server 与 Elasticsearch 的连接:
bash
# 检查 APM Server 健康状态
curl -X GET "localhost:8200/"
# 验证与 Elasticsearch 的连接
curl -X GET "localhost:8200/config"
常见问题排查
1. 证书验证失败
如果遇到证书验证失败的错误,请检查:
bash
# 检查证书文件是否存在
ls -la /etc/apm-server/certs/es-ca.crt
# 验证证书格式
file /etc/apm-server/certs/es-ca.crt
# 检查证书内容
openssl x509 -in /etc/apm-server/certs/es-ca.crt -text -noout
2. 权限问题
确保 APM Server 进程有权限读取证书文件:
bash
# 检查文件权限
ls -la /etc/apm-server/certs/
# 修正权限(如果需要)
sudo chmod 644 /etc/apm-server/certs/es-ca.crt
sudo chown apm-server:apm-server /etc/apm-server/certs/es-ca.crt
3. 网络连接问题
测试网络连接:
bash
# 测试端口连通性
telnet your-elasticsearch-host 9200
# 使用 curl 测试 HTTPS 连接
curl -k https://your-elasticsearch-host:9200
安全最佳实践
- 定期更新证书:监控证书有效期,及时更新即将过期的证书
- 最小权限原则:确保证书文件只有必要的进程可以访问
- 备份证书:定期备份重要的证书文件
- 监控日志:定期检查 APM Server 日志,及时发现安全问题
总结
通过本文的配置步骤,我们成功实现了 APM Server 与 Elasticsearch 之间的 SSL 安全连接。这种配置方式确保了数据传输的安全性,是生产环境中的标准做法。
在实际部署中,建议结合监控系统对证书有效期进行监控,确保服务的持续稳定运行。同时,定期审查和更新安全配置,以应对不断变化的安全威胁。