본문 바로가기
내가만드는것_만든것/프로그램-판매

Java 정부 사이트 공인인증서 로그인, 스크래핑 포트폴리오 (korea-scraper)

by Joseph.Lee 2024. 2. 18.

Golang 구현은 : https://jsty.tistory.com/351 (korea-pki) 에 있습니다.

 

korea-scraper 는 Java 로 개발 된 정부 사이트 스크래핑을 위한 기본 구현 라이브러리입니다.

비동기 호출 기반의 스크래핑 및 headless 공인인증서 로그인이 구현되어 있습니다.

개발 의뢰 요청 시 해당 라이브러리를 바탕으로 세부 구현을 만들어 드립니다.

 

특징

비동기 HTTP 호출 사용

apache http clients 5 의 CloseableHttpAsyncClient 와 CompletableFuture 을 사용하여 non-blocking 구현 사용으로 인해 I/O 및 Thread 에 대해 효율적으로 동작 가능하다.

 

SequenceMachine 구조 사용

StateMachine 과 유사한 SequenceMachine 구조를 개발하여 transaction 에 대해 Step 별로 구현한 것을 SequenceMachine 으로 묶어 하나의 클래스로 구현한다.
그리고 각 Step 의 결과(State) 를 Serialization 하여 저장할 수 있다. 이를 통해 진행 중 일시적 오류 발생 / 리포트 재-다운로드 / 개발 중에 많은 요청을 해야 하는 경우 등에서 이미 실행한 요청을 재-실행하지 않고 이어서 실행할 수 있다.

 

Java + Gradle (kotlin-dsl) 사용 및 Java Library 구현

korea-scraper core (공통 사용) 부분과 별도의 사이트용 구현 (customized) 으로 구분되어 있습니다.
모든 부분은 Java Library 로 빌드 됩니다.
따라서 각 모듈 부분에 대한 관리가 용이하고, 라이브러리 형태로 쉽게 사용할 수 있습니다.

 

AnySign Xgate 구현 가능

대부분의 사이트에는 xgate 가 불필요하지만, 일부 특정 레거시 사이트 (인터넷 등기소 등) 의 경우에는 반드시 anysign xgate 를 구현할 필요가 있습니다.
이런 경우에도 대응할 수 있도록 AnySign4PC에 websocket 으로 연결하여 blockEnc2 등이 가능합니다.
이 또한 Netty 를 이용하여 비동기 동작으로 효율적으로 구현되어 있습니다.

 

fun main() {
    val group = NioEventLoopGroup(1)
    val client = Anysign4PcClient.builder()
        .origin("www.site-name.go.kr")
        .build(group, URI.create("wss://localhost:10531/"))

    client.setAttributeInfo(listOf(
        "check_Version=1.1.2.0",
        "put_LicenseN=30820...",
        "put_License2N=308207..",
        "put_StorageN=HARD,REMOVABLE,ICCARD,PKCS11,USBTOKEN,MOBISIGN,MPHONE,CSP",
        "put_LanguageN=ko-KR",
        "put_CharsetN=euc-kr",
        "put_ProxyUsageN=",
        "put_TransKeyN="
    )).get()
        .let { result ->
            println(result)
        }

    client.blockEnc2(BlockEnc2Params(
        xgateAddress = "site-ip:1443:18080",
        path = "get path",
        param = "get params",
        method = "GET",
        charset = "euc-kr"
    )).get()
        .let { result ->
            println(result)
        }
}

 

 

구현 예시

 

구현 사례

- 정부24 공인인증서 로그인

- 홈택스 공인인증서 로그인

- 홈택스 간편인증 로그인

- 홈택스 발급 스크래핑

- 4대사회보험정보연계센터 발급 스크래핑
- 사회보험통합징수포털 발급 스크래핑
- 위택스 발급 스크래핑

- 중소벤처24 발급 스크래핑

- 인터넷 등기소 발급 스크래핑 (Anysign, IPRT, 가상프린터 구현)

- 국민 건강 보험 스크래핑

- 캡챠 solver 개발을 통한 자동 로그인 : https://jsty.tistory.com/368

- 기업은행 계좌 목록 / 거래 내역 스크래핑

 

모든 구현은 java 로 직접 로그인 알고리즘( AnySign, VidMsg, pkcs1, seed 인증서 암호화)등을 구현하여 selenium 없이 headless 로 동작합니다.

인터넷등기소의 경우 Anysign blockenc2와 IPRT 프로그램 동작으로 인해 발급 과정 중 non-headless 로 동작하며, windows os 가 필요합니다.

 

 

문의 : joseph@jc-lab.net

 

 

개발 이력/스크래핑 내역

- 공인인증서 로그인 개발

- 간편인증(토스/카카오 등) 로그인 개발

- NPKI 로그인 개발

- 정부24 스크래핑 개발

- 홈택스 스크래핑 개발

- 인터넷 등기소 스크래핑 개발

- 인터넷등기소 IPRT IPRTCrsIgmPrintXCtrl

- markany maepscourt

- anysign anysign4pc blockEnc2 blockDec2

- nProtect pluginfree KeyPad __E2E_KEYPAD__ __E2E_UNIQUE__

 

 

node.js 에서 seed 알고리즘 구현 및 인증서 복호화는 korea-forge 으로 가능합니다.

https://github.com/jc-lab/korea-forge

 

GitHub - jc-lab/korea-forge: SEED supported node-forge

SEED supported node-forge. Contribute to jc-lab/korea-forge development by creating an account on GitHub.

github.com

 

 

 

공인인증서 로그인 소스

간편인증 로그인 소스

반응형

댓글