🔍 문제 분석
- Must specify either --ca or --ca-cert/--ca-key or --self-signed 오류
- elasticsearch-certutil cert 실행 시 CA 인증서를 명시적으로 지정하지 않아서 발생한 오류입니다.
- CA 인증서를 사용하려면 --ca-cert 및 --ca-key 옵션을 지정해야 합니다.
- Expand-Archive: 파일이 이미 있어서 압축 해제 실패
- 기존 certs 폴더에 instance.crt, instance.key 파일이 있어서 덮어쓰지 못함.
- -Force 옵션을 추가하면 기존 파일을 덮어쓸 수 있음.
✅ 해결 방법
아래 순서대로 진행하세요.
1️⃣ 기존 certs 폴더 삭제 후 새로 생성
Remove-Item -Recurse -Force certs
mkdir certs
- 기존 인증서 삭제 후 새로운 인증서를 만들기 위한 폴더 생성.
2️⃣ CA 인증서 생성
docker run --rm -v ${PWD}/certs:/usr/share/elasticsearch/config/certs `
-it docker.elastic.co/elasticsearch/elasticsearch:8.17.2 `
bin/elasticsearch-certutil ca --pem -out /usr/share/elasticsearch/config/certs/ca.zip
✅ certs/ca.zip 파일이 생성됨.
3️⃣ CA 인증서 압축 해제
Expand-Archive -Path certs\ca.zip -DestinationPath certs -Force
✅ certs/ca/ca.crt, certs/ca/ca.key 파일이 생성됨.
4️⃣ Elasticsearch 인증서 생성
docker run --rm -v ${PWD}/certs:/usr/share/elasticsearch/config/certs `
-it docker.elastic.co/elasticsearch/elasticsearch:8.17.2 `
bin/elasticsearch-certutil cert --pem --ca-cert /usr/share/elasticsearch/config/certs/ca/ca.crt `
--ca-key /usr/share/elasticsearch/config/certs/ca/ca.key `
-out /usr/share/elasticsearch/config/certs/elasticsearch.zip
✅ certs/elasticsearch.zip 파일이 생성됨.
5️⃣ Elasticsearch 인증서 압축 해제
Expand-Archive -Path certs\elasticsearch.zip -DestinationPath certs -Force
✅ certs/elasticsearch/elasticsearch.crt, certs/elasticsearch/elasticsearch.key 파일이 생성됨.
6️⃣ .p12 인증서 변환
openssl pkcs12 -export -out certs/elasticsearch.p12 -inkey certs/elasticsearch/elasticsearch.key `
-in certs/elasticsearch/elasticsearch.crt -passout pass:your-keystore-password
✅ certs/elasticsearch.p12 파일이 생성됨.
7️⃣ docker-compose.yml 수정
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.17.2
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=true # ✅ 보안 활성화
- ELASTIC_PASSWORD=your-secure-password
- xpack.security.http.ssl.enabled=true # ✅ SSL 활성화
- xpack.security.http.ssl.keystore.path=/usr/share/elasticsearch/config/certs/elasticsearch.p12
- xpack.security.http.ssl.truststore.path=/usr/share/elasticsearch/config/certs/elasticsearch.p12
- xpack.security.http.ssl.keystore.password=your-keystore-password
- xpack.security.http.ssl.truststore.password=your-keystore-password
ports:
- "9200:9200"
- "9300:9300"
networks:
- elastic-net
volumes:
- ${PWD}/certs:/usr/share/elasticsearch/config/certs # ✅ 인증서 파일 연결
volumes:
elasticsearch-data:
driver: local
networks:
elastic-net:
driver: bridge
8️⃣ application.yml 수정
spring:
elasticsearch:
uris: https://localhost:9200
username: elastic
password: your-secure-password
restclient:
ssl:
enabled: true
trust-store: classpath:certs/elasticsearch.p12
trust-store-password: your-keystore-password
9️⃣ Docker 컨테이너 다시 실행
docker-compose down
docker-compose up -d
🔟 Elasticsearch SSL 연결 확인
curl -X GET "https://localhost:9200" --user "elastic:your-secure-password" --insecure
✅ JSON 응답이 나오면 SSL이 정상적으로 적용된 것! 🚀
🎯 최종 정리
- 기존 인증서 삭제 후 새로 생성
- CA 인증서 생성
- Elasticsearch 인증서 생성 (elasticsearch.zip)
- .p12 변환
- Docker에서 SSL 설정
- Spring Boot에서 https://localhost:9200로 연결
- Docker 컨테이너 다시 실행
- curl로 연결 확인
✅ 이제 Elasticsearch의 SSL이 Docker에서 설정되었습니다! 🚀
❌ 문제가 발생하면 docker logs elasticsearch 로그를 확인하고 알려주세요!
'Elastic Search' 카테고리의 다른 글
Elasticsearch 클러스터에서 노드 장애 발생 시 복구 전략 (0) | 2025.03.26 |
---|---|
[Elasticsearch] Elasticsearch는 언제 써야할까? (0) | 2025.03.19 |
[LV 6] Elasticsearch 커스텀 플러그인 개발 (1) | 2025.02.02 |
[LV 6] Elasticsearch 운영 및 모니터링 (0) | 2025.02.02 |
[LV 5] Logstash 및 Beats 활용 (ELK Stack 구성) (1) | 2025.02.02 |