지난 시간에는 Windows Azure에 여러분이 게시하려고 했거나, 이미 게시한 Web Role, Worker Role 등을 원격으로 제어하기 위해서 인증서를 등록하는 방법을 알아보았습니다. 전통적인 IT 환경에서 널리 통용되는 Active Directory 기반의 인증이 Windows Azure에서는 극히 제한적으로만 활용할 수 있기 때문에 인증서, 정확히는 X.509 형식의 인증서를 관리하는 일은 Windows Azure 기반의 관리나 서비스 개발에 있어서 매우 중요합니다.

오늘은 Windows Azure 환경에서 사용되는 대표적인 인증서 활용 사례들을 살펴보고, 인증서를 체계적으로 관리할 수 있는 방안을 논의해보기로 하겠습니다.

Windows Azure Web Role의 HTTPS 지원

Windows Azure Web Role은 내부적으로 IIS 7.0 (Guest OS 버전을 Windows Server 2008 R2로 지정하였을 경우 IIS 7.5)를 기반으로 웹 사이트나 WCF, XML 웹 서비스 등을 호스팅하도록 되어있습니다. 이 때, 보안 향상을 위하여 HTTPS 프로토콜을 기반으로 호스팅할 필요가 있는데 이 때 Windows Azure에서는 HTTPS 프로토콜 형성에 필요한 인증서를 Windows Azure Portal에 별도로 등록하도록 요구합니다. 이렇게 하는 이유는, Windows Azure가 필요 시에 수행하는 동적 인스턴스 복제 때 마다 시스템에 필요한 인증서를 자동으로 설치할 수 있도록 하기 위함이고 또한 HTTPS 기반의 프록시 릴레이를 구현하기 위함입니다. 

이를 위해서 Windows Azure에 제출해야 하는 인증서는 개인 키 값을 포함하는 PFX 형식의 인증서 파일이며, 개별 Windows Azure 프로젝트에서는 인증서의 손도장 값 (Thumbnail)을 설정 파일 상에 지정해야 합니다. 이전에 언급한 대로, 손도장 값은 단순히 어떤 인증서를 사용할 것인가에 대한 설정일 뿐이며, 실제로 인증서를 관리하는 것은  Windows Azure에서 관리를 하는 것입니다. 개인 키를 포함한 인증서는 외부로 유출되지 않도록 따로 잘 보관하여야 하며, 보안 상 Windows Azure에 제출한 개인 키 포함 인증서는 외부 유출 방지를 전제로 다시 회수하기 어렵게 되어있습니다.

참고로, Windows Azure에 제출하지 않은 인증서에 대한 Thumbnail 값을 사용하려고 하면 Windows Azure Portal 사이트에서 패키지를 게시하기 전에 이를 검사하여 배포할 수 없음을 안내하는 메시지가 나타납니다. 인증서에 대한 정보는 메타 데이터 형태로 기술된 XML 파일을 이용하여 확인할 수 있는 것이므로 이를 검사하는 것이므로 이 과정 자체는 오래 걸리지 않습니다.

Hosted Service용 인증서

Hosted Service용 인증서는 각 VM에 직접 설치하는 인증서로, VM 내에서 사용하기 위한 목적으로 제공되며, 나중에 설명할 기회가 있을 것입니다만 Windows Azure AppFabric Access Control을 Windows Azure 환경에서 정상적으로 사용하기 위해서는 꼭 필요하고, 또한 Remote Desktop 서비스를 개통하기 위해서도 필요합니다.

Windows Azure 환경에서의 Remote Desktop은 네트워크 수준 인증을 사용할 수 없기 때문에 모든 암호화 과정을 미리 등록한 인증서를 기반으로 할 수 있도록 되어있습니다. 이는 지난 시간에 살펴본 것과 같은 것으로, Visual Studio를 이용하여 클라우드에 게시할 수 있는 패키지 파일을 작성하기 직전에 지정할 수 있도록 되어있으며 현재는 개별 Role 단위가 아니라 Azure Project 전체에 걸쳐 공유하는 방식으로 인증서 지정이 가능합니다.

Remote Desktop용 인증서 역시 프로젝트 상에서는 Thumbnail 값만이 필요하지만 실제로 작동할 수 있으려면 Windows Azure의 프로젝트용 인증서 목록 안에 들어있어야 합니다. Windows Azure Portal 사이트에서 역시 이 설정을 검사하므로 등록되지 않은 인증서를 사용하려고 하면 업로드 후 배포가 취소됩니다.

Windows Azure Management API용 인증서

Windows Azure에서 사용하는 인증서의 또다른 유형으로는 Management API에서 사용하는 인증서가 있습니다. 이 인증서는 Management API를 사용하려 하는 Consumer와 Management API Provider 사이의 암호화 통신을 성립하기 위한 목적으로 사용되는 인증서입니다.

Management API용 인증서를 포털 사이트에 제출하는 방법은 앞서 살펴본 두 가지 형태의 인증서를 제출하는 방법과 차이가 있습니다. 포털 사이트 내에서 Management API용 인증서는 제출 후 각 VM에 설치되지는 않으므로 양쪽의 용도를 정확히 구분할 필요가 있습니다.

테스트용 인증서를 간단히 만드는 방법

이와 같이 인증서를 활용하는 폭이 많지만 한 가지 궁금한 것은, 때 마다, 그리고 갱신 철마다 매번 VeriSign이나 Thawte와 같은 인증 기관을 통해서 적지 않은 금액을 지불하고 인증서를 갱신해야 하는 것인가에 대한 부분입니다. 결론부터 말하면, 권장 사항으로 말할 것 같으면 모든 인증서를 그렇게 하는 것이 가장 최적이지만, 현실적으로는 그렇게 할 필요가 없습니다. 프로젝트에 관계되어있는 내부 관계자들 사이에서 이용하기 위한 서비스에서 필요한 인증서라면 (원격 데스크톱 제어 시 필요한 인증서와 같이) 임시 인증서를 생성하고 사용하면 됩니다. 하지만 HTTPS 웹 사이트를 실행하려는 경우라면 이는 내부 이해 관계자들 사이가 아닌 대외적인 웹 사이트가 될 가능성이 크기 때문에 정상적인 인증서를 발급받아 서버 인증서로 설치할 수 있도록 해주는 것이 꼭 필요할 것입니다.

정식 인증서를 사용하기 전에는 자체 서명 인증서를 통하여 이런 기능을 미리 시험해볼 수 있으며, 자체 서명 인증서를 만드는 방법은 Windows SDK에 포함되어있는 MAKECERT를 이용하거나 IIS 7 관리자 콘솔의 인증서 생성 마법사를 이용하는 방법이 있습니다. 이 중 명령줄 도구를 사용하는 방법은 http://blogs.microsoft.co.il/blogs/applisec/archive/2008/04/08/creating-x-509-certificates-using-makecert-exe.aspx 의 내용을 활용하시면 도움이 될 것입니다.