[Troubleshooting] Docker 컨테이너 환경에서 Java TLS 비활성화 알고리즘 설정하기
Docker 컨테이너 환경에서 Java TLS 비활성화 알고리즘 설정 및 트러블슈팅
운영 중인 AWS EC2 인스턴스에서 WAS를 도커 컨테이너로 구동할 때, 보안 취약점 조치를 위해 jdk.tls.disabledAlgorithms 설정을 변경해야 하는 경우가 있습니다. 하지만 호스트 서버와 컨테이너 내부의 환경 차이로 인해 설정 과정에서 혼선을 겪기 쉽습니다. 이번 포스팅에서는 실제 발생할 수 있는 경로 오류 상황과 그 해결 방법을 상세히 정리합니다.
1. 문제 확인: Host와 Container의 자바 환경 차이
AWS 인스턴스(Ubuntu) 호스트에서 java -version을 입력했을 때 자바가 설치되어 있지 않거나 버전이 다르더라도, 도커로 실행 중인 WAS는 정상 작동할 수 있습니다. 이는 자바가 컨테이너 내부 전용으로 설치되어 있기 때문입니다.
- Host Status:
Command 'java' not found(자바 미설치 상태일 수 있음) - Container Status: WAS가 구동 중이며 내부 JDK가 별도로 존재함
따라서 모든 보안 설정은 호스트가 아닌 실행 중인 컨테이너 내부로 접속하여 수행해야 합니다.
2. 컨테이너 내부 접속 및 파일 위치 찾기
먼저 실행 중인 컨테이너에 접속한 뒤, 설정 파일인 java.security의 위치를 찾아야 합니다. 표준 경로에 파일이 없는 경우 find 명령어를 활용합니다.
# 1. 실행 중인 컨테이너 ID 확인
docker ps
# 2. 컨테이너 내부 쉘 접속
docker exec -it [CONTAINER_ID] /bin/bash
# 3. 설정 파일 검색 (경로 오류 방지)
find / -name java.security 2>/dev/null
만약 /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/java.security: No such file or directory와 같은 에러가 발생한다면, 위 find 명령어로 찾은 실제 경로(예: /usr/local/openjdk-8/...)를 사용해야 합니다.
3. jdk.tls.disabledAlgorithms 설정 변경
이제 보안을 강화하기 위해 SSLv3, TLSv1, TLSv1.1 등을 차단 리스트에 추가합니다. 컨테이너 내부에 편집기(vi)가 없을 경우 sed 명령어를 사용하는 것이 효율적입니다.
현재 설정 확인
grep "jdk.tls.disabledAlgorithms" [확인된_실제_파일_경로]
설정 치환 (sed 활용)
아래 명령어는 해당 설정 라인을 찾아 원하는 알고리즘 리스트로 통째로 교체합니다.
# 특정 알고리즘(SSLv3, TLSv1, TLSv1.1) 비활성화 적용
sed -i 's/jdk.tls.disabledAlgorithms=.*/jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1/' [파일_경로]
4. 변경 사항 적용 및 주의사항
java.security 파일의 변경 사항은 JVM이 구동될 때 로드되므로, 반드시 WAS 컨테이너를 재시작해야 적용됩니다.
# 호스트(EC2) 터미널에서 실행
docker restart [CONTAINER_ID]
위와 같이 실행 중인 컨테이너를 직접 수정하는 것은 임시 조치입니다. Docker 컨테이너는 삭제 후 다시 생성되면 설정이 초기화됩니다. 따라서 최종적으로는 Dockerfile 내에 RUN sed... 구문을 추가하여 이미지를 빌드하고 배포하는 프로세스를 갖추는 것이 권장됩니다.
Copyright © IT Dev Blog. All rights reserved.
댓글
댓글 쓰기