티스토리 뷰
mvn 'Received fatal alert: protocol_version', 'peer not authenticated' 에러 해결방법
드라이빙 인사이트 2019. 11. 18. 06:22메이븐(Maven) 프로젝트를 빌드하고 배포하는 스크립트를 만들어서 바이너리를 만들고 설치하는 과정을 단순화시켜 작업을 하고 있었다. 개발서버의 노후화로 장비 교체를 하였고, 개발중인 리파지토리를 새로운 장비에서 clone 하고 빌드&배포 스크립트를 실행시켰더니 다음과 같은 에러 메시지를 받게 되었다.
...
[ERROR] Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central (https://repo.maven.apache.org/maven2): Received fatal alert: protocol_version -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException
...
프로토콜 버전이 맞지 않아서 'Central'이라고 하는 곳에서 "maven-clean-plugin:jar:2.5"를 다운로드 할 수 없다는 의미의 에러 메시지다. Central 이라는 곳에서 clean 플러그인을 다운로드해야하는데 서버에 접속할 수 없어서 발생하는 문제로 보인다. 우선 메이븐 Central 이 뭔지 찾아보자.
Maven Central Repository?
메이븐(Maven)의 공식 문서에 가보면 "Central"에 대한 설명을 찾아 볼 수 있다. (링크 : introduction-to-repositories - 메이븐) 메이븐은 별도로 로컬 리파지토리를 pom.xml 파일에 명시하지않는 이상 필요한 의존성 라이브러리(Dependencies)들을 "메이븐 Central"이라는 곳에서 다운로드한다.
이번에 마주친 문제는 결국 이 메이븐(Maven) Central 리파지토리에서 플러그인을 다운로드 할 수 없다는 의미다. 문제의 원인을 찾기 위해 검색을 해보니 TLS 프로토콜 버전 문제였다.
2018년 6월 18일부터 보안 이슈가 있던 TLS 1.0과 TLS 1.1 프로토콜을 이용하는 클라이언트는 더 이상 Maven Central Repository에 접근 할 수 없게 되었다. 따라서 TLS 1.0 혹은 TLS 1.1 프로토콜을 사용하는 클라이언트는 Central 리파지토리에서 플러그인을 다운로드 할 수 없다.
메이븐이 이렇게 결정하게 된 계기는 이미 Java 8부터는 TLSv1.2를 기본으로 사용하고 있기 때문이다. 메이븐의 통계에 의하면 Java 6, Java 7을 사용하는 환경에서 Maven Central 리파지토리에 접근하는 경우는 전체 유저의 0.2% 가량밖에 안된다고 한다.
메이븐의 이와 같은 조치로, TLSv1.2 버전을 기본으로 사용하지 않는 Java 6, Java 7 환경에서는 이런 에러가 발생하게 되었다.
문제 해결 방법
이 문제를 해결하기 위해 취할 수 있는 액션은 몇 가지가 있다
1. Java 8 사용하기
가장 좋은 방법은 Java 8 으로 개발환경을 옮기는 것이다. 오래된 JDK 버전의 사용은 불가피한 경우가 아니며 피하자.
2. Maven 실행 옵션으로 추가
어쩔 수 없이 Java 7 개발 환경을 사용해야 한다면, Maven 설정에 TLS 1.2 프로토콜을 사용하도록 명시하면된다. 예를 들어 다음과 같이 쓰면 된다.
mvn -Dhttps.protocols=TLSv1.2 install
이렇게 옵션을 추가하면 Java 7 에서도 TLSv1.2 를 사용하게 되고, Maven Central로 문제없이 접근 가능해진다.
혹은
export MAVEN_OPTS=-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2
를 추가해도 된다.
그 밖에 Oracle Advanced Support 를 이용해서 Java 7 을 업그레이드 하는 방법도 있다. Java 6 이전 버전은 TLSv.12 를 지원하는지 잘 모르겠다. 그 경우 http 를 통해서 접근하도록 변경해야한다. (혹은 http://repo1.maven.org/maven2/ 도 어느정도는 유지된다고 하는데..그냥 모던 자바로 오세요.)
References
- Total
- Today
- Yesterday
- 화분
- Jekyll
- Python
- 베란타 텃밭
- java
- 도커
- 자바
- linux
- 깃허브
- docker
- InterlliJ
- hadoop
- 베란다 텃밭
- okhttp
- MacOS
- monitoring
- 화분 버리기
- 하둡
- 고추
- GitHub
- 상추
- 텃밭
- 지킬
- 청양고추
- 파이썬
- 리눅스
- 상추 재배기
- pycharm
- nf_conntrack
- 파이참
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |