본문 바로가기

스크린 스크래핑

국민건강보험공단 스크래핑을 알아보자

저는 개발 주력 언어가 C#입니다.

최근 많은 분들이 스크린 스크래핑 개발에 관한 문의를 주시고 계십니다.

걔중에서 국민건강보험공단 홈페이지에 공인인증서로 로그인하고 원하는 데이터를 스크래핑 하는 방법에 대해서 알아 보겠습니다.

(최근 2~3군데 개발 프로젝트에서 개발 문의를 해 주셔서 동일한 답변을 드린 상태입니다.)

1) 로그인에 필요한 변수들 획득 방안

우선 로그인 패킷을 살펴 보도록 하겠습니다.

 

null

위 이미지에서 보시는 바와 같이 로그인에 중요한 변수 중에 “signedMsg”와 “vidMsg”라는 값이 있습니다.

“signedMsg”의 경우는 인증서의 개인키를 이용하여 서명한 문자열 변수 데이터입니다.

SHA1 방식으로 암호화 되므로, 복호화는 불가능합니다(hash 방식).

“vidMsg”는 “signedMsg” 값과 기타 변수들을 복합적으로 조합하여 생성해내는 문자열 변수 데이터입니다.

2) AnySign4PC

1번의 문제점은 이 변수들을 구하기 위해서 AnySign4PC라는 소켓서버가 클라이언트 컴퓨터에 상시 돌아가고 있습니다.

해당 소켓서버가 인증서를 읽고 있으며, 각각의 변수들을 생성해서 리턴해 주는 형식으로 돌아갑니다.

이는 브라우저인증서나 공인인증서나 동일한 방식으로 구동되고 있습니다.

 

null

아래는 127.0.0.1 루프백 주소로 소켓 연결을 한 후, 결과 값을 전송 받고 있는 화면입니다.

 

null

 

위에 보시는 308로 시작하는 ReturnValue가 AnySign4PC 소켓 서버로부터 전달 받은 “signedMsg” 값입니다.

이렇다면, Windows 환경이 아닌 컴퓨터에서는 AnySign4PC를 구동할 수 없으므로 건강보험공단 스크래핑이 불가하다는 판단이 듭니다.

여기서 포기할 수는 없죠?

3) Workaround 탐색

이 방법을 해결할 workaround를 탐색해 보겠습니다.

국내 보안 프로그램들은 ActiveX 구동이 힘든 상황이거나 Windows 외의 OS를 지원하기 위해서 JRE 형태의 라이브러리를 동시에 제공하기도 합니다.

해서 Mac과 Ubuntu OS에서 건보사이트 로그인을 시도해 보았습니다.

결론은 Mac 혹은 Ubuntu에서는 공인인증서 로그인 창 호출을 위한 AnySign4PC 프로그램 설치가 안 됩니다.

JRE 등을 활용한 workaround도 제공되지 않습니다.

 

null

 

모바일 사이트 조차 로그인 기능이 없는 단순한 정보조회 페이지들 뿐입니다.

 

null

 

즉, 로그인 서비스를 제공하지 않는 것으로 보여집니다.

게다가 개인 로그인이 필요한 앱은 별도로 제공하더라고요.

그렇다면...

네, Windows 계열의 컴퓨터에서 AnySign4PC 소켓 서버를 상시 구동할 수 있는 환경이 되어야 정상적인 스크래핑 개발이 가능하다는 얘기가 됩니다.

다만, 기본 평문을 공인인증서로 서명한 signedMessage와 식별번호(주민등록번호 혹은 사업자등록번호)를 서명한 vidMessage를 직접 생성하시면 AnySign4PC가 필요하지 않을 수도 있습니다.

개발에 관한 깊은 문의는 rhombask@지메일로 주세요.

습자지 같은 지식이지만 공유해 드리겠습니다.

 

EDIT: 2023년 1월

AnySign4PC는 공동인증서 조회 및 서명을 위한 프로그램일 뿐입니다.
공동인증서 규격은 이미 다른 게시물(https://powercorea77.tistory.com/31)에서 규격을 설명한바 있습니다.
현재 상태는 AnySign4PC가 하는 서명, 검증, 암/복호화 업무를 C#으로 구현해서 사용하고 있습니다.

 

EDIT: 2023년 9월

이제는 공동인증서 로그인 처리만 전문적으로 대행해주는 서버가 출시되었습니다.

https://tauth.kr 을 참고하세요.