ASP: WinHttp.WinHttpRequest.5.1을 이용해서 https 사이트 접속하기

ASP에서 Client Certificate을 요구하는 https 사이트를 접속하는 방법을 소개하고자 한다.

인증서가 서버에 설치되어 있고, 경로는 LOCAL_MACHINE\My\MyCertificate라고 가정을 하고 다음의 페이지를 만들어서 브라우져로 접속을 해보자.

 
sUrl = "https://svcs.sandbox.paypal.com/AdaptiveAccounts/GetVerifiedStatus"  
sPostData = "test=test"

Set oHTTP = Server.CreateObject("WinHttp.WinHttpRequest.5.1")  
oHTTP.SetClientCertificate("LOCAL_MACHINE\My\MyCertificate")  
oHTTP.open "POST", sUrl, FALSE  
oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"  
oHTTP.send sPostData  
sHtml = oHTTP.ResponseText  
Response.Write sHtml  

위에서 6번째 줄 oHTTP.SetClientCertificate(“LOCAL_MACHINE\My\MyCertificate”) 이 핵심이다.

브라우져 접속시 두가지 오류가 발생할 가능성이 있다.

WinHttp.WinHttpRequest error ‘80072f0c’.

A certificate is required to complete client authentication.

이 오류는 Certificate 경로에 문제가 있는 경우이다. LOCAL_MACHINE\My\MyCertificate을 확인해 봐야 한다.

WinHttp.WinHttpRequest error ‘80072f8f’

A security error occurred.

이 오류는 웹서버(IIS)의 실행 유저(IUSR_MACHINENAME, IWAM_MACHINENAME)가 Certificate의 Private Key을 접근하지 못해서 발생하는 에러이다. 해결 방법은 WinHttpCertCfg.exe를 이용해서 다음의 방법으로 사용자에게 권한을 부여하면 된다.

winhttpcertcfg -g -c LOCAL\_MACHINE\My -s MyCertificate -a IWAM\_TESTMACHINE

부여된 권한을 확인하는 방법은

winhttpcertcfg -g -c LOCAL_MACHINE\My -s MyCertificate -l