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  

ASP에서 SQLite 사용하기

http://www.ch-werner.de/sqliteodbc/ 에서 SQLite ODBC Driver를 다운받아 설치한다.

다음 형태의 커넥션 문자열을 이용하여 SQLite를 사용한다.
DRIVER=SQLite3 ODBC Driver;Database=mydb.sqlite;LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;
Database= 다음에 DB 파일의 경로를 입력해 주면 된다. 그 외의 옵션은 무슨 내용인지 알 길이 없다.
테스트를 해보니 SELECT는 엄청 빠른데 INSERT는 10개의 레코드를 추가하는데 1초 이상이 걸린다. 너무 느린데, 뭔가 잘못 되어 있나???
잘못되어 있는게 아니라 SQLite가 File 기반이다 보니 매번 INSERT가 일어날 때마다 File에 Write를 해서 느리다.

[ASP] VBScript와 JScript 공존하기

다음과 같은 asp 파일이 있다고 하자. 결과는 어떻게 찍힐까?
<script language=”vbscript” runat=”server”>
Response.Write “VBScript “
</script>
<script language=”javascript” runat=”server”>
Response.Write(“JScript “)
</script>

JScript VBScript 라고 화면에 찍힌다. JScript가 소스의 뒤에 나오지만 먼저 실행이 된다.