Windows Server 2008 SSTP VPN... 구축시 주의해야할 점...
Windows Server 2008 관련 데모를 준비하다가보니, SSTP VPN이 필요하게 되었습니다. 어제 밤부터, 오늘까지 SSTP VPN을 실제 환경과 연동하여 데모를 준비하다가 느꼈던 점을 정리해봅니다. :)
SSTP VPN을 접속하는 클라이언트는 서버에 등록된 서버 인증 인증서의 해지 지점(CRL)에 접근이 가능해야 합니다.
Windows Server 2008 RRAS를 설정하고, Windows Vista VPN 클라이언트를 이용해서 SSTP VPN을 접근하니, 아래와 같은 이벤트 로그가 남더군요. 실제 VPN 클라이언트에서는 그냥 문제가 생겨서 연결되지 않는다라는 에러만 발생합니다.
SSTP VPN을 구축할 때, RAS 서버에는 HTTPS 포트의 대기를 위해 서버 인증 형식의 인증서가 설치되어져 있어야 합니다. 웹 서버가 제공하는 HTTPS 서버와는 달리, RAS SSTP의 경우에는 인증서 속성 중 CRL 배포 지점에 접속하여, SSTP 서버가 사용중인 인증서의 현재 상태를 확인하게 되어져 있습니다. CA 서버를 설치하시면, 기본적으로 설정되는 인증서의 CRL 정보가 있습니다. 해당 경로를 외부에서 접근이 가능하게 해주시던지, 아니면 CA 속성을 변경하여, 인증서에 내장될 속성의 정보를 변경해주셔야 합니다. 아래 그림의 오른쪽이 기본적으로 CA에 설정되는 CRL 정보입니다. 가장 편리하게 구축하실 수 있는 것이 바로 웹 서버를 통한 CRL 서비스이죠. 이를 적절히 수정해놓은 후, 발급 받은 인증서가 아래 그림의 왼쪽 부분입니다. CRL.Koalra.Com이라는 웹 사이트에서 CRL 정보를 배포하게 만들고, 외부에서 접근이 가능하게 만들면 되겠죠.
너무 당연한 이야기지만, 인증서의 주체 이름과 외부에서 접근하는 DNS 이름과는 동일해야 합니다. 웹 서버 HTTPS처럼요...
Windows Server 2008 Boot Camp를 참여해보셨던 분들께서는 SSTP VPN을 구축하는 HOL을 해보셨을 것입니다. 해당 랩에서는 SSTP에서 사용할 인증서를 위해, 나머지 인증서를 전부 삭제하라는 권장을 했을 겁니다만, 실제 환경에서는 해당 서버에서 여러 장의 인증서를 가지고 있는 경우가 있을 것입니다. Windows Server 2008 RAS의 SSTP는 RAS 서비스 설치시, 컴퓨터 저장소에 저장된 인증서중 가장 첫번째(위에) 위치한 인증서를 사용하게 만들어져 있습니다. 물론 차후에 바꿀 수 있습니다. 이 포스트는 바꾸는 방법에 대해서 알려드리기 위한 용도도 있죠.
여러 장의 인증서 중, SSTP에서 사용할 인증서에 대한 정보는 명령어 프롬프트에서 NETSH를 이용하시면 됩니다. NETSH HTTP SHOW SSLCERT를 입력하시면 아래의 그림과 같은 정보가 나옵니다. 여기서 가장 중요한 정보가 인증서 해시의 정보가 인증서의 속성에 있는 손도장의 정보와 같냐는 것입니다. 위의 인증서 속성 그림과 아래의 그림을 비교해보시면 같은 것을 아실 수 있습니다. 또한 손도장 알고리즘은 SHA1이어야 합니다. 그렇다면.. 정보가 같지 않다면??? 먼저 손도장에 긴 16진수를 복사하시고, 공백을 모두 없앱니다. 해당 정보가 인증서의 해시로 사용될 것입니다.
먼저 기존에 사용중인 정보를 삭제합니다. 명령어 프롬프트에서 아래와 같이 입력합니다.
netsh http delete sslcert ipport=0.0.0.0:443
netsh http delete sslcert ipport=[::]:443
그럼 SSL 인증서 바인딩 정보가 모두 삭제가 됩니다. NETSH HTTP SHOW SSLCERT를 입력해보시면 아실 수 있죠.
reg delete HKLM\SYSTEM\CurrentControlSet\Services\SstpSvc\Parameters /v SHA256CertificateHash /f
netsh http add sslcert ipport=0.0.0.0:443 certhash=메모해놓은 손도장정보(공백없이) appid={ba195980-cd49-458b-9e23-c84ee0adcd75} certstorename=MY
netsh http add sslcert ipport=[::]:443 certhash=메모해놓은 손도장정보(공백없이) appid={ba195980-cd49-458b-9e23-c84ee0adcd75} certstorename=MY
net stop sstpsvc /y
net start remoteaccess
조금 어렵나요? 오타만 조심하시면 쉽게 수정하실 수 있습니다. 이런 후, 서비스를 재시작하시면 새로운 인증서를 이용하게 되고, VPN 클라이언트에서 서버의 CRL 정보만 접근이 가능하다면, 당연히 SSTP VPN에 접속하실 수 있습니다. 또한 NAP VPN 시나리오와 연계하시면 SSTP VPN에서도 NAP을 이용한 클라이언트 컴플라이언스 관리를 하실 수 있습니다.
노파심에 정말 웹 서버에서 CRL을 체크하는지 확인해봤더니.. 정말 하더군요 -_-;;
KB947054에 SSTP VPN과 관련된 레지스트리에 NoCertRevocationCheck라는 DWORD 키가 있지만 왠일인지 잘 동작하지 않더군요.. 참고만 하시기 바랍니다. SSTP VPN 구축시 생길 수 있는 문제점은 위의 두가지 경우가 많을 것 같아 잠시 짬을 내서 포스팅해봅니다.
Comments
Anonymous
August 16, 2009
안녕하세요. 코알라님의 글을 보고 sstp를 설정하고 있습니다. 도움이 많이 되고 있습니다. 그런데 문제가 하나 생겨서 댓글 남깁니다. sstp 설정이 안되어 손도장을 옮기는 작업을 하고 있었는데 모든 명령어는 잘 먹는데 하단의 2개만 안먹네요... "netsh http add sslcert ipport=0.0.0.0:443 certhash=메모해놓은 손도장정보(공백없이) appid={ba195980-cd49-458b-9e23-c84ee0adcd75} certstorename=MY" <- (물론 손도장은 수정하였습니다.) 라고 치면.. "SSL 인증서를 추가하지 못했습니다. 오류: 1312 지정한 로그온 세션이 없습니다. 이미 종료되었을 수도 있습니다." 라고 나오네요... 환경은 Windows 2008 Server R2 Standard 입니다. 혹시 원인을 알고 계신다면 답변 부탁드리겠습니다. 감사합니다.Anonymous
August 16, 2009
안녕하세요. AppID가 R2도 동일한지는 저도 확인을 하지 않아서 모르겠네요. 제 생각은 손도장 정보 or AppID의 확인이 필요할 것 같습니다. 계속 해결되지 않으신다면.. 상단의 EMAIL 링크를 이용하셔서 저에게 메일한통 주시면 기술 지원 가능토록 하겠습니다~(1회성)Anonymous
August 17, 2009
안녕하세요. 댓글 감사합니다. 확인해 보니 AppID 문제는 아닌것 같습니다. 혹시 모르니 다시 한번 설정을 확인해 보겠습니다. 만약 문제가 해결되지 않는다면 도움을 요청드리겠습니다. 감사합니다. 좋은하루 보내세요^^Anonymous
November 01, 2009
안녕하세요. sstp 를 WINDOWS 2008 R2 에서 테스트 중인데요.. 위에서 어떤 분이 언급하신 것 같은데... "SSL 인증서를 추가하지 못했습니다. 오류: 1312 지정한 로그온 세션이 없습니다. 이미 종료되었을 수도 있습니다." 웹을 뒤져봐도 관련된 시원한 답변이 없네요. 백승주님 혹시 관련 정보 있으시면 포스팅 해주시면 정말 감사하겠습니다.Anonymous
February 02, 2014
http://blogs.msdn.com/b/kaushal/archive/2012/10/07/error-hresult-0x80070520-when-adding-ssl-binding-in-iis.aspx IIS에서 SSL 인증서 binding시에도 문제가 생긴다고 하네요. 권한 문제인듯한데요..