최근 B 시스템에서 내가 운영하고 있는 A 시스템간의 연동이 필요했는데, 페이지 이동 시에 B 시스템은 SSL인증서가 적용된 상태이고, A 시스템은 여러가지 시스템적인 이유로 SSL 적용이 되지않은 상태였다. 그래서 IE나 웨일에서는 문제가 없었지만, 크롬이나 엣지에서는 페이지 이동전에 안전하지 않은 페이지로 이동한다는 경고창을 중간에 거쳐야 하는 문제가 있었다.
결국 내가 운영하는 A 시스템에 SSL을 적용해야 했다. (기존에는 성능상의 여러가지 이유로 적용하지 않았다.) SSL 적용하는 것 자체는 간단하다. 웹 서버 설정에서 SSL 인증서와 포트를 적용해주고, 해당 부분은 WAS의 플러그인 설정에도 포트 설정을 해주면 된다. 그리고도 안될 경우 서버 웹 보안 등에 추가된 포트 통신을 허용해주면 끝나는 문제이다.
하지만 A 시스템의 경우는 L4 로드밸런서가 적용화가 되어있는 active-active 시스템이다. 만약 A 시스템의 도메인이 test.ykss.com이라면 해당 도메인으로 연결했을 때, DNS 서버에서는 해당 로드밸런서 VIP로 연결해주고, L4 로드밸런서에서는 L4 로드밸런서의 ACL(Access Control List)에 근거해서 RIP로 로드밸런싱을 해준다. 그래서 좀 더 설정하는 데 까다로웠던 부분이 있었어서 기록해두고자 해당 포스트를 남긴다.
각 서버 a, b에서 httpd.conf 파일에 SSL을 적용해주는데, 여기서 부터 문제가 있었다. 기본 https 프로토콜의 포트는 443인데, 해당 서버에는 웹서버가 하나만 있는게 아니고 다른 인스턴스도 돌고있었고, 해당 웹서버에서 이미 443 port로 SSL 인증서를 적용하여 사용하고 있었다. 그렇기 때문에 내 서비스에는 443을 적용할 수 없는 문제가 있었다.(두 서비스의 도메인이 서로 달랐다.) 그래서 불가피하게 444 port로 SSL을 적용하였다. 그리고 해당 부분은 WAS(웹스피어) 플러그인에도 적용하고, 서버보안에서도 444포트를 오픈하였다. 그렇게 설정한 이후에 각 서버 IP를 도메인으로 hosts 파일을 통해 설정한 후 444포트로 접근했을 때, 정상적으로 SSL이 작동한 것을 확인 할 수 있었다. 하지만 hosts 설정 없이 일반 사용자가 도메인을 입력했을 때, http://test.ykss.com는 기존대로 정상 접속되지만, https://test.ykss.com으로 접속하면 연결되질 않았다.
여러가지 로그도 확인하고 했지만 접속이 되질 않아서 결국 L4 로드밸런서 쪽을 확인해보았고, 해당 로드밸런서의 ACL에 https 통신에 대한 부분이 설정되어 있지 않은 것을 발견했다. 로드밸런서에는 기존 test.ykss.com 도메인에 대해서 80으로 들어오는 접속만 80포트 RIP로 연결해주는 설정만 되어있었다. 그래서 해당 ACL에 해당 도메인에 443 port로 통신이 왔을 때, RIP의 444번 포트로 연결되도록 설정을 해주었다. 그래서 해결! 일줄 알았지만, https://test.ykss.com으로 연결했을 때 접속은 되었지만 이상하게 SSL이 적용되어있지 않은 페이지로 연결되었다. 그래서 와이어샤크를 통해 패킷을 잡아 보니 계속해서 80포트의 서비스에 연결되고 있었다.
L4 로드밸런서 설정도 마치고, 웹서버의 설정도 마쳤던 나는 이제 무엇이 문제일까하는 큰 고민에 빠졌다. 그래서 결국 L4 로드밸런서 엔지니어와 L4 분기가 제대로 이루어지는지 통신 확인을 해보았고, L4에서는 분명 444포트의 RIP로 분기가 되고 있음을 확인했다. 하지만 동시에 80포트도 호출되고 있음을 발견하였다. 확인해보니 ACL의 작성 순서가 곧 우선순위였는데, If ~ Else if 구문 같이 앞에 acl을 확인하고 그게 맞으면 아래 우선순위 정책들은 적용되지 않았다. 하지만 결론적으로 우선순위 때문에 그런 것은 아니었고, 분명 L4에서는 해당 ACL 정책에 따라 444 포트로 연결을 해주었다. 그래서 다시 httpd.conf를 확인하는데 거기에 http://test.ykss.com/example
구문이 있었다. 이건 도메인 입력시에 /뒤의 경로를 입력하지 않았을 때, 예를 들어 test.ykss.com 또는 https://test.ykss.com과 같이 도메인을 입력했을 때, http://test.ykss.com/example 이 주소로 redirect 해주는 설정이었다. 이거 때문에 내가 https 통신으로 호출을 해도 다시 http 페이지로 리다이렉트 되었었기 때문에 발생한 문제였고, 해당 설정을 example
과 같이 변경하여 테스트했고, 그 결과 다행히 문제없이 SSL가 적용된 페이지를 만날 수 있었다.
이전에는 서버보안 정책이나 웹 서버 설정을 건드리거나 was 콘솔에서 세팅해본 적은 있었어도, L4 로드밸런서 단까지 신경써서 문제를 해결한 적은 없었는데, 이번 경험이 나름 값진 경험이었고, 오랜만에 나름 길게 붙잡고 있던 문제를 해결해서 기분좋게 퇴근할 수 있었다.
끝!