네이버 클라우드에서 임대한 서버에 전자정부프레임워크로 만든 REST Api에서 해당 서버에 파일을 업로드 하기 위해 URL로 통신하고 있었다. 해당 서버에 가비아에서 구매한 도메인을 붙이고 SSL 인증을 붙여 https 통신이 가능하게 하였으나, http 상에서는 400 Bad Request가 떠버리는 문제가 발생했다.
하지만 진짜 문제는 동일한 서버 환경 상에서 라이브 서버는 http/https 둘 다 문제 없이 작동하고 있었으나,
개발 서버에서는 https로만 아니면 :포트번호를 붙인 상태에서만 http 통신이 작동한다는 것이었다.
이에 내부에서 포트번호를 붙이지 않고도 도메인 주소로만 통신이 되게끔 해달라는 요청이 있어, 작업하게 되었다.
해당 오류 메시지는 현재 호출된 포트(443)의 요청이 HTTPS 이므로 HTTP가 아닌 HTTPS로 호출하라는 내용이다.
하지만 나는 http로 호출 했는데?!
Api 서버는 tomcat으로 구동하고 있었고 해당 서버의 셋팅을 담당하는 server.xml을 열어 라이브 서버와 비교하였으나,
5002 포트를 443(HTTPS) 포트로 리다이렉트 시키고 있을 뿐, 80(HTTP) 포트에 대해서는 어떠한 설정이 있지 않았다.
server.xml 파일에서 기존 설정을
<Connector port="5002" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
<Connector port="5002" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
이와 같이 변경하였다. 그리고 서버 재시작.
결과는 역시나 400 에러 메시지. 톰캣 로그를 확인했다.
"org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector["http-nio-80"]]"
일부를 가져왔다. 간단히 말해서 80포트를 이미 다른 곳에서 사용 중이기 때문에 80포트로 요청을 보내도 처리할 수 없다는 뜻이다.
80포트를 대체 어디서 쓰는지 찾기 위해 다시 열심히 설정을 뒤졌다.
일단 server.xml을 뒤져봤지만 라이브 서버와 동일한 설정임을 확인했고, 80포트에 대한 설정을 그곳에서 할 것이 아니라는 걸 알았다. 그리고 포트 관련한 설정을 다시 찾기 위해 윈도우 방화벽의 고급 설정을 확인했다. 현재 사용하고 있는 포트들을 인바운드/아웃바운드 규칙으로 설정을 라이브 서버와 동일하게 맞추었다. 그리고 다시 실행했을 때도 역시나 X.
그리고 검색을 통해 NAT (Network Address Translation) 테이블에서도 포트 설정을 변경할 수 있다는 걸 알아냈다.
*NAT (Network Address Translation) 테이블이란?
"netsh interface portproxy show all"
명령어로 현재의 포트 설정을 확인하기!
그리고 문제를 찾아냈다!!!
라이브 서버에서는
80 -> 5002로 보내 톰캣에서 5002 -> 443으로 리다이렉트 시키고 있었다.
문제인 개발서버에서는
80 -> 443으로 보내니 http로 요청해도 https 요청이 되어 TLS 설정을 문제삼은 것이었다.
"netsh interface portproxy delete v4tov4 listenport=80 listenaddress=0.0.0.0"
위 명령어로 기존의 설정을 삭제 후
"netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=새로운포트번호 connectaddress=127.0.0.1"
명령어를 사용하여 라이브서버와 같이 변경해주었다.
그리고 감격의 문제해결!
*포인트!!
"Bad Request
This combination of host and port requires TLS."
위 400 에러는 잘못된 요청을 하는 경우 발생하는 오류.
주로 오타나 잘못된 주소를 입력하는 경우 발생하지만, 내 경우에서는 포트를 처리하는 과정에서의 문제였음
포트가 문제인 경우 확인해봐야 할 곳이 일단 여러 군데라는 것을 알았다....
1. tomcat - server.xml
2. windows firewall
3. nat table..