APM agent TLS 通信
默认情况下,TLS 是禁用的。当为 APM Server 入站通信启用 TLS 时,代理将通过验证 APM Server 的证书来验证其身份。
启用了 TLS 后,需要提供证书和相应的私钥。证书和私钥可以由受信任的证书颁发机构 (CA) 签发,也可以是自签名的。
Elasticsearch 发行版提供了 certutil 工具用于创建自签名证书
- 创建 CA:
./bin/elasticsearch-certutil ca --pem。系统将提示您输入包含证书和私钥的输出 zip 压缩包的目标位置。 - 解压 CA 压缩包的内容。
- 创建自签名证书:
./bin/elasticsearch-certutil cert --ca-cert <path-to-ca-crt>/ca.crt --ca-key <path-to-ca-key>/ca.key --pem --name localhost - 从生成的 zip 压缩包中提取证书和密钥。
启用 TLS 并配置 APM Server 以指向提取出的证书和密钥
在 APM 集成设置中启用 TLS,并使用 SSL/TLS 输入设置来设置服务器证书和密钥的路径。
以下是启用了安全通信的基本 APM Server SSL 配置。这将使 APM Server 处理 HTTPS 请求而不是 HTTP。
apm-server.ssl.enabled: true
apm-server.ssl.certificate: "/path/to/apm-server.crt"
apm-server.ssl.key: "/path/to/apm-server.key"
配置选项的完整列表可在 SSL/TLS 输入设置中查看。
提示
如果 APM 代理使用无法通过已知 CA 进行身份验证的证书(例如自签名证书)进行自我身份验证,请使用 ssl.certificate_authorities 设置自定义 CA。这会自动修改 ssl.client_authentication 配置以强制进行身份验证。
当 APM Server 使用未链接到公共信任证书(例如自签名证书)的证书时,需要在 APM 代理中进行额外的配置
- Go 代理:通过
ELASTIC_APM_SERVER_CERT进行证书固定 (certificate pinning) - Python 代理:通过
server_cert进行证书固定 - Ruby 代理:通过
server_ca_cert进行证书固定 - .NET 代理:
ServerCert - Node.js 代理:通过
serverCaCertFile进行自定义 CA 设置 - Java 代理:将证书添加到 JVM 的
trustStore中。有关更多详细信息,请参阅 APM Server 身份验证。
我们不建议禁用 APM 代理对服务器证书的验证,但这确实是可行的
- Go 代理:
ELASTIC_APM_VERIFY_SERVER_CERT - .NET 代理:
VerifyServerCert - Java 代理:
verify_server_cert - PHP 代理:
verify_server_cert - Python 代理:
verify_server_cert - Ruby 代理:
verify_server_cert - Node.js 代理:
verifyServerCert
APM Server 不要求代理提供证书进行身份验证,并且 Elastic 的后端代理中没有对 SSL/TLS 客户端证书身份验证的专门支持。