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