Web 프로젝트를 하다보면 가장 큰 이슈가 바로 네트워크 통신 구간의 보안이다. 그리고 통신 구간 보안을 하기위해서 주로 권장되는 것이 SSL/TLS Protocol(이하 SSL/TSL)을 사용하는 것이다.
SSL/TLS는 ISO 7계층 중 세션 계층(Session Layer)의 Protocol로 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법 중 하나이다.
사실, 정확히 말하면 TLS(Transport Layer Security)는 SSL(Secure Sockets Layer)가 표준화 되면서 바뀐 이름이라 정확히 말하면 SSL보다는 TLS라고 말하는 것이 더 바람직 하다. 단지, 초기에 보안 인증서(보통 알고 있는 SSL 인증서)를 지칭할때나 많은 Open Source 프로젝트 등에서 SSL이라는 용어를 많이 사용하다 보니 TLS보다는 SSL로 말하는 것이 이해가 빠르기 때문에 일반적으로 SSL이라는 용어를 사용한다. (한 예로 아래 설명할 Azure App Service 설정에서도 인증서 설정 메뉴를 ‘SSL 보안’ 이라는 이름으로 사용하고 있다.)
TLS에 대해서 좀 더 설명해 보면, 인터넷 상에서 통신할 때 주고받는 데이터를 보호하기 위한 표준화된 암호화 프로토콜로, 넷스케이프사에 의해 개발된 SSL3.0 버전을 기반으로 만들어 졌다.
TLS는 통신 과정에서 전송계층의 암호화 방식으로 HTTP뿐만 아니라 FTP, XMPP등 응용 계층(Application Layer)프로토콜의 종류에 상관없이 사용할 수 있다는 장점이 있으며, 기본적 으로 인증(Authentication), 암호화(Encryption), 데이터 무결성(Integrity)을 지원 한다.
Protocol | Year | |
---|---|---|
SSL 1.0 | – | |
SSL 2.0 | 1995 | |
SSL 3.0 | 1996 | |
TLS 1.0 | 1999 | SHA1 |
TLS 1.1 | 2006 | IANA 등록 파라메터의 지원 |
TLS 1.2 | 2008 | SHA256 |
TLS 1.3 | 2018 | Enctypted SNI(ESNI) |
이제, Azure App Service에 별도의 도메인 및 TLS(SSL)인증서를 설정하고 통신을 해보도록 하자.
(참고로, App Service Plan을 무료 이상을 사용한다면 Azure에서 기본 제공하는 App Service 도메인(<your app name>.azruewebsites.net)에는 HTTPS 통신을 하기위한 TLS 인증서가 기본적으로 탑제 되어 있어서, 굳이 외부로 노출되는 별도의 도메인과 인증서를 구입하지 않아도 HTTPS 통신을 할 수 있도록 지원 해준다.)
이미 App Service Plan에 배포한 App을 선택하여 설정 메뉴들에 보면 ‘사용자 지정 도메인‘이라는 메뉴가 있다. 메뉴를 선택하면, 아래 그림과 같이 별도로 구매한 도메인을 해당 App에 지정하여 사용할 수 있다.
단, 구입한 도메인에 Azure에서 기본 제공하는 도메인(<your app name>.azruewebsites.net)을 별칭으로 미리 등록해 두어야 유효성 검사를 할 수 있다.

다음으로, 바로 밑에 있는 ‘SSL 설정‘메뉴가 있는데 클릭해 보면 위에서 사용자 지정한 도메인에 TLS인증서를 등록 설정 할 수 있다.
아래 그림과 같이 TLS인증서에 대한 설정(HTTPS만 사용, TLS 버전 1.0)을 한 후, 바인딩 버튼을 눌러 도메인과 도메인용으로 구입한 인증서를 선택하여 도메인-인증서 바인딩 추가 하도록 하면 해당 App을 위해 별도 구입한 도메인과 인증서 셋팅이 완료 된다.
(아래 그림은 인증서 업로드가 이미 업로드 상태를 전제로 진행 하였다. 인증서 업로드는 스크롤 다운을 해보면 Azure Service Certificate 가져오기와 인증서 업로드 메뉴가 있다. 각 인증서 구입한 상황에 따라 업로드 하면 된다.)

위와 같이 설정을 하면 HTTP를 사용해도 네트워크 전송계층에서 자동으로 HTTPS로 Redirection해주어 HTTP사용을 막고 무조건 TLS로 보안된 HTTP통신, 즉 HTTPS 통신을 할 수 있게 된다.
TLS 버전은 기본 1.0으로 셋팅 되도록 하는데, 만약 상황에 따라 버전을 1.1이나 1.2를 사용해야 될때가 있다면, 해당 Web Project의 API 호출 시 Client Application에서 Security Port를 별도로 설정 해주어야 하니 참고 하길 바란다.