APMSetup에서 SSL(https)을 구축하는 방법을 설명합니다.


1. APMSETUP 설치

기본 값으로 설치합니다.

http://www.apmsetup.com/download.php


2. Openssl 설치

아래 파일을 다운로드하여 c:\openssl에 압축 해제합니다.

openssl.zip

본 포스팅에서는 스스로가 인증기관(CA)이 되어 셀프 서명한 루트 공개키 인증서를 만들어서 사용합니다.


1) 개인키/공개키 만들기

인증기관(CA)의 키를 생성합니다.

>> openssl genrsa -out CA_Private.pem


2) 인증서 서명 요청서 만들기

인증기관에 요청할 요청서(CSR)를 만듭니다.

>> openssl req -new -key CA_Private.pem -out CA_Request.pem

지역, 회사명 등을 순서대로 기입합니다. 마지막 아래 2칸은 비워도 무방합니다.


3) 공개키 인증서 만들기

요청서를 가지고 인증기관의 개인키를 사용하여 공개키 인증서를 만듭니다.


3. APACHE 설정파일 수정

1) c:\APM_Setup\Server\Apache\conf\httpd.conf

아래 2줄을 찾아서 주석을 삭제합니다. 

#LoadModule ssl_module modules/mod_ssl.so 

#Include conf/extra/httpd-ssl.conf 


2) C:\APM_Setup\Server\Apache\conf\extra\httpd-ssl.conf 

- Webroot 경로명 수정
DocumentRoot "C:/APM_Setup/Server/Apache/htdocs" 을 "C:/APM_Setup/htdocs"으로 수정합니다.

키파일 경로명 수정
SSLCertificateFile "C:/APM_Setup/Server/Apache/conf/server.crt" 을 "C:/openssl/bin/CA_Cert.pem"으로 수정합니다.
SSLCertificateKeyFile "C:/APM_Setup/Server/Apache/conf/server.key" 을 "C:/openssl/bin/CA_Private.pem"으로 수정합니다.


4. 구동 및 확인


C:\APM_Setup\Server\Apache\bin\ApacheMonitor.exe을 실행하여 재시작한 뒤 빨간 밑줄과 같이 ssl이 올라왔는지 확인합니다.

접속 후 인증서를 확인해봅니다.


개발환경 : Visual Studio 2013 / Windows 7 x64

Active X, 후킹모듈과 같은 브라우저용 DLL을 개발하다보면 로그 처리 및 타 프로세스와 연동할 일이 생기는데 기본적으로 브라우저는 낮은 Integrity를 가지고 있으므로 temp폴더 정도의 자원만 사용할 수 있습니다.

제가 만든 프로그램 (PIPESERVER.exe - High Integrity)에서 생성한 파이프는 브라우저(iexplore.exe - Low Integrity)에서 사용할 수 없습니다.

이를 해결하기 위해 각종 핸들(PIPE 등)을 생성할 때 SECURITY 관련 속성을 인자로 주어야 합니다. 

아래 예제 소스는 RPC 파이프를 이용하여 브라우저 DLL에서 EXE의 함수를 호출하는 것을 보여줍니다.

(아래 참조사이트들을 참고하여 작성하였습니다.)

# EXE (서버) Side


# DLL (클라이언트) Side

주의하여야 할 점은 RpcStringBindingCompose 함수의 인자로 local을 의미하는 "\\\\."을 사용하였는데 일반적인 경우는 "localhost"를 사용해도 상관 없지만 브라우저 DLL의 경우 반드시 "\\\\."을 사용해야 정상 동작합니다.


도움이 되는 참조 사이트

RPC 기본 샘플 예제

http://www.codeproject.com/Articles/4837/Introduction-to-RPC-Part

VISTA에서 Active X와 통신

https://www.blackhat.com/presentations/bh-usa-08/Kim/BH_US_08_Kim_Vista_and_ActiveX_control_WhitePaper.pdf



함수가 호출 될 당시의 콜스택을 확인합니다.
DEPTH를 5로 설정하면 5 DEPTH까지 호출한 주소를 출력합니다.
만약 디버거 없이 동적으로 콜스택을 확인하고 싶다면 이 방법을 쓰면 됩니다.
(후킹용 DLL 에서 유용할 것이라 생각됩니다.)

이 예제는 TestFunction() 이 호출될 당시의 콜스택을 보여줍니다. (최적화 안함)


샘플을 돌린 결과입니다. 출력된 호출 주소의 바로 윗줄이 실제 호출 주소입니다.



+ Recent posts