개발 문서

DiCert SDK 개발 문서

DiCert 편집팀 · 최종 수정 2026-10-27

개요

DiCert는 웹 서비스에서 사용자 PC에 저장된 공동인증서(NPKI, 구 공인인증서)를 불러올 수 있게 해 주는 SDK입니다. 서비스 페이지에 스크립트를 추가하고 CertModal을 열면 인증서 선택 창이 나타나고, 사용자가 고른 인증서 정보가 onConfirm 콜백으로 전달됩니다.

DiCert가 맡는 부분과 연동 서비스가 구현할 부분은 다음과 같습니다.

구분내용
DiCert가 제공사용자 PC의 인증서 탐색, 인증서 선택 창, 비밀번호 확인, 선택한 인증서 정보 전달, .p12/.pfx 가져오기와 내보내기
연동 서비스가 구현전달받은 정보의 서버 전송과 보관, 전자서명, 기관 로그인, 기관 데이터 조회·신고 등 기관별 업무 처리
사용자 PC에는 DiCert 보안 프로그램(Windows·macOS)이 설치되어 있어야 합니다. 설치되어 있지 않으면 선택 창이 설치 안내를 보여 줍니다.

빠른 시작

  1. DiCert에 회원가입하고 대시보드에서 서비스 도메인을 등록합니다. https://, 경로, 쿼리 없이 호스트 이름만 입력합니다(예: example.com, app.example.com). 등록한 도메인의 하위 도메인에서도 동작합니다.
  2. 실서비스 도메인은 월정기 구독을 시작합니다. 개발 중에는 localhost에서 구독 없이 바로 테스트할 수 있습니다.
  3. 서비스 페이지에 스크립트를 추가합니다.
  4. 버튼 클릭 등에서 CertModal을 열고, onConfirm에서 전달받은 정보를 서버로 보냅니다.
<script src="https://dicert.di3.kr/sdk/cert-modal.js"></script>
const certModal = new CertModal({
  onConfirm: async (payload) => {
    // 비밀번호와 개인키가 들어 있으므로 HTTPS로만 전송합니다
    const res = await fetch('/api/cert/register', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(payload),
    });
    if (!res.ok) throw new Error('등록 실패');
  },
  onCancel: () => {
    // 사용자가 선택 창을 닫았을 때
  },
});

document.getElementById('certButton').addEventListener('click', () => certModal.open());

완성된 예제 화면은 샘플 코드와 데모에서 볼 수 있습니다.

동작 방식

  1. 서비스 페이지에서 certModal.open()을 호출하면 선택 창이 열리고, 사용자 PC의 DiCert 보안 프로그램에 연결합니다.
  2. 보안 프로그램은 요청한 사이트가 DiCert에 등록된 도메인인지 확인합니다. 등록 도메인 목록은 DiCert 서버에서 받아 옵니다. 도메인을 새로 등록했다면 반영까지 잠시 걸릴 수 있습니다.
  3. 보안 프로그램이 하드디스크와 이동식 저장장치에서 인증서를 찾아 목록을 보여 줍니다.
  4. 사용자가 인증서를 고르고 비밀번호를 입력하면, 보안 프로그램이 비밀번호가 맞는지 확인합니다.
  5. 확인되면 인증서 정보가 onConfirm(payload)로 서비스 페이지에 전달됩니다.
인증서와 비밀번호는 DiCert 서버로 전송·보관되지 않습니다. DiCert 서버는 등록된 도메인 목록만 보안 프로그램에 알려 줍니다.

옵션과 메서드

옵션타입기본값설명
onConfirmfunction(payload)필수인증서 선택과 비밀번호 확인이 끝나면 호출됩니다. Promise를 반환해도 됩니다.
onCancelfunction()없음사용자가 선택 창을 닫으면 호출됩니다.
certType'all' | 'personal' | 'corporate''all''personal'은 개인 인증서(범용개인, 전자거래 서명용 등)만, 'corporate'는 법인·사업자 인증서만 보여 줍니다.
hideExpiredbooleanfalsetrue이면 만료된 인증서를 목록에서 숨깁니다. false이면 만료 인증서도 구분 표시와 함께 보여 줍니다.
helperUrlstring'http://127.0.0.1:34913'보안 프로그램 주소입니다. 일반적으로 바꿀 필요가 없습니다.
메서드설명
open()선택 창을 엽니다.
close()선택 창을 닫습니다.
// 법인 인증서만, 만료 인증서 숨김 (조달·전자입찰 서비스 예시)
const certModal = new CertModal({
  certType: 'corporate',
  hideExpired: true,
  onConfirm: async (payload) => { /* ... */ },
});

전달 정보 (payload)

onConfirm으로 전달되는 객체의 필드입니다. 파일 데이터는 Base64 문자열입니다.

필드타입설명
ownerstring인증서 소유자 이름 (Subject CN)
purposestring용도 (범용개인, 법인, 사업자, 전자거래 서명용 등)
issuerstring발급기관명
expirystring만료일 (YYYY-MM-DD)
passwordstring사용자가 입력한 인증서 비밀번호
certBase64string서명용 인증서 파일 (signCert.der)
keyBase64string서명용 개인키 파일 (signPri.key). 사용자 비밀번호로 보호된 상태 그대로입니다.
kmCertBase64string | null암호화용 인증서 (kmCert.der). 없으면 null
kmKeyBase64string | null암호화용 개인키 (kmPri.key). 없으면 null
caPubsBase64string | nullCA 인증 체인 (CaPubs). 없으면 null
serialNumberstring인증서 일련번호 (hex)
subjectDNstring전체 Subject DN (예: CN=홍길동,OU=...,O=yessign,C=kr)
issuerDNstring전체 Issuer DN
notBeforestring유효 시작일 (YYYY-MM-DD)
keyUsagestring[]키 용도 (digitalSignature, nonRepudiation 등)
oidstring[]인증서 정책 OID. 범용·금융·조달·행정 용도 구분에 사용
vidstring가상식별번호 VID (subjectAltName, hex)
fingerprintstringSHA-256 지문 (hex)
kmSubjectDNstring암호화용 인증서 Subject DN (암호화용 인증서가 있을 때)
kmKeyUsagestring[]암호화용 인증서 키 용도 (암호화용 인증서가 있을 때)

기관별로 자주 쓰는 필드는 다음과 같습니다. 실제 요구사항은 각 기관의 연동 규격을 기준으로 확인하세요.

활용 예주로 쓰는 필드
홈택스, 정부24certBase64, keyBase64, password
나라장터(G2B)certBase64, keyBase64, kmCertBase64, password
건강보험 EDIcertBase64, keyBase64, kmCertBase64, kmKeyBase64, password
금융·은행·증권certBase64, keyBase64, password, oid
인터넷등기소certBase64, keyBase64, password, serialNumber

서버에서 처리할 때

payload에는 개인키 파일과 비밀번호가 함께 들어 있습니다. 서버로 보내고 보관하는 방식은 연동 서비스가 정하며, 다음 사항을 권장합니다.

  • HTTPS로만 전송하고, 요청 본문을 로그나 오류 리포트에 남기지 않습니다.
  • 보관이 필요하면 암호화해서 저장하고 접근 권한을 최소로 제한합니다.
  • 비밀번호가 계속 필요하지 않은 업무라면 서명이 끝난 뒤 보관하지 않습니다.
  • 필요한 필드만 서버로 보냅니다. 위의 기관별 표를 참고하세요.
  • 전자서명과 기관 연동은 서버나 별도 서명 모듈에서 구현합니다. DiCert는 서명을 수행하지 않습니다.

오류와 예외 동작

현재 오류는 선택 창 안에서 사용자에게 안내되며, 연동 서비스로 오류 코드를 넘기지 않습니다. 사용자가 창을 닫으면 onCancel이 호출됩니다.

상황선택 창 동작
보안 프로그램이 설치되지 않았거나 실행 중이 아님Windows·macOS 설치 파일 다운로드 안내와 다시 시도 버튼을 보여 줍니다.
등록되지 않은 도메인에서 호출등록되지 않은 사이트라는 안내를 보여 줍니다. 대시보드에서 도메인 등록과 구독 상태를 확인하세요.
인증서를 찾지 못함인증서가 없다는 안내를 보여 줍니다.
비밀번호가 틀림선택 창 안에서 다시 입력하도록 안내합니다.
보안 프로그램이 개인키 형식을 해석하지 못하는 일부 인증서는 비밀번호 확인 없이 전달될 수 있습니다. 서버에서 서명할 때 비밀번호 오류를 처리하도록 구현하세요.

지원 범위와 환경

항목내용
인증서 위치하드디스크와 USB 등 이동식 저장장치의 NPKI 폴더, 행정전자서명(GPKI)·교육행정전자서명(EPKI) 인증서 폴더
인증서 파일signCert.der·signPri.key 형식, .p12/.pfx 가져오기
아직 지원하지 않음보안토큰(HSM), 휴대폰 인증서, 간편인증, 금융인증서
WindowsWindows 10 이상(x64), 보안 프로그램 1.1.24
macOSmacOS 10.15 이상(Intel·Apple Silicon), 보안 프로그램 1.2.56
브라우저최신 버전 브라우저를 권장합니다.

보안 프로그램은 DiCert 홈페이지에서 내려받을 수 있습니다. 사용자는 최초 1회 설치하면 되고, 이후에는 PC에 로그인할 때 자동으로 실행됩니다.

요금

  • 개발·로컬 환경(localhost)은 무료이며 별도 신청이 필요 없습니다.
  • 실서비스는 도메인 1개당 월 9,900원(VAT 별도, 실청구 10,890원)이며 월자동결제로 이용하고 언제든 해지할 수 있습니다.
  • 결제에 실패하면 7일의 유예 기간 동안 계속 이용할 수 있고, 그 안에 결제되지 않으면 이용이 정지됩니다(이용약관 제6조).
  • 해지하면 다음 결제일부터 청구되지 않으며, 이미 결제한 기간까지는 계속 이용할 수 있습니다.

관련 자료

개발 환경에서 바로 테스트해 보세요

localhost는 구독 없이 무료로 사용할 수 있습니다.

무료로 시작하기