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 클라이언트에서는 그냥 문제가 생겨서 연결되지 않는다라는 에러만 발생합니다.

image

SSTP VPN을 구축할 때, RAS 서버에는 HTTPS 포트의 대기를 위해 서버 인증 형식의 인증서가 설치되어져 있어야 합니다. 웹 서버가 제공하는 HTTPS 서버와는 달리, RAS SSTP의 경우에는 인증서 속성 중 CRL 배포 지점에 접속하여, SSTP 서버가 사용중인 인증서의 현재 상태를 확인하게 되어져 있습니다. CA 서버를 설치하시면, 기본적으로 설정되는 인증서의 CRL 정보가 있습니다. 해당 경로를 외부에서 접근이 가능하게 해주시던지, 아니면 CA 속성을 변경하여, 인증서에 내장될 속성의 정보를 변경해주셔야 합니다. 아래 그림의 오른쪽이 기본적으로 CA에 설정되는 CRL 정보입니다. 가장 편리하게 구축하실 수 있는 것이 바로 웹 서버를 통한 CRL 서비스이죠. 이를 적절히 수정해놓은 후, 발급 받은 인증서가 아래 그림의 왼쪽 부분입니다. CRL.Koalra.Com이라는 웹 사이트에서 CRL 정보를 배포하게 만들고, 외부에서 접근이 가능하게 만들면 되겠죠.

image image

너무 당연한 이야기지만, 인증서의 주체 이름과 외부에서 접근하는 DNS 이름과는 동일해야 합니다. 웹 서버 HTTPS처럼요...

Windows Server 2008 Boot Camp를 참여해보셨던 분들께서는 SSTP VPN을 구축하는 HOL을 해보셨을 것입니다. 해당 랩에서는 SSTP에서 사용할 인증서를 위해, 나머지 인증서를 전부 삭제하라는 권장을 했을 겁니다만, 실제 환경에서는 해당 서버에서 여러 장의 인증서를 가지고 있는 경우가 있을 것입니다. Windows Server 2008 RAS의 SSTP는 RAS 서비스 설치시, 컴퓨터 저장소에 저장된 인증서중 가장 첫번째(위에) 위치한 인증서를 사용하게 만들어져 있습니다. 물론 차후에 바꿀 수 있습니다. 이 포스트는 바꾸는 방법에 대해서 알려드리기 위한 용도도 있죠.

image

image

여러 장의 인증서 중, SSTP에서 사용할 인증서에 대한 정보는 명령어 프롬프트에서 NETSH를 이용하시면 됩니다. NETSH HTTP SHOW SSLCERT를 입력하시면 아래의 그림과 같은 정보가 나옵니다. 여기서 가장 중요한 정보가 인증서 해시의 정보가 인증서의 속성에 있는 손도장의 정보와 같냐는 것입니다. 위의 인증서 속성 그림과 아래의 그림을 비교해보시면 같은 것을 아실 수 있습니다. 또한 손도장 알고리즘은 SHA1이어야 합니다. 그렇다면.. 정보가 같지 않다면??? 먼저 손도장에 긴 16진수를 복사하시고, 공백을 모두 없앱니다. 해당 정보가 인증서의 해시로 사용될 것입니다.

image

먼저 기존에 사용중인 정보를 삭제합니다. 명령어 프롬프트에서 아래와 같이 입력합니다.

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을 체크하는지 확인해봤더니.. 정말 하더군요 -_-;;

image

KB947054에 SSTP VPN과 관련된 레지스트리에 NoCertRevocationCheck라는 DWORD 키가 있지만 왠일인지 잘 동작하지 않더군요.. 참고만 하시기 바랍니다. SSTP VPN 구축시 생길 수 있는 문제점은 위의 두가지 경우가 많을 것 같아 잠시 짬을 내서 포스팅해봅니다.