如何将privekey.pem与fullchain.pem配置到Elasticsearch Docker容器以解决SSL问题
解决Elasticsearch容器SSL证书相关问题
1. 挂载证书到Elasticsearch容器
把你的privatekey.pem和fullchain.pem放到本地一个目录(比如./certs),然后在docker-compose.yml里给Elasticsearch服务添加挂载配置:
services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.x volumes: # 映射本地证书到容器内的配置目录 - ./certs/privatekey.pem:/usr/share/elasticsearch/config/certs/privatekey.pem - ./certs/fullchain.pem:/usr/share/elasticsearch/config/certs/fullchain.pem # 保留其他原有配置(端口、内存等)
2. 配置Elasticsearch启用自定义SSL证书
通过环境变量在docker-compose.yml里配置Elasticsearch使用你的证书(容器场景用环境变量比直接修改配置文件更便捷):
services: elasticsearch: # ... 其他配置 environment: # 启用安全功能(必须开启才能正常使用SSL) - xpack.security.enabled=true # 开启HTTP和集群传输层的SSL - xpack.security.http.ssl.enabled=true - xpack.security.transport.ssl.enabled=true # 指定HTTP SSL的密钥和证书文件路径 - xpack.security.http.ssl.key=/usr/share/elasticsearch/config/certs/privatekey.pem - xpack.security.http.ssl.certificate=/usr/share/elasticsearch/config/certs/fullchain.pem # 指定CA证书(如果fullchain包含根CA证书,直接用它即可) - xpack.security.http.ssl.certificate_authorities=/usr/share/elasticsearch/config/certs/fullchain.pem # 集群传输层SSL复用相同的证书配置 - xpack.security.transport.ssl.key=/usr/share/elasticsearch/config/certs/privatekey.pem - xpack.security.transport.ssl.certificate=/usr/share/elasticsearch/config/certs/fullchain.pem - xpack.security.transport.ssl.certificate_authorities=/usr/share/elasticsearch/config/certs/fullchain.pem
3. 解决curl的SSL证书验证错误
执行curl请求时,有两种处理方式:
- 信任自定义证书(生产环境推荐):
curl --cacert ./certs/fullchain.pem https://elasticsearch:9200 - 临时跳过验证(仅用于测试):
curl -k https://elasticsearch:9200
4. 配置Kibana连接Elasticsearch
Kibana需要信任Elasticsearch的证书,同样挂载证书并配置环境变量:
services: kibana: image: docker.elastic.co/kibana/kibana:8.x volumes: - ./certs/fullchain.pem:/usr/share/kibana/config/certs/fullchain.pem environment: - ELASTICSEARCH_HOSTS=https://elasticsearch:9200 # 指定Elasticsearch的CA证书,让Kibana信任其身份 - ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=/usr/share/kibana/config/certs/fullchain.pem # 如果Elasticsearch设置了账号密码,添加以下两个变量 # - ELASTICSEARCH_USERNAME=elastic # - ELASTICSEARCH_PASSWORD=your_elastic_password # 其他配置(端口、内存等)
5. 重启容器并验证
修改完配置后重启容器:
docker-compose down && docker-compose up -d
验证Elasticsearch是否正常响应:
curl --cacert ./certs/fullchain.pem -u elastic:your_password https://elasticsearch:9200
同时检查Kibana的访问状态和日志,确认连接正常。
关于HTTP流量警告的说明
received plaintext http traffic on an https channel这个警告,是因为有客户端用http://访问了Elasticsearch的HTTPS端口(9200)。确保所有请求都用https://开头,包括Kibana的配置和你的curl命令,不要再用HTTP访问9200端口。
内容的提问来源于stack exchange,提问作者IDev
相关产品推荐
相关产品推荐

