자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서...

64

Upload: others

Post on 14-Sep-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit
Page 2: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

자바 기반의 공인인증서 가입자 소 트웨어

구 가이드라인

Guideline for Java based PKI Toolkit Implementation

2007. 12.

정 보 통 신 부

한 국 정 보 보 호 진 흥 원

Page 3: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- I -

목 차

제 1 장 개요 ··································································································1

제 1 목 ·········································································································1

제 2 기 효과 ··································································································1

제 3 상 ·········································································································1

제 4 용범 구성 ···················································································1

제 2 장 자바 기반의 공인인증서 가입자 소 트웨어 ······························3

제 1 자바 기술 개요 ·······················································································3

제 2 자바 기반 가입자 소 트웨어 필요성 ···················································4

제 3 가입자 소 트웨어 제사항 ·································································5

제 3 장 자바 기반의 공인인증서 가입자 소 트웨어 구 요구사항 ····7

제 1 보안토큰 장토큰 지원 ···································································7

제 2 자바 클래스 일 변조 방지 ·······························································7

제 3 자서명키 리 ·····················································································8

제 4 공인인증서 리 ·····················································································9

1. 공인인증서 요청형식 ··················································································9

2. 참조번호와 인가코드 ··················································································9

3. 공인인증서 리 로토콜 ···········································································9

4. 공인인증서 장 조회 ·········································································10

5. 공인인증서 표시 인증업무 칙 조회 ··················································10

6. 최상 인증기 신뢰성 확인 ····································································11

제 5 인증서 경로 구축 검증 ···································································11

1. 공인인증서 경로 구축 ···············································································11

2. 공인인증서 경로 검증 ···············································································12

3. 실시간 인증서 상태확인 ···········································································13

제 6 식별번호를 이용한 본인확인 기술 ······················································13

Page 4: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- II -

제 4 장 자바 기반의 공인인증서 가입자 소 트웨어 구 시 ··········14

제 1 보안토큰 지원 ·······················································································14

1. Sun PKCS#11 로바이더 ········································································14

2. 보안토큰 구동 로그램 치정보 처리 ····················································15

3. Sun PKCS#11 Provider 사용 방법 ··························································15

4. Sun PKCS#11 Provider 내부 클래스를 이용한 R값 추출 ·····················17

제 2 장토큰(IC카드) 지원 ·········································································18

제 3 자바 클래스 일 변조 방지 ······························································20

제 4 자서명키 공인인증서 리 ··························································22

1. 자서명키 리 ························································································22

2. 공인인증서 장 조회 ·········································································22

3. 공인인증서 인증서 폐지목록 처리 ······················································24

4. 공인인증서 인증업무 칙(CPS) 조회 ·······················································25

5. 최상 인증기 신뢰성 확인 ····································································26

부록 1. 장토큰(IC카드) 지원을 한 구 시 ·················································28

부록 2. 자바 기반 가입자 소 트웨어 실행환경 ····················································36

가. 자바실행환경 ·································································································36

나. 자바실행환경 호환성 ····················································································38

다. 자바애 릿 실행환경 ····················································································38

부록 3. 자바 련 기타 구 시 ·········································································39

가. 자바와 자바스크립트 간의 통신 ··································································45

나. 자바 기반의 가입자 소 트웨어 배포 ·························································42

다. 자바애 릿 코드서명 ····················································································42

라. 자바애 릿의 삽입 ························································································45

마. 자바클래스 원격지 로딩 ···············································································49

사. 자바애 릿에 한 근권한 리 ······························································51

용어정리 ····················································································································53

약어표 ·······················································································································54

참고문헌 자료 ·····································································································55

Page 5: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- III -

표 목 차

표 1 Sun PKCS#11 Provider 사용 시 ································································15

표 2 Sun PKCS#11 Provider 내부 클래스를 이용한 R값 추출 ····························17

표 3 장토큰 이용 시 ·························································································19

표 4 자바클래스 난독처리 시 - 난독치리 ·····················································21

표 5 자바클래스 난독처리 시 - 난독처리 후 ·····················································21

표 6 OS별 이동식 디스크 경로 ··············································································23

표 7 운 체제별 이동식디스크 경로 획득 방법 ·····················································23

표 8 CertificateFactory 클래스 이용 ··································································24

표 9 CertificateFactory 클래스 이용 - 별도 로바이더 이용 ·························25

표 10 JEditoPane을 이용한 웹 라우 구 시 ················································25

표 11 장토큰 구 시 ·······················································································28

표 12 자바실행환경 자동다운로드 경로 ·································································37

표 13 JSObject 이용 시 ························································································39

표 14 원본 APPLET 태그 ·······················································································40

표 15 새로운 OBJECT 태그 ····················································································40

표 16 새로운 EMBED 태그 ·····················································································41

표 17 Common DOM API 이용 시 ····································································41

표 18 자바애 릿 코드서명 방법 시 ···································································43

표 19 APPLET 태그 시 ·······················································································46

표 20 OBJECT 태그 시 ························································································46

표 21 JRE 자동다운로드 설정 시 ········································································47

표 22 EMBED 태그 시 ························································································47

표 23 다 웹 라우 지원 시 ··········································································48

표 24 웹 라우 를 악하여 태그를 지정하는 시 ············································49

표 25 일시스템으로부터 자바클래스를 로딩하는 시 ······································50

표 26 자바애 릿에서의 근권한 처리 시 ························································52

Page 6: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- IV -

그 림 목 차

그림 1 자바 랫폼 구조 ··························································································4

그림 2 공인인증서 가입자 SW ·················································································5

그림 3 보안토큰 장토큰 지원 ··········································································8

그림 4 공인인증서 표시 ··························································································11

그림 5 최상 인증기 신뢰성 확인 ·······································································11

그림 6 인증서 보기/검증 ························································································12

그림 7 인증서 경로 ··································································································12

그림 8 인증서 본인확인 기능 ·················································································13

Page 7: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 1 -

제 1 장 개요

제 1 목

본 가이드라인에서는 자바 기술을 이용하여 공인인증서 가입자 소 트

웨어를 구 하고자 할 때 필요한 기술 요구사항 구 방법에 해

설명한다.

제 2 기 효과

본 가이드라인의 기 효과는 사용자 측면과 개발자 측면으로 구분될 수

있다. 사용자 측면에서는 다양한 운 체제와 웹 라우 상에서 공인인증

서 서비스를 이용할 수 있는 환경 기반이 갖춰질 수 있으며, 개발자 측면

에서는 자바 기반의 공인인증서 가입자 소 트웨어를 구 함에 있어서의

요구사항과 구 시를 가이드 받음으로써 개발기간의 단축과 개발이슈에

한 이견을 최소화할 수 있다.

제 3 상

본 가이드라인은 공인인증기 , 문보안업체 등 공인인증서 가입자 소

트웨어를 구 하는 련 기 업체에서 이용할 수 있다. 자바 언어로

공인인증서 가입자 소 트웨어를 개발하고자 하는 경우 본 가이드라인에

서 제시하는 요구사항 구 시를 참조함으로써 효과 인 구 이 가능

하다.

제 4 용범 구성

본 가이드라인은 공인인증서 가입자 소 트웨어 구 을 해 필요한 공

Page 8: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 2 -

인 자서명인증체계 기술규격을 기반으로 하고 있으며, 자바 기술 용에

따른 추가 요구사항 고려사항들이 포함된다.

한, 본 가이드라인에서 다루는 공인인증서 가입자 소 트웨어는 공인

인증서비스 이용 시 사용자 PC에 설치되는 가입자 소 트웨어를 상으로

하고 있으며, 가입자 소 트웨어에 한 세부 구 기술은 구 하는 주체

에 따라 다양해질 수 있기 때문에 본 가이드라인에서는 세부 구 기술이

아닌 구 에 필요한 기술 요구사항 련 구 시 등에 해 설명

한다.

본 가이드라인의 제2장에서는 자바 기반의 공인인증서 가입자 소 트웨

어에 한 개념을 설명하고 있으며, 제3장에서는 기술 요구사항을 설명

하고, 제4장에서는 자바 기술을 이용한 구 방법 시 등을 설명한다.

한 부록으로 자바실행환경에 한 설명과 자바로 구 시 필요할 수 있

는 기타 구 시를 제시한다.

Page 9: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 3 -

제 2 장 자바 기반의 공인인증서 가입자

소 트웨어

인터넷 뱅킹, 온라인 증권거래, 온라인 쇼핑 등 다양한 자거래에서 사

용되는 공인인증서는 이제 우리 생활에서 필수 인 요소로 자리 잡고 있

다. 공인인증서를 통한 안 한 자거래 이용을 해서 사용자가 처음으로

하게 되는 응용 로그램이 공인인증서 가입자 소 트웨어(이하 “가입자

소 트웨어”) 이다. 가입자 소 트웨어는 공인인증서 이용․ 리 기능,

자서명 기능, 자서명키 발 ․ 리 기능 등을 제공할 수 있으며, 추가

으로 식별번호를 이용한 본인확인 기술 등 국내 고유인증기술을 제공할

수 있다.

이 장에서는 가입자 소 트웨어 구 을 한 자바 기술 개요, 자바 기반

의 가입자 소 트웨어 필요성 가입자 소 트웨어 기술 제사항 등에

해 기술한다.

제 1 자바 기술 개요

다양한 운 체제 웹 라우 에 이용 가능한 공인인증서 가입자 소

트웨어 구 을 해 우선 필요한 것이 랫폼에 독립 인 구 기술이다.

자바의 경우 하나의 컴 일 된 클래스 일을 자바가상머신이 실행되는

모든 랫폼에서 동일하게 실행할 수 있으며, 자바로 구 된 소 트웨어는

웹에서 쉽게 실행 가능하다는 장 이 있다. 공인인증서비스를 포함한 자

거래서비스의 경우에도 재 웹을 통해 서비스가 제공되고 있기 때문에

자바 기반의 공인인증서 가입자 소 트웨어를 개발할 경우 다양한 운 체

제 웹 라우 에서 재와 동일한 공인인증서비스 이용이 가능하다.

자바 기반의 가입자 소 트웨어 구 시 우선 으로 고려되어야 할 사

Page 10: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 4 -

그림 1 자바 랫폼 구조

항 에 하나가 공인인증서 이용․ 리, 자서명, 자서명키 생성․ 리

등의 기능을 제공하는 보안 모듈에 한 구 방안이다. 자바는 JCA라는

보안 모듈을 제공하고 있으며, 필요 시 제3자에 의해 보안 기능을 추가할

수 있도록 설계되어 있다. 한 JCE라는 확장기능을 제공하여 칭키/비

칭키 알고리즘, MAC 등을 지원하고 있으며, 국내 고유의 기술 알고

리즘 등은 별도의 API를 구 하여 용할 수 있다.

가입자 소 트웨어는 사용자가 공인인증서비스 이용 시 필요한 소 트

웨어로써 일반 으로 그래픽 사용자 인터페이스(GUI)를 통해 지원이 가능

하다. 자바에서는 AWT 는 Swing 컴포 트 등을 통해 사용자 인터페이

스를 구 할 수 있다.

제 2 자바 기반 가입자 소 트웨어의 필요성

재 공인인증서를 이용하는 자거래서비스의 경우 마이크로소 트(이

하 MS)사의 도우 운 체제의 인터넷 익스 로러에서만 동작 가능하도록

구 되어져 있어 리 스, 매킨토시 등의 운 체제를 이용하는 공인인증서

사용자는 공인인증서비스 이용이 제한되고 있다. 이러한 문제의 원인 에

하나가 재 사용 인 공인인증서 가입자 소 트웨어가 MS사의 웹 개발

기술인 ActiveX 컨트롤 기반으로 구 되어졌기 때문이다. ActiveX 컨트롤

Page 11: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 5 -

그림 2 공인인증서 가입자 소 트웨어

은 인터넷 익스 로러에서 공인인증서비스에 필요한 다양한 기능을 제공

할 수 있어 웹기반 응용서비스에서 많이 이용되어 왔다.

하지만, 최근 다양한 운 체제 웹 라우 에서 인터넷 뱅킹 등과 같

은 공인인증서비스 이용 요구가 증가되고 있기 때문에 해당 운 체제 이

용자에게 공인인증서비스 제공을 한 공인인증서 가입자 소 트웨어 개

발이 필요하다.

자바 언어는 ActiveX 컨트롤과 동일한 기능을 제공할 수 있으며 랫폼

독립 인 기술을 통해 다양한 운 체제 웹 라우 에 용 가능하다.

이에 따라, 웹이라는 환경에서 상호운용성이 보장되는 사용자 인터페이스

지원 국내 인증기술 용 등을 해 자바 기술에 기반을 둔 공인인증

서 가입자 소 트웨어 구 이 요구되어진다.

제 3 가입자 소 트웨어의 기술 제사항

재 인터넷 상에서 이용되고 있는 가입자 소 트웨어는 자서명키 생

Page 12: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 6 -

성․ 리, 공인인증서 이용․ 리, 자서명 등 다양한 기능이 제공되고

있으며 자바 기반의 가입자 소 트웨어 구 시에도 해당 기능들이 반드

시 구 되어져야 한다. 해당 기능에 한 세부 요구사항은 제 3장에서 상

세히 기술된다.

가입자 소 트웨어 구 을 한 제사항으로 우선 국내 기술규격

국제 표 등을 용하여 공인인증서 이용․ 리, 공인인증서 검증, 자

서명키 발 ․ 리 등 가입자 소 트웨어에서의 기본 이고 핵심 인 기

능이 구 되어져야 한다.

한, 가입자 소 트웨어는 이동식 장매체, 스마트카드, 보안토큰, 장

토큰, 이동식디스크, 하드디스크 등 다양한 장매체를 지원할 수 있어야

한다. 장매체 지원 기능은 련 기술규격을 용하여 구 되어져야 한

다.

마지막으로, 식별번호를 이용한 본인확인 기술 등 국내 고유의 인증 기

술을 지원 하여야 하며, 구 된 자바 클래스 일에 한 변조 에

처할 수 있는 기술 용이 필요할 수 있다.

Page 13: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 7 -

제 3 장 자바 기반의 공인인증서 가입자

소 트웨어 구 요구사항

자바 기반의 가입자 소 트웨어를 구 하기 해서는 본 장에서 기술되

는 구 요구사항을 충족할 수 있어야 한다. 해당 요구사항은 가입자 소

트웨어 구 에 필요한 자서명인증체계 기술규격 등에 기반을 두어 도출

되었으며, 추가 으로 자바 기술 고유의 구 요구사항들을 포함하고 있다.

제 1 보안토큰 장토큰 지원

자바 기반 가입자 소 트웨어는 USB 토큰, 스마트카드 등 공인인증서를

안 하게 장ㆍ 리하기 한 보안토큰을 지원하는 기능이 구 되어야

한다. 보안토큰 지원 기능은 PKCS#11 인터페이스에 기반하며 기술규격

[KCAC.TS.HSMU]에 명시된 내용을 수하여야 한다. 한 식별번호를 이

용한 본인확인 기술과 같은 국내 고유기술을 지원할 수 있는 기능이 지원

되어야 한다. 추가 으로 안 한 공인인증서 장․ 리를 해 보안토큰

이외에도 장토큰(IC카드)이 지원되어야 하며 련 기능은 [KCAC.TS.UI]

기술규격을 수하여 구 되어야 한다.

제 2 자바클래스 일 변조 방지

자바는 랫폼에 독립 인 실행 코드를 갖기 해 이진코드와 유사한

바이트코드라는 형식의 클래스 일로 컴 일 되며, 해당 클래스 일은

자바 가상 머신에 의해 바이트 단 로 해석되어 실행되는 인터 리터 언어

의 특징으로 인해 역공학 공격을 통한 원본 소스코드로의 변환이 가능하다.

한, 서명된 자바애 릿 기반 소 트웨어의 경우 자바 러그인에서 자

Page 14: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 8 -

그림 3 보안토큰 장토큰 지원

바애 릿 클래스 일에 해 코드서명을 검증한 후 사용자 PC에 장되

나, 장된 클래스 일 실행 시에는 별도의 코드서명 검증을 수행하지 않

기 때문에 악의 인 해커에 의해 해당 클래스 일의 변조 공격이 가능

할 수 있다.

이에 따라, 자바애 릿 기반의 공인인증서 가입자 소 트웨어의 경우 정

보통신부고시 제2003-53호「공인인증기 의시설 장비등에 한규정」에 근

거하여 해당 가입자 소 트웨어의 ․변조 삭제에 처하는 기능을

제공하여야 한다.

제 3 자서명키 리

자서명키는 자서명인증체계 기술규격에 정의된 자서명 알고리즘

을 사용하여 안 하게 생성되어야 하며, 보안토큰을 제외한 장매체에서

는 사용자의 자서명키를 [PKCS5] 형식으로 암호화하여야 한다. 이 때 지

원되는 버 은 기존 인증서 리 로그램과의 호환을 해 버 1.5

버 2.0을 모두 지원하여야 한다. 한, 암호화된 자서명키는 [PKCS8]

장형식을 용하여 안 하게 장되어야 한다. 자서명키의 생성

Page 15: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 9 -

장과 련한 기능은 [KCAC.TS.UI] 기술규격을 수하여 구 되어야 한다.

제 4 공인인증서 리

공인인증서 리 기능으로는 공인인증서 발 ․ 장, 공인인증서 조회․

표시, 최상 인증기 인증서 신뢰확인 등 다양한 공인인증서 리 기능

이 포함된다.

1. 공인인증서 요청형식

공인인증서 발 등을 한 인증서 요청형식은 공인인증서 요청정보,

자서명생성키 소유여부 검증정보, 추가 등록정보 등으로 구성되어야 하며,

인코딩 형식으로는 DER(Definite Encoding Rules), Base64를 지원하여야

한다. 공인인증서 요청형식 생성 처리를 한 세부 기능 구 은 공인인

증서 요청형식 로토콜 기술규격[KCAC.TS.CRMF]을 수하여야 한다.

2. 참조번호와 인가코드

가입자 소 트웨어는 공인인증서의 안 한 발 을 해 공인인증기 에

서 발 하는 참조번호 인가코드를 처리해야 한다. 참조번호는 공인인증

서 발 시 메시지 출처인증을 해 이용되는 값으로 인가코드를 식별하

기 해 사용되며, 인가코드는 메시지 출처인증을 해 이용되는 값으로

인증서 리 로토콜 메시지의 메시지 인증 코드를 생성하기 해 사용

된다. 해당 기능 구 시 공인인증서 발 을 한 참조번호/인가코드 기술

규격[KCAC.TS.RS]을 수하여야 한다.

3. 공인인증서 리 로토콜

가입자 소 트웨어는 공인인증서의 발 , 갱신, 폐지, 효력정지 효력

Page 16: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 10 -

회복 등 인증서 리 기능을 처리하여야 하며 이를 해 사용되는 로토

콜이 인증서 리 로토콜(CMP)이다. 공인인증서 리 로토콜에 한

메시지 형식 데이터 구조는 공인인증서 리 로토콜 기술규격

[KCAC.TS.CMP]을 수하여 구 하여야 한다.

4. 공인인증서 장 조회

사용자의 공인인증서 장을 한 장매체는 기술규격 [KCAC.TS.UI]에

정의되어 있는 바와 같이 이동식디스크, 장토큰, 보안토큰, 하드디스크

등이 있다. 공인인증기 으로부터 발 받은 사용자 공인인증서는 기술규격

에 정의된 장 치에 장되며 가입자 소 트웨어를 통해 장매체에

장된 공인인증서를 조회할 수 있어야한다.

사용자가 장매체를 선택할 경우 해당 장매체에 장된 모든 공인인

증서는 자동으로 검색되어야 하며 각 공인인증서에 한 상세 정보 검색

이 가능해야 한다. 한, 공인인증서 자서명키를 가져오거나 내보내

기할 경우에는 [PKCS12]에 정의된 기능을 수해야 한다.

5. 공인인증서 표시 인증업무 칙 조회

가입자 소 트웨어는 각 장매체에 장되어 있는 인증서에 해 공인

인증서 여부를 별할 수 있는 기능을 제공해야 하며, 공인인증서 표시 기

능을 구 할 경우에는 한 처리 방법에 한 고려가 필요하다.

한, 가입자 소 트웨어는 공인인증서 이용자에게 해당 인증서의 정책

정보를 획득할 수 있도록 공인증서내의 CPSuri 필드를 처리할 수 있어야

한다. 공인인증서 표시 공인인증기 인증업무 칙 조회 기능은 공인인

증서 표시를 한 기술규격[KCAC.TS.NSACA]을 수하여 구 하여야 한

다.

Page 17: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 11 -

그림 4 공인인증서 표시 그림 5 최상 인증기 신뢰성 확인

6. 최상 인증기 신뢰성 확인

최상 인증기 인증서에 해 유효성 확인을 해 가입자 소 트웨어

에서는 최상 인증기 신뢰성 확인 기능을 제공해야 한다. 만약 사용자가

최상 인증기 인증서를 신뢰하지 않는 경우 인증서 설치를 단하여야

한다. 최상 인증기 신뢰성 확인 기능은 사용자 인터페이스 기술규격

[KCAC.TS.UI]을 수하여 구 되어야 한다.

제 5 공인인증서 경로구축 검증

공인인증서를 이용한 자서명 검증을 해서는 유효한 공인인증서 경

로 구축 검증이 필요하며 가입자 소 트웨어에서는 경로구축 검증

을 처리할 수 있는 기능을 제공해야 한다.

1. 공인인증서 경로 구축

공인인증서 경로 구축을 해 공인인증서내의 발 자 근 정보 발

Page 18: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 12 -

그림 6 인증서 보기/검증 그림 7 인증서 경로

자 공개키 식별자 확장필드 등을 이용할 수 있다. 가입자 소 트웨어는

해당 발 자 정보를 이용하여 사용자 인증서부터 최상 인증기 인증서

까지의 인증경로를 구축하는 기능을 제공해야 하며, 이를 해 하 인증서

의 발 자 정보와 상 인증서의 소유자 정보간의 일치여부 검사해야 한다.

세부 기능은 공인인증서 경로검증 기술규격[KCAC.TS.CERTVAL]을 수하

여 구 되어야 한다.

2. 공인인증서 경로 검증

가입자 소 트웨어는 공인인증서 경로검증을 해 경로구축이 완료된

각 공인인증서의 기본필드 확장필드를 처리해야 하며 인증서 폐지목록

획득 이를 통한 공인인증서 유효성 검증 기능을 제공해야 한다. 공인인

증서 처리 기능 구 을 해 자서명 인증서 로 일 기술규격[KCAC.TS.

CERTPROF]을 수하여야 하며, 공인인증서 경로검증 기능 구 을 해

공인인증서 효력정지 폐지목록 기술규격[KCAC.TS.CRLPROF] 공인

인증서 경로검증 기술규격[KCAC.TS.CERTVAL]을 수하여야 한다.

Page 19: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 13 -

3. 실시간 인증서 상태확인

가입자 소 트웨어는 인증서의 실시간 상태 확인을 한 기능을 제공할

수 있으며, 이를 해 OCSP서버와 클라이언트간의 메시지 교환 등 련

세부 기능은 실시간 인증서 상태확인 기술규격[KCAC.TS.OCSP]을 수하

여 구 할 수 있다.

제 6 식별번호를 이용한 본인확인 기능

공인인증서를 이용한 본인확인 서비스 제공을 해 공인인증서 내에는

식별번호 정보가 포함되어 있다. 가입자 소 트웨어는 자거래서비스 이

용 시 본인확인을 해 식별번호가 사용되는 경우 이를 처리할 수 있어야

한다. 이를 해 안 한 난수 생성 이용, 식별번호 검증 등 본인확인을

한 기능을 제공해야 하며, 본인확인 련 세부 기능은 식별번호를 이용

한 본인확인 기술규격[KCAC.TS.SIVID]을 수하여 구 하여야 한다.

그림 8 인증서 본인확인 기능

Page 20: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 14 -

제 4 장 자바 기반의 공인인증서 가입자

소 트웨어 구 시

제 1 보안토큰 지원

자바 기반의 가입자 소 트웨어에서 보안토큰을 지원하기 해서는 보

안토큰 련 기술규격[KCAC.TS.HSMS] [KCAC.TS.HSMU]에 정의된 기

능을 지원해야 한다.

JRE 버 1.5이상에는 Sun PKCS#11 로바이더가 기본으로 포함되어

있어 자바 기반의 가입자 소 트웨어에서 보안토큰 지원을 해 해당

로바이더를 이용할 수 있다. 한, 상용의 보안토큰 로바이더를 구입하

거나 해당 로바이더를 직 구 하여 사용할 수도 있다.

1. Sun PKCS#11 로바이더

보안토큰 인터페이스 규격인 PKCS#11은 USB 토큰, 스마트카드 등과 같

은 하드웨어 보안모듈과 응용 로그램간의 인터페이스 기능을 정의한다.

JRE 1.5 버 부터는 자바 랫폼에서 네이티 PKCS#11 토큰 이용을 보장

하는 Sun PKCS#11 로바이더가 추가되었다. 이 로바이더는 자바 기반

으로 구 된 응용 로그램이 네이티 PKCS#11 토큰에 근할 수 있도

록 해 다.

Sun PKCS#11 로바이더는 메인클래스인 sun.security.pkcs11.SunPKCS11

에 의해 구 이 되며 도우, 리 스, 솔라리스, 매킨토시 등 다양한 운

체제에서 지원이 가능하다. 썬마이크로시스템즈(이하 Sun)에서 공식 으로

지원하는 운 체제는 도우, 리 스, 솔라리스 등이며 매킨토시 운 체제

Page 21: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 15 -

1. 프로바이더 설정 자바 PKCS#11 프로바이더(SunPKCS11)를 사용하기 위해서는 설정파일을 이용하여 등록하여 사용하거나 프로그램에서 동적으로 등록하여 사용 가능

의 경우 Apple 사에서 제공하는 JRE 1.5 버 을 통해 지원이 가능하다.

2. 보안토큰 구동 로그램 치정보 처리

보안토큰 구동 로그램에 한 치정보는 환경 일에 의해 리되며

해당 내용은 보안토큰 기반 공인인증서 이용기술 규격에 정의되어 있다.

환경 일은 구동 로그램의 치정보, 구동 로그램 명칭, 구동 로그램

검증정보 등 보안토큰 구동 로그램의 정보를 포함한다.

가입자 소 트웨어는 환경 일 치정보를 통해 검증정보 일의 치

를 확인하고 해당 검증정보의 해쉬값 자서명값 검증을 통해 구동

로그램의 무결성 구 합성을 확인할 수 있다. 한, 환경 일 치정

보는 PKCS#11 네이티 라이 러리 치를 확인하고 이를 PKCS#11 로

바이더에서 실행할 수 있도록 설정되어야 한다.

로바이더를 등록하는 방법은 로바이더 설정 일을 이용하여 등록하

는 방법과 동 으로 등록하는 방법 등이 있다. 본 가이드라인에서는 다양

한 보안토큰 지원을 유연하게 처리할 수 있도록 환경 일로부터 PKCS#11

네이티 라이 러리 치를 획득하여 동 으로 로바이더를 등록하는

방법을 사용할 것을 권장한다.

3. Sun PKCS#11 Provider 사용 방법

Page 22: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 16 -

String pkcs11Config = "name = SmartCard" + "library = C:\Windows\system32\pkcs11.dll";byte[] pkcs11configByte = pkcs11Config.getByte();ByteArrayInputStream configStream = new ByteArrayInputStream(pkcs11Config.getByte);Provider pkcs11Provider = new sun.security.pkcs11.SunPKCS11(configStream);Security.addProvider(pkcs11Provider);

2. 보안토큰 로그인 보안토큰을 사용하기 위해서는 자바의 키저장 객체(KeyStore)를 프로바이더와 보안토큰 비밀번호(PIN)를 이용하여 로딩 함으로서 보안토큰에 로그인 가능

char[] pin = ...;KeyStore ks = KeyStore.getInstance("PKCS11");ks.load(null, pin);

3. 키쌍 생성 키쌍을 생성하기 위해서는 KeyPairGenerator 클래스를 프로바이더와 알고리즘을 이용하여 객체를 생성한 후 genKeyPair 메소드를 호출하여 키쌍을 생성

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", pkcs11Provider);KeyPair kp = kpg.genKeyPair();

4. 전자서명생성키 불러오기 보안토큰에 저장되어 있는 전자서명생성키를 얻기 위해서는 키저장 객체의 getKey() 메소드를 이용한다. 키저장 객체(Key store)에는 실제 전자서명생성키가 저장되는 것이 아니라 해당 키에 대한 참조 값이 저장

PrivateKey mykey = (PrivateKey)keystore.getKey(키저장 객체 명칭, 비밀번호);

5. 인증서 저장 및 가져오기 getCertificate 및 setCertificate 메소드를 호출하여 인증서 또는 인증서 체인을 저장하거나 가져오기 가능

인증서 불러오기Certificate myCert = keystore.getCertificate(키저장 객체 명칭);

인증서 저장keystore.setCertificateEntry(키저장 객체 명칭, 인증서 객체);

6. 전자서명 생성

Page 23: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 17 -

Signature 클래스에 프로바이더와 알고리즘을 지정하여 인스턴스 객체를 생성한 후 sign() 메소드를 이용하여 문자열에 대한 전자서명을 생성

Signature sig = Signature.getInstance("MD5withRSA",pkcs11Provider);sig.initSign(전자서명생성키 객체);sig.update(전자서명 하고자 하는 문자열);byte[] sigBytes = sig.sign();

표 1 Sun PKCS#11 Provider 사용 시

static sun.security.pkcs11.wrapper.PKCS11 _pkcs11 = null;static void getRandom()

throws PKCS11Exception, ParsingException, IOException { CK_ATTRIBUTE[] attr = {new CK_ATTRIBUTE(PKCS11Constants.CKA_CLASS, PKCS11Constants.CKO_DATA)}; _pkcs11.C_FindObjectsInit(_session, attr); CK_ATTRIBUTE[] valueAttr = {

new CK_ATTRIBUTE(PKCS11Constants.CKA_LABEL),new CK_ATTRIBUTE(PKCS11Constants.CKA_VALUE)};

o sun.security.pkcs11.wrapper.PKCS11 클래스 사용하여 난수(R)값 추출

4 Sun PKCS#11 Provider 내부 클래스를 이용한 R값 추출

이 장에서 살펴본 바와 같이 Sun PKCS#11 Provider를 통해 보안토큰

로그인, 자서명키 생성, 자서명생성키 불러오기, 인증서 장 불

러오기, 자서명 생성 등의 기능은 구 할 수 있지만, 식별번호를 이용한

본인확인 기술에서 요구되는 난수(R)값 등과 같이 데이터 개체에 한 처

리 방법은 설명되어 있지 않다.

이에 따라, 난수(R)값 추출 등을 한 데이터 개체 처리 기능을 구 하

기 해서는 PKCS#11 Provider 내의 sun.security.pkcs11.wrapper.PKCS11

클래스를 직 이용하여 구 하여야 한다.

Page 24: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 18 -

long[] handles = _pkcs11.C_FindObjects(_session, MAX_HANDLE_ARRAY); for (int i=0; i<handles.length; i++) { System.out.println("\t[" + i + "] 랜덤값"); _pkcs11.C_GetAttributeValue(_session, handles[i], valueAttr); System.out.println("\t\tLabel : " + new String((char[])valueAttr[0].pValue)); System.out.println("\t\tValue : " + new String(Hex.encode((byte[])valueAttr[1].pValue))); } _pkcs11.C_FindObjectsFinal(_session);}

표 2 Sun PKCS#11 Provider 내부 클래스를 이용한 R값 추출

제 2 장토큰(IC카드) 지원

자바 기반 가입자 소 트웨어에서 장토큰(IC카드)을 지원하기 해서

는 JRE 1.5 버 과 함께 장토큰 지원을 한 상용 라이 러리 는 직

구 한 라이 러리가 필요하다. 한, 썬마이크로시스템즈에서 제공하는

JRE 1.6 이상 버 을 사용할 경우 기본 으로 장토큰 지원이 가능하다.

본 장에서는 장토큰 지원을 한 라이 러리 구 시 참조할 수 있도록

JRE 1.6 버 에서의 용 방법에 해 설명한다.

가입자 소 트웨어에서 장토큰 지원을 해 JRE 1.6 버 의

javax.smartcardio.* 패키지를 이용할 수 있다. 해당 패키지에서는 IC카드

채 연결, 채 연결 해제, APDU 메시지 송수신 등 기본 인 IC카드

API를 지원한다.

다음은 JRE 1.6의 javax.smartcardio.* 패키지를 이용하여 장토큰에

근하여 인증서를 획득하고 자서명을 수행하는 시이다. 해당 시에

한 체 소스는 “부록 1 장토큰(IC카드) 지원을 한 구 시“ 를 참

Page 25: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 19 -

TerminalFactory factory = TerminalFactory.getDefault();List terminals = factory.terminals().list();CardTerminal terminal = terminals.get(0);Card card = terminal.connect("T=0");CardChannel channel = card.getBasicChannel();

public void verifyPIN(byte[] passwd) throws Exception{... // APDU 메시지 전송 및 결과 리턴 ResponseAPDU r = channel.transmit(new CommandAPDU(bySend)); byReceive = r.getBytes(); // APDU 메시지 전송 및 결과 리턴 값이 48 인 경우 핀번호 검증 결과 확인 // 결과 메시지 1,2 바이트가 각각 90 00 인 경우 핀번호 정상 메시지 처리 String ret1 = HexDump.getHexString(byReceive[0]); String ret2 = HexDump.getHexString(byReceive[1]); // 6D 00 인 경우, SELECT File 을 먼저 수행한 후 verify pin 할 수 있도록 // 메모리에 저장토큰 비밀번호 번호 저장 if(( ret1.equals("90") && ret2.equals("00") ) || ( ret1.equals("6D") ) ){ // 저장토큰 비밀번호 번호 검증 정상 this.PINNum = passwd ; }else{ // 저장토큰 비밀번호 번호 검증 오류... } return;}

1. 저장토큰 연결 저장토큰를 사용하기 위해서는 javax.smartcardio.Card를 사용하여 저장토큰을 연결

2. 저장토큰 연결 해제 저장토큰을 사용하고 난 후, javax.smartcardio.Card를 사용하여 저장토큰 연결 해제

card.disconnect(true); 3. 저장토큰 비밀번호(PIN) 검증 저장토큰에 대한 올바른 저장토큰 비밀번호가 맞는지 APDU 메시지 전송 및 결과를 가지고 검증한다.

조한다.

Page 26: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 20 -

4. 전자서명생성키 불러오기 저장토큰(IC카드)에 저장되어 있는 전자서명생성키를 얻기 위해서는 APDU 메시지를 사용하여 byte array 형식의 데이터로 읽어오며, PKCS8EncodedKeySpec형식으로 구성하기 위해서는 javax.security.spec.PKCS8EncodedKeySpec 패키지를 사용한다. 세부 소스코드는 부록2 참조.5. 인증서 불러오기 저장토큰(IC카드)에 저장되어 있는 인증서를 얻기 위해서는 APDU 메시지를 사용하여 byte array 형식의 데이터로 읽어오며, X509Certificate형식으로 구성하기 위해서는 javax.security.cert.X509Certificate 패키지를 사용한다. 세부 소스코드는 부록2 참조.6. 전자서명 생성 Signature 클래스에 알고리즘을 지정하여 인스턴스 객체를 생성한 후 sign() 메소드를 이용하여 문자열에 대한 전자서명을 수행

Signature sig = Signature.getInstance("MD5withRSA");sig.initSign(전자서명생성키 객체);sig.update(전자서명 하고자 하는 문자열);byte[] sigBytes = sig.sign();

표 3 장토큰 이용 시

제 3 자바클래스 일 변조 방지

자바클래스 일에 한 변조 방지를 해 난독처리(Obfuscation) 기

술을 용할 수 있다. 난독처리는 자바 클래스 일의 역공학 공격을 통해

바이트코드로부터 소스코드를 얻어내는 을 이기 해 사용하는 기

술 에 하나로써, 난독처리기(Obfuscator) 용을 통해 자바 클래스 일에

한 역공학 을 일 수 있다. 난독처리기는 자바 소스코드의 클래스

명, 변수명 등을 알 수 없는 문자열로 변환하여 바이트코드에 한 해독을

어렵게 할 수 있으며, 난독처리의 강도를 높이기 해 "자바 문자열 인코

딩", " 로그램 흐름제어 변경" 등의 기능이 포함된 난독처리기를 사용하는

것이 필요하다.

아래 내용은 난독처리에 한 제이다.

Page 27: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 21 -

public static void main(String argv[]) { if (argv == null) { System.out.println("입력이 잘 못 되었습니다."); return; } for (int i = 0; i < argv.length; i++) { if (argv[i] != null) System.out.println(argv[i]); }}

표 4 자바클래스 난독처리 시 - 난독처리

public static void main(String[] r0) { Object $n0; int i0; String $r4; $n0 = null; try { r0.equals($n0); } catch (NullPointerException $r2) { System.out.println("입력이 잘 못 되었습니다."); return; } for (i0 = 0; i0 < r0.length; i0++) { $r4 = r0[i0]; label_0: { try { $r4.toString(); } catch (NullPointerException $r8) { break label_0; } System.out.println(r0[i0]); } //end label_0: }}

표 5 자바클래스 난독처리 시 - 난독처리 후

사용자의 입력을 받아 화면에 출력하는 제 소스코드를 난독처리한 후

이를 역공학으로 변환한 경우 아래와 같이 변환되어 있는 것을 확인할 수

있다. 난독처리를 함으로써 기존의 변수명이 변경되고 새로운 변수와 제어

구문이 추가된 것을 확인할 수 있다.

Page 28: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 22 -

- 전자서명생성키 위치 : [인증서 저장위치]/[공인인증기관별 식별자]/[사용자 식별명칭]/*.key

자바클래스에 한 변조 방지를 해 난독처리기 이외에 다양한 방법

이 용 될 수 있으며, 자바클래스 구 시 소스코드의 안 성을 보장할

수 있는 코딩 방법의 용이 필요하다.

제 4 자서명키 공인인증서 리

본 장에서는 자서명키 생성․ 장, 공인인증서 발 ․ 장, 공인인증

서 조회 정보 검색, 공인인증서 표시 등 공인인증서 가입자 소 트웨어

에서 제공되어야 하는 자서명키 공인인증서 리 기능에 한 구

방법에 해 설명한다.

1. 자서명키 리

자서명키는 자서명인증체계 기술규격에 정의된 자서명 알고리즘

을 사용하여 안 하게 생성되어야 한다. 한, 생성된 자서명키는 보안

토큰을 제외한 다른 장매체에서 아래 정의된 치에 장되며 장

일명은 *.key이다.

인증서 발 시 PKCS#5 v1.5 v2.0을 지원하여야 하며 PKCS#8로

장하도록 구 하여야 한다. 한, 생성된 자서명키를 안 하게 장하기

해 SEED 는 3DES 등과 같은 암호 알고리즘을 지원하여야 한다.

2. 공인인증서 장 조회

인증서 장 치는 장매체별로 기술규격 [KCAC.TS.UI]에 정의되어 있

다. 가입자 소 트웨어에서는 아래 명시된 인증서 장 치로부터 최상

Page 29: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 23 -

- 최상위인증기관 인증서 위치 : [인증서 저장위치]/KISA/*.der- 공인인증기관 인증서 위치 : [인증서 저장위치]/[공인인증기관별 식별자]/*.der- 사용자 인증서 위치 : [인증서 저장위치]/[공인인증기관별 식별자]/[사용자 식별명칭]/*.der

OS 환경 이동식 디스크 경로MS 윈도우 환경 드라이브명:\NPKI\인증기관 식별자

리눅스/유닉스 환경 (이동식디스크를 마운트한 디렉토리)/NPKI/인증기관 식별자매킨토시 환경 /Volumes/디스크명/NPKI/인증기관 식별자

표 6 OS별 이동식 디스크 경로

1. 운영체제 정보를 구한다.

인증기 , 공인인증기 가입자 인증서를 장․조회할 수 있어야 한다.

한, 공인인증서에 한 가져오기 내보내기 기능을 구 하기 해

[PKCS12] 표 을 용해야 하며, 보안토큰의 경우에는 외부로부터 가져오

기 기능은 제공해야 하지만 보안토큰에서 외부 장매체로 내보내기 기능

은 제공하지 않아야 한다.

자바 기반 가입자 소 트웨어의 다양한 운 체제를 지원할 수 있기 때

문에 각 운 체제에 따라 이동식 디스크 경로 역시 바 어야 한다.

리 스 유닉스 환경에서 이동식 디스크를 마운트한 디 토리의 경우,

해당 운 체제에 따라 마운트한 디 토리가 서로 다르다. 주로 /mnt,

/media를 사용하나, 이것 이외의 다른 디 토리를 사용할 수도 있다.

매킨토시 환경의 경우 /Volumes 디 토리에 디스크명 이외의 다른 응

용 소 트웨어명들이 존재할 수 있다. 를 들면 아래와 같이, /Volumes/

디스크명에 NPKI 디 토리 존재여부를 확인하여 이동식 디스크 경로를

구축하는 것도 한 가지 방법이다.

Page 30: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 24 -

import java.security.cert.*...public class GenerateCert { public static void main() { InputStream inStream = new FileInputStream("...인증서 파일명..."); CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream); inStream.close(); }}

표 8 CertificateFactory 클래스 이용

2. 운영체제가 윈도우 계열인 경우 2.1. 운영체제가 설치된 시스템디스크 드라이브를 System.getProperties()중 user.home으로 얻어진 드

라이브로 결정 ※ 예) user.home = C:\Documents and Settings\사용자계정 2.2. 드라이브 목록을 구한다. 예) (C: D: E: F) 2.3. 2.1.에서 획득한 드라이브를 제외한 나머지(D: E: F:)를 이동식디스크 리스트로 표시 3. 운영체제가 윈도우 계열 이외인 경우 - 각 마운트된 드라이브 중 NPKI 디렉토리가 존재하는 드라이브만 경로를 설정한다. 예) /Volumes/NPKI, /mnt/NPKI, /media/NPKI

표 7 운 체제별 이동식디스크 경로 획득 방법

3. 공인인증서 인증서 폐지목록 처리

자바는 인증서 CRL을 처리할 수 있는 클래스를 java.security.cert 패

키지에서 제공한다. 한 기본 으로 제공되는 로바이더를 이용하여 인

증서 CRL 일을 객체로 생성할 수 있다. 이를 이용하여 인증서

CRL을 제어할 수 있지만, 인증서 확장 필드 등의 정보를 직 제어하기

해서는 별도의 클래스를 개발하여 로바이더로 등록하고 이를 이용하

여 처리하는 방법도 가능하다.

다음은 java.security.cert.* 패키지의 CertificateFactory 클래스를 이용하여

일로부터 인증서를 읽어오는 제이다.

Page 31: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 25 -

import javax.swing.text.html.*;import javax.swing.text.*;import javax.swing.*;...public class SimpleBrowser {... public static void main() {

import java.security.cert.*...public class GenerateCert { public static void main() { InputStream inStream = new FileInputStream("...인증서 파일명..."); CertificateFactory cf = CertificateFactory.getInstance("X.509", "...프로바이더명..."); X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream); inStream.close(); }}

표 9 CertificateFactory 클래스 이용 - 별도 로바이더 이용

다음은 CertificateFactory 클래스에 별도의 로바이더를 지정하여 인증

서를 읽어오는 제이다.

4. 공인인증기 인증업무 칙(CPS) 조회

공인인증기 인증업무 칙(CPS)는 자바 기반 가입자 소 트웨어가 실

행되는 다양한 운 체제에서 웹 라우 를 통해 조회될 수 있어야 한다.

가입자 소 트웨어에서 CPS를 조회하기 해서는 실행 는 설치된 웹

라우 를 악하고 해당 웹 라우 에 CPS의 웹페이지를 연결하거나, 자

바를 이용하여 간단한 웹 라우 를 구 하여 CPS의 웹페이지를 연결할

수 있다. 자바 Swing 패키지의 javax.swing.text.html 패키지와 JEditorPane

등을 이용한 웹 라우 구 제는 다음과 같다.

Page 32: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 26 -

... JEditorPane jep = new JEditorPane();... // 해당 CPS 웹페이지 주소 연결 jep.setPage(“http://www.rootca.or.kr/kisa/kcac/jsp/kcac_8010.jsp”); ... }}

표 10 JEditorPane을 이용한 웹 라우 구 시

한, 자바애 릿과 자바스크립트 통신을 이용하여 가입자 소 트웨어

애 릿에서 확인된 CPS의 웹페이지 주소를 자바스크립트로 보내 새창을

띄우게 하는 방법도 사용될 수 있다. 해당 방법은 운 체제 웹 라우

확인이나 새로운 웹 라우 구 이 불필요하며, 가입자 소 트웨어가 로

딩된 페이지 내에 애 릿과 통신하여 CPS 페이지를 새 웹 라우 창으로

띄울 수 있는 자바스크립트만을 구 하면 된다.

CPS 웹페이지를 확인할 수 있는 방법은 가입자 소 트웨어에서 구 되

어야 하며, 에 소개한 방법 이외에도 다양한 방법이 존재할 수 있으므로

개발환경과 사용자 편의성 등을 고려하여 개발자가 선택하여 구 할 수

있다.

5. 최상 인증기 신뢰성 확인

가입자 소 트웨어 설치 시 사용자에게 최상 인증기 인증서 신뢰여

부를 확인하여야 한다. 최상 인증기 인증서를 신뢰하는 경우에만 설치

를 진행하고, 신뢰하지 않는 경우는 설치를 단하여야 한다. 하지만, 자바

애 릿의 경우 애 릿이 삽입된 페이지에 사용자가 근하게 되면 애 릿

의 설치여부 확인 없이 바로 사용자 PC에 캐쉬되어 실행된다. 따라서 애

릿 설치 에 최상 인증기 인증서에 한 신뢰성을 확인하기 해서

는 다음과 같은 방법이 사용될 수 있다.

Page 33: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 27 -

최상 인증기 인증서 확인 후 가입자 소 트웨어 애 릿 페이지

로 이동

가입자 소 트웨어 설치를 한 별도의 애 릿에서 최상 인증기

인증서 신뢰성 확인 기능 수행

첫 번째 방법은 최상 인증기 인증서의 신뢰성 여부를 확인할 수 있

는 웹페이지를 두고 신뢰 시 가입자 소 트웨어 설치 는 이용 페이지로

이동하는 방식이다. 응용사이트의 웹페이지 구성에 따라 용이 어려울 수

있으나, 가입자 소 트웨어에 한 수정은 최소화 될 수 있다.

두 번째 방법은 별도의 애 릿이 최상 인증기 인증서의 신뢰성을 확

인시키고, 신뢰하는 경우에 한해 가입자 소 트웨어를 다운로드하여 실행

하는 방법이다. 본 방법은 응용사이트에 용하는 것은 쉬울 수 있지만 별

도의 애 릿 제작이 필요하며 가입자 소 트웨어의 실행방법 한 변경될

수 있다.

이외에도 가입자 소 트웨어 설치 에 최상 인증기 인증서 신뢰성

을 확인할 수 있는 다양한 방법이 존재할 수 있으며 응용사이트의 구

형태 모델에 따라 그에 맞는 구 방법을 선택하여 구 할 필요가 있다.

한 가입자 소 트웨어 설치 후 가입자 소 트웨어에서 최상 인증기

인증서에 한 신뢰성 확인 기능을 제공해야 한다.

Page 34: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 28 -

public void verifyPIN(byte[] passwd) throws Exception{ // 고정헤더 (5) + 가변헤더 byte[] 생성 byte[] bySend = new byte[5+passwd.length]; bySend[0] = 0x00; // CLA bySend[1] = 0x20; // INS bySend[2] = 0x00; // P1 bySend[3] = 0x01; // P2 bySend[4] = 0x08; // Lc System.arraycopy(passwd,0,bySend,5,passwd.length); // 전송 메시지 길이 int iSendLen = bySend.length; // 결과 메시지 및 길이 byte[] byReceive = new byte[52];

1. 저장토큰 연결 저장토큰를 사용하기 위해서는 javax.smartcardio.Card를 사용하여 저장토큰을 연결

// show the list of available terminalsTerminalFactory factory = TerminalFactory.getDefault();List terminals = factory.terminals().list();System.out.println("Terminals: " + terminals);// get the first terminalCardTerminal terminal = terminals.get(0);// establish a connection with the cardCard card = terminal.connect("T=0");System.out.println("card: " + card);CardChannel channel = card.getBasicChannel();

2. 저장토큰 연결 해제 저장토큰을 사용하고 난 후, javax.smartcardio.Card를 사용하여 저장토큰 연결 해제

card.disconnect(true); 3. 저장토큰 비밀번호 검증 저장토큰에 대한 올바른 저장토큰 비밀번호가 맞는지 APDU 메시지 전송 및 결과를 가지고 검증한다.

부록 1. 장토큰(IC카드) 지원을 한 구 시

Page 35: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 29 -

byte[] byReceiveLen = new byte[52]; // APDU 메시지 전송 및 결과 리턴 ResponseAPDU r = channel.transmit(new CommandAPDU(bySend)); byReceive = r.getBytes(); // APDU 메시지 전송 및 결과 리턴 값이 48 인 경우 핀번호 검증 결과 확인 // 결과 메시지 1,2 바이트가 각각 90 00 인 경우 핀번호 정상 메시지 처리 String ret1 = HexDump.getHexString(byReceive[0]); String ret2 = HexDump.getHexString(byReceive[1]); // 6D 00 인 경우, SELECT File을 먼저 수행한 후 저장토큰 비밀번호 // 검증할 수 있도록 메모리에 저장토큰 비밀번호 저장 if(( ret1.equals("90") && ret2.equals("00") ) || ( ret1.equals("6D") ) ){ // 저장토큰 비밀번호 검증 정상 this.PINNum = passwd ; }else{ // 저장토큰 비밀번호 번호 검증 오류 if(ret1.equals("69") && ret2.equals("83")){ throw new Exception("PIN is locked."); }else{ throw new Exception("PIN is not matched."); } } return;}

boolean isFIDFail = false;int iccCode=0;while(true){ if(!isFIDFail){ byte[] bySend = new byte[5+ROOTFID.length]; bySend[0] = 0x00; bySend[1] = (byte)0xA4; bySend[2] = isFIDFail ? (byte)0x04 : 0x00; bySend[3] = 0x00; bySend[4] = (byte)ROOTFID.length; System.arraycopy(ROOTFID,0,bySend,5,ROOTFID.length);

4. 전자서명생성키 불러오기 저장토큰(IC카드)에 저장되어 있는 전자서명생성키를 얻기 위해서는 APDU 메시지를 사용하여 byte array 형식의 데이터로 읽어오며, PKCS8EncodedKeySpec형식으로 구성하기 위해서는 javax.security.spec.PKCS8EncodedKeySpec 패키지를 사용한다.

Page 36: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 30 -

byte[] byReceive = sendAPDU(bySend); String ret1 = Util.getHexString(byReceive[0]); String ret2 = Util.getHexString(byReceive[1]); if(ret1.equals("6F")){ ret1 = Util.getHexString(byReceive[2+byReceive[1]]); ret2 = Util.getHexString(byReceive[2+byReceive[1]+1]); } if( (ret1.equals("61") && ret2.equalsIgnoreCase("1a")) || (ret1.equals("90") && ret2.equalsIgnoreCase("00")) ){ verifyPIN(this.PINNum); }else{ isFIDFail = true;

continue; } } byte[] aid = AIDSet[isFIDFail ? iccCode + 2 : iccCode ]; byte[] bySend = new byte[5+aid.length]; bySend[0] = 0x00; bySend[1] = (byte)0xA4; bySend[2] = isFIDFail ? (byte)0x04 : 0x00; bySend[3] = 0x00; bySend[4] = (byte)aid.length; System.arraycopy(aid,0,bySend,5,aid.length); byte[] byReceive = new byte[52]; byReceive = sendAPDU(bySend); String ret1 = Util.getHexString(byReceive[0]); String ret2 = Util.getHexString(byReceive[1]); if(ret1.equals("6F")){ ret1 = Util.getHexString(byReceive[2+byReceive[1]]); ret2 = Util.getHexString(byReceive[2+byReceive[1]+1]); } if( (ret1.equals("61") && ret2.equalsIgnoreCase("1a")) || (ret1.equals("90") && ret2.equalsIgnoreCase("00")) ){ verifyPIN(this.PINNum); break; }else{

Page 37: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 31 -

if(isFIDFail){ throw new Exception("select file failed."); }else{ isFIDFail = true; continue; } }}byte[] pbBuffer = null;byte SFI=3; //전자서명생성키 파일 SFIint fileSize=728;//전자서명생성키 파일 (52*14)byte[] bySend = new byte[5];bySend[0] = 0x00;bySend[1] = (byte)0xB2;bySend[2] = 0x00;bySend[3] = 0x00;bySend[4] = 0x00;bySend[3] = (byte)(SFI << 3);bySend[3] += 0x04;int nRound = fileSize / MAX_RECORD_LEN;int nRest = fileSize % MAX_RECORD_LEN;if (nRest > 0) nRound++;byte[] bStatus = new byte[52+2];int nStatusLen = bStatus.length;byte[] pData = null;int nDataLen = 0;int nDataSize = 0;for (int i = 0 ; i < nRound; i++){ bySend[2] = (byte)(i+1); if (i < nRound-1 || (i == nRound-1 && nRest == 0)) bySend[4] = (byte)MAX_RECORD_LEN; else bySend[4] = (byte)nRest; bStatus = sendAPDU(bySend); pData = bStatus; int nLen = nStatusLen-2; if (i == 0){

Page 38: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 32 -

if (pData[0] == 0x70){ nDataSize = pData[2]<0?pData[2]+256:pData[2];

nDataSize <<= 8; nDataSize += pData[3]<0?pData[3]+256:pData[3]; nLen = pData[1]<0?pData[1]+256:pData[1];

pbBuffer = new byte[nDataSize];

nLen -=2; if(nRound==1){

nLen = pbBuffer.length; }

System.arraycopy(pData,4,pbBuffer,nDataLen,nLen); } } else{ if (pData[0] == 0x70){ nLen = pData[1]<0?pData[1]+256:pData[1]; if (nDataLen + nLen >= nDataSize ){ nLen = nDataSize - nDataLen; } System.arraycopy(pData,2,pbBuffer,nDataLen,nLen); } } nDataLen += nLen; if (nDataLen >= nDataSize) break;}PKCS8EncodedKeySpec key = new PKCS8EncodedKeySpec(pbBuffer);

boolean isFIDFail = false;int iccCode=0;while(true){ if(!isFIDFail){ byte[] bySend = new byte[5+ROOTFID.length]; bySend[0] = 0x00; bySend[1] = (byte)0xA4; bySend[2] = isFIDFail ? (byte)0x04 : 0x00; bySend[3] = 0x00;

5. 인증서 불러오기 저장토큰(IC카드)에 저장되어 있는 인증서를 얻기 위해서는 APDU 메시지를 사용하여 byte array 형식의 데이터로 읽어오며, X509Certificate형식으로 구성하기 위해서는 javax.security.cert.X509Certificate 패키지를 사용한다.

Page 39: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 33 -

bySend[4] = (byte)ROOTFID.length; System.arraycopy(ROOTFID,0,bySend,5,ROOTFID.length); byte[] byReceive = sendAPDU(bySend); String ret1 = Util.getHexString(byReceive[0]); String ret2 = Util.getHexString(byReceive[1]); if(ret1.equals("6F")){ ret1 = Util.getHexString(byReceive[2+byReceive[1]]); ret2 = Util.getHexString(byReceive[2+byReceive[1]+1]); } if( (ret1.equals("61") && ret2.equalsIgnoreCase("1a")) || (ret1.equals("90") && ret2.equalsIgnoreCase("00")) ){ verifyPIN(this.PINNum); }else{ isFIDFail = true;

continue; } } byte[] aid = AIDSet[isFIDFail ? iccCode + 2 : iccCode ]; byte[] bySend = new byte[5+aid.length]; bySend[0] = 0x00; bySend[1] = (byte)0xA4; bySend[2] = isFIDFail ? (byte)0x04 : 0x00; bySend[3] = 0x00; bySend[4] = (byte)aid.length; System.arraycopy(aid,0,bySend,5,aid.length); byte[] byReceive = new byte[52]; byReceive = sendAPDU(bySend); String ret1 = Util.getHexString(byReceive[0]); String ret2 = Util.getHexString(byReceive[1]); if(ret1.equals("6F")){ ret1 = Util.getHexString(byReceive[2+byReceive[1]]); ret2 = Util.getHexString(byReceive[2+byReceive[1]+1]); } if( (ret1.equals("61") && ret2.equalsIgnoreCase("1a")) || (ret1.equals("90") && ret2.equalsIgnoreCase("00")) ){ verifyPIN(this.PINNum);

Page 40: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 34 -

break; }else{ if(isFIDFail){ throw new Exception("select file failed."); }else{ isFIDFail = true; continue; } }}byte[] pbBuffer = null;byte SFI=4; //인증서 파일 SFIint fileSize=1456; //인증서 파일 (52*28)byte[] bySend = new byte[5];bySend[0] = 0x00;bySend[1] = (byte)0xB2;bySend[2] = 0x00;bySend[3] = 0x00;bySend[4] = 0x00;bySend[3] = (byte)(SFI << 3);bySend[3] += 0x04;int nRound = fileSize / MAX_RECORD_LEN;int nRest = fileSize % MAX_RECORD_LEN;if (nRest > 0) nRound++;byte[] bStatus = new byte[52+2];int nStatusLen = bStatus.length;byte[] pData = null;int nDataLen = 0;int nDataSize = 0;for (int i = 0 ; i < nRound; i++){ bySend[2] = (byte)(i+1); if (i < nRound-1 || (i == nRound-1 && nRest == 0)) bySend[4] = (byte)MAX_RECORD_LEN; else bySend[4] = (byte)nRest; bStatus = sendAPDU(bySend); pData = bStatus; int nLen = nStatusLen-2;

Page 41: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 35 -

if (i == 0){ if (pData[0] == 0x70){ nDataSize = pData[2]<0?pData[2]+256:pData[2];

nDataSize <<= 8; nDataSize += pData[3]<0?pData[3]+256:pData[3]; nLen = pData[1]<0?pData[1]+256:pData[1]; pbBuffer = new byte[nDataSize]; nLen -=2; if(nRound==1){ nLen = pbBuffer.length; }

System.arraycopy(pData,4,pbBuffer,nDataLen,nLen); } } else{ if (pData[0] == 0x70){ nLen = pData[1]<0?pData[1]+256:pData[1]; if (nDataLen + nLen >= nDataSize ){ nLen = nDataSize - nDataLen; } System.arraycopy(pData,2,pbBuffer,nDataLen,nLen); } } nDataLen += nLen; if (nDataLen >= nDataSize) break;}X509Certificate cert = X509Certificate.getInstance(pbBuffer);

6. 전자서명 생성 Signature 클래스에 알고리즘을 지정하여 인스턴스 객체를 생성한 후 sign() 메소드를 이용하여 문자열에 대한 전자서명을 수행

Signature sig = Signature.getInstance("MD5withRSA");sig.initSign(전자서명생성키 객체);sig.update(전자서명 하고자 하는 문자열);byte[] sigBytes = sig.sign();

표 11 장토큰 구 시

Page 42: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 36 -

부록 2. 자바 기반 가입자 소 트웨어 실행환경

가. 자바실행환경

자바로 구 되는 가입자 소 트웨어는 다양한 운 체제 웹 라우

환경을 지원하여야 하기 때문에 자바 기반 가입자 소 트웨어의 자바클래

스 일을 실행할 수 있는 자바실행환경(JRE)이 필요하다.

자바로 작성된 응용 로그램은 랫폼 독립 인 바이트코드 형태로 배

포되지만, 이것을 실행하려면 그 랫폼을 해석할 수 있는 형식인 네이티

코드로 변환해야 한다. 즉, JRE는 이러한 변환과 실행을 행하는 자바

가상 머신과 그 주변의 소 트웨어로 구성된다.

자바 가상 머신(JVM)은 자바로 작성된 로그램을 해석하여 실행하는

가상의 컴퓨터를 말한다. 자바로 작성된 로그램은 자바 컴 일러에 의해

바이트코드라는 간코드 형태로 변형된다. 바로 이 바이트코드를 해석해

서 실행하는 소 트웨어를 자바 가상 머신이라 한다. 자바 가상 머신이 설

치된 컴퓨터에서는 컴퓨터 아키텍처나 운 체제 등에 계없이 같은 바이

트코드를 변경하지 않고 실행할 수 있다. 자바 가상 머신은 단독의 응용

로그램으로 존재할 수도 있고, 웹 라우 내에 탑재되어 존재할 수도 있

다. 한 한 랫폼 내에서 여러 개의 자바 가상 머신이 동시에 존재할 수

도 있다.

기본 으로 JRE는 Sun 홈페이지(http://java.sun.com)에서 다운로드 받을

수 있다. 제3기 에서 제공되는 자바실행환경의 경우에는 해당 개발사 홈

페이지 는 별도 배포 홈페이지를 이용하여야 한다. JRE는 사용자가 직

다운로드 받아 설치하는 것이지만, 사용자가 웹페이지에 속하 을 때 자

동으로 설치할 수도 있다.

Page 43: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 37 -

버전 CodeBase 속성을 위한 .cab 파일 경로 FireFox를 위한 XPI 경로1.5.0 http://java.sun.com/update/1.5.0/jinstall-1_5

_0-windows-i586.cabhttp://java.sun.com/update/1.5.0/jre-1_5_0-windows-i586.xpi

1.6.0 http://java.sun.com/update/1.6.0/jinstall-6-windows-i586.cab

http://java.sun.com/update/1.6.0/jre-6-windows-i586.xpi

표 12 자바실행환경 자동다운로드 경로

사용자가 도우 계열을 사용하는 경우 OBJECT 는 EMBED 태그를

이용하여 다운로드 경로를 명시하면 자동으로 다운로드되어 설치가 가능

하다. 자동다운로드를 한 .cab 일의 경로를 codebase 항목에 기입함으

로써 자동다운로드 설정이 가능하며, 이어폭스의 경우 .xpi를 부가기능을

자동으로 다운로드 받아 설치할 수 있다. 표 13은 도우 환경에서 자동다

운로드에 필요한 경로 시이다.

.cab과 .xpi 다운로드 경로에 한 상세목록은 http://java.sun.com/javase

/6/docs/technotes/guides/deployment/deployment-guide/autodl-files.html

을 참조하기 바란다. OBJECT 는 EMBED 태그를 이용하여 자바애 릿을

웹페이지에 삽입하는 방법은 “부록 3의 라. 자바애 릿의 삽입“에서 상세

히 기술한다.

Mac OS X에는 JRE가 기본으로 탑재되어 있으며, 운 체제 업데이트와

함께 주기 으로 업데이트 리가 되고 있다. 버 10.4.8에 JRE 1.4 버

이 탑재되어 있으며 업데이트를 통해 JRE 1.5 설치가 가능하며 버 10.5

에는 JRE 1.5 버 이 탑재되어 있다.

리 스 유닉스의 경우, 자동 압축풀림 이진 일 는 RPM 형태로

배포되며 사용자가 직 설치하여야 한다. 설치를 해서는 리자 권한이

필요하며, 각 라우 의 러그인 디 토리에 자바 러그인이 히 설

치되었는지 확인하여야 한다. 웹 라우 에 한 자바 러그인이 히

설치 설정되지 않으면 자바애 릿이 구동되지 않는다.

Page 44: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 38 -

나. 자바실행환경 호환성

자바실행환경 호환성은 버 별 호환성과 운 체제별 호환성으로 구분될

수 있다. 버 별 호환성은 사용자의 JRE를 업데이트함으로써 해결 가능하

다. 다만, 운 체제별 호환성의 경우 재 Sun에서 제공하는 공식 JRE는

도우, 솔라리스 그리고 리 스용으로 한정되어 있다. 매킨토시의 경우

Apple사에 의해 JRE가 탑재 리되고 있으며, 이외에도 IBM 는 HP

등에서도 각자의 운 체제에서 동작하는 자바실행환경을 개발․배포하고

있다.

이에 따라, 운 체제별 자바실행환경의 호환성을 해서는 각 운 체제

벤더의 자바실행환경 개발 시 표 수가 필요하며, 가입자 소 트웨어

개발자의 경우에도 운 체제에 특화된 기능 이용을 자제하고 가 표

화되어 있는 순수 자바 기술을 이용하여 개발하는 것이 필요하다.

다. 자바애 릿 실행환경

자바애 릿은 웹페이지에 개체로 삽입되어, 사용자가 웹페이지 속 시

PC로 다운로드 되어 실행된다. 인터넷 익스 로러, 넷스 이 , 이어폭

스, 오페라 등 다양한 웹 라우 에서 자바 지원이 가능하며, 웹 라우

자체에 자바 가상 머신을 탑재하고 있다. 하지만 웹 라우 에 내장된 자

바 가상 머신의 경우 업데이트 되지 않거나, 호환성에 문제가 있는 경우가

있다. 따라서 다양한 환경에서 가입자 소 트웨어가 동일하게 작동하여야

하는 경우, 자바 러그인과 같은 표 화된 자바실행환경을 이용하여 실행

할 필요가 있다.

Sun의 JRE는 사용자 PC내에 설치 시 웹 라우 에 한 자바 러그인

을 설치하며, 인터넷 익스 로러 이어폭스와 같은 Gecko계열의 웹

라우 등을 지원한다.

Page 45: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 39 -

import netscape.javascript.*;import java.applet.*;import java.awt.*;class MyApplet extends Applet { public void init() { JSObject win = JSObject.getWindow(this); JSObject doc = (JSObject) win.getMember("document"); JSObject loc = (JSObject) doc.getMember("location"); // document.location.href String s = (String) loc.getMember("href");

부록 3. 자바 련 기타 구 시

가. 자바와 자바스크립트 간의 통신

공인인증서비스는 보통 사용자가 웹페이지를 통해 입력한 내용을 공인

인증서 가입자 소 트웨어에서 자서명하여 해당 서버에 송하도록 구

성되어지며, 이때 입력된 내용을 가입자 소 트웨어에 달할 때 필요한

것이 자바스크립트이다. 자바스크립트에서 자바애 릿의 함수를 호출하여

실행하거나 변수에 값을 넣을 수 있으며, 반 로 자바애 릿에서 자바스크

립트 변수에 값을 넣거나 함수를 실행시킬 수 있다. 이에 따라 해당 기능

을 실행하기 한 자바와 자바스크립트간 통신 기능이 가입자 소 트웨어

에 포함될 수 있다.

자바애 릿은 DOM에 속하거나 HTML 페이지 내의 자바스크립트 함

수를 호출하기 해 자바-자바스크립트 통신을 수행할 필요가 있다. 라

우 는 자바 래퍼 클래스 netscape.javascript.JSObject를 통해 자바와 자바

스크립트간의 통신을 허용한다. 라우 간의 DOM 구 의 차이로 인해,

자바 러그인은 인터넷 익스 로러와 넷스 이 에서의 JSObject 지원에

한 다른 수 을 제공한다.

일반 으로 자바애 릿은 다음과 같이 JSObject에 근한다.

Page 46: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 40 -

win.call("f", null); // HTML 페이지 내의 함수 f() 호출 }}

표 13 JSObject 이용 시

<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="200" height="200" align="baseline" codebase="http://java.sun.com/products/plugin/1.3/jinstall-13-win32.cab#Version=1,3,0,0"> <PARAM NAME="code" VALUE="XYZApp.class"> <PARAM NAME="codebase" VALUE="html/"> <PARAM NAME="type" VALUE="application/x-java-applet;version=1.3"> <PARAM NAME="MAYSCRIPT" VALUE="true"> <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz"> 자바애플릿을 지원하지 않습니다.</OBJECT>

표 15 새로운 OBJECT 태그

JSObject를 이용하기 해 자바 코드를 컴 일 하려면, CLASSPATH에

netscape.javascript 패키지가 있어야 한다. 재 JRE에는 JAWS.JAR라 불리

는 JAR 일 안에 netscape.javascript가 담겨져 있다. JSObject을 이용하는

애 릿을 컴 일하기 해, 컴 일 에 CLASSPATH에 plugin.jar(JRE 1.3

버 이하에서는 JAWS.JAR)를 추가하면 된다.

보안상 이유로 인해, JSObject 지원은 자바 러그인에서 기본 으로 가능

하지 않다. 자바 러그인에서 JSObject 지원을 활성화하기 해서는

EMBED/OBJECT 태그에 다음과 같이 표 되도록 MAYSCRIPT라고 불리

는 새로운 속성이 필요하다.

<APPLET code="XYZApp.class" codebase="html/" align="baseline" width="200" height="200" MAYSCRIPT> <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz"> 자바애플릿을 지원하지 않습니다.</APPLET>

표 14 원본 APPLET 태그

Page 47: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 41 -

<EMBED type="application/x-java-applet;version=1.3" width="200" height="200" align="baseline" code="XYZApp.class" codebase="html/" model="models/HyaluronicAcid.xyz" MAYSCRIPT=true pluginspage="http://java.sun.com/products/plugin/1.3/plugin-install.html"><NOEMBED> 자바애플릿을 지원하지 않습니다.</NOEMBED></EMBED>

표 16 새로운 EMBED 태그

DOMService service = null;try{ service = DOMService.getService(MyApplet); String title = (String) service.invokeAndWait(new DOMAction() { public Object run(DOMAccessor accessor) { HTMLDocument doc = (HTMLDocument) accessor.getDocument(MyApplet); return doc.getTitle(); } });

Common DOM API는 다양한 랫폼에서 작동하는 다양한 라우 에

해 라우 의 DOM에 근할 수 있는 표 API를 제공한다. 이 API는

DOM Level 2 Recommendation에 기반하고 있으며 W3C에서 정의한 인터

페이스 페이지들(org.w3c.dom.*)을 포함하고 있다.

Common DOM 클래스는 응용 로그램이 org.w3c.dom과

org.w3c.dom.html 패키지에 있는 API를 통해 웹 라우 의 기반 DOM에

근할 수 있도록 한다. 다음은 Common DOM API를 이용하여 문서 객

체의 제목을 얻어오는 간단한 제이다:

Page 48: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 42 -

}catch (DOMUnsupportedException e1){}catch (DOMAccessException e2){}

표 17 Common DOM API 이용 시

나. 자바 기반의 가입자 소 트웨어 배포

자바 기반의 가입자 소 트웨어는 다양한 환경에서 손쉽게 배포되고

리될 수 있도록 자바애 릿 형태로 배포되어 실행될 것을 권장한다. 한

가입자 소 트웨어는 해당 서비스 웹페이지를 통해 안 하게 배포되어야

하며 이를 해 배포되는 소 트웨어의 신뢰여부 확인 배포자를 확인

할 수 있도록 코드서명된 자바애 릿 형태로 배포될 필요가 있다.

자바애 릿 실행에 한 보안모델은 "Sand Box" 모델로써 자바애 릿

실행을 일정 수 으로 제한한다. "Sand Box"는 안 한 컴퓨터 환경을 제공

하기 한 도구로 외부에서 받은 로그램을 보호된 역에서 실행시키는

것을 가리킨다. 따라서 자바애 릿을 통해 사용자 PC에 해를 가할 수

있는 가능성을 없앰으로써 안 한 이용이 가능하다. 하지만 보안모델에 의

해 제한된 기능을 사용할 필요성이 요구되었으며, 이를 해 서명된 자바

애 릿이 등장하게 되었다. 자바애 릿을 인증서 기반으로 서명함으로써

신뢰된 로그램임을 인증할 수 있는 기반을 마련하 으며, 사용자 PC 리

소스 근과 같은 제한된 기능을 실행할 수 있게 되었다.

다. 자바애 릿 코드서명

본 가이드에서 권장하는 자바 기반의 가입자 소 트웨어 배포형태는 웹

라우 에서 실행 가능한 자바애 릿이다. 자바애 릿은 배포자에 한

Page 49: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 43 -

1. 전자서명검증키와 전자서명생성키 쌍 생성 자바 개발도구에 포함되어 있는 keytool을 이용하여 전자서명검증키/전자서명생성키 쌍을 생성한다. 생성된 전자서명생성키는 키 저장 파일에 저장되며 키 저장 파일은 사용자계정의 홈디렉토리에 .keystore라는 이름으로 생성되며, 별도 디렉토리 지정도 가능하다.

keytool -genkey -keyalg RSA -alias [키 이름]

2. 인증서 요청양식(CSR) 생성 전 단계에서 생성된 키를 이용하여 코드서명용 인증서 요청양식인 CSR 파일을 생성한다.

keytool -certreq -alias [키 이름] -file [파일명]

3. 코드서명 인증서 발급 요청 다음과 같이 생성된 CSR을 코드서명 인증서를 발급하는 기관(공인인증기관 등)의 온라인 신청 페이지에 업로드 하거나 메일을 이용하여 전송한다.

신뢰 확인이 가능한 코드서명된 형태여야 하며 안 하게 배포되어야 한다.

자바애 릿 코드서명은 신뢰할 수 있는 인증서 발 기 으로부터 코드

서명용 인증서를 발 받아 자바개발도구 내에 포함된 서명도구(Keytool)를

이용하여 서명하면 된다. 상세한 자바애 릿 코드서명 차는 다음과 같다.

Page 50: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 44 -

4. 발급된 코드서명 인증서를 자바의 키 저장 객체(Key store)로 가져오기 발급된 인증서를 keytool을 이용하여 키 저장 객체에 가져오기하여 저장한다.

keytool -import -alias [키 이름] -file [인증서 파일명]

5. Jar 패키지에 대한 코드서명 수행 전 단계에서 가져오기한 코드서명 인증서를 이용하여 jar 패키지에 대해 코드서명 한다.

jarsigner [파일명.jar] [키 이름]

6. 서명여부 확인 서명된 Jar 파일이 정확하게 서명되었는지 확인하기 위해서 jarsigner를 이용하여 확인 가능하다.

jarsigner -verify -verbose -certs [파일명.jar]

7. 웹페이지에 삽입 다음과 같이 <applet> 태크를 이용하여 서명된 자바애플릿을 웹페이지에 삽입한다.

Page 51: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 45 -

<applet code="SignedAppletDemo.class" archive="SSignedApplet.jar" width=600 height=400></applet>

8. 웹브라우저에서 확인 서명된 자바애플릿 로딩 시 신뢰된 코드서명용 인증서에 의해 서명된 자바 애플릿의 경우 프로그램 실행여부에 대한 안내창이 나타난다.

표 18 자바애 릿 코드서명 방법 시

서명된 자바애 릿은 웹 라우 가 아닌 자바실행환경, 즉 웹 라우 에

러그된 자바 러그인에 의해 검증된다. 코드서명에 사용된 인증서의 상

인증서 는 최상 인증서가 JRE 내에 탑재되어 있는 경우, 자바 러그

인은 신뢰할 수 있는 로그램으로 단하게 된다. 하지만 코드서명에 사

용된 인증서의 상 인증서 는 최상 인증서가 JRE 내에 탑재되어 있지

않은 경우, 자바 러그인은 해당 자서명을 신뢰할 수 없다는 경고문을

출력한다.

라. 자바애 릿의 삽입

1. APPLET 태그

다 라우 환경에서 자바애 릿을 용하기 해서 APPLET 태그를

Page 52: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 46 -

사용할 수 있다. APPLET 태그에 한 상세한 설명은 W3 HTML 명세를

참조하면 된다.

다음은 APPLET 태그를 사용한 제이다.

<applet code=Applet1.class width="200" height="200">이 브라우저는 APPLET 태그를 지원하지 않습니다.</applet>

표 19 APPLET 태그 시

인터넷 익스 로러와 Gecko 계열의 웹 라우 에 해, 자바 러그인이

설치되어 있으면, 자바애 릿 실행을 해 최신버 의 자바 러그인이 실

행된다. 하지만 JRE가 설치되지 않은 경우 자동다운로드를 해서는

APPLET 태그를 사용할 수 없다.

2. OBJECT 태그

OBJECT 태그는 오직 인터넷 익스 로러에서만 사용가능한 자바애 릿

용을 한 태그이다. OBJECT 태그에 한 상세한 설명은 W3 HTML 명

세를 참조하면 된다.

<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="200" height="200"> <PARAM name="code" value="Applet1.class"></OBJECT>

표 20 OBJECT 태그 시

classid 속성은 사용하는 자바 러그인 버 을 인식하기 해 사용된다.

사용자 PC에 JRE가 설치되지 않은 경우 자동설치를 해 추가 속성은

codebase를 사용할 수 있다. 다음은 Sun 홈페이지에서 JRE를 자동으로 다

Page 53: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 47 -

<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="200" height="200" codebase ="http://java.sun.com/update/1.6.0/jinstall-6-windows-i586.cab#Version=6,0,0,99"> <param name="code" value="Applet1.class"></object>

표 21 JRE 자동다운로드 설정 시

<embed code="Applet1.class" width="200" height="200" type="application/x-java-applet;version=1.6.0" pluginspage="http://java.sun.com/javase/downloads"/>

표 22 EMBED 태그 시

운로드 받아 설치할 수 있도록 codebase를 사용한 제이다.

3. EMBED 태그

EMBED 태그는 오직 Gecko 계열의 웹 라우 에서만 사용가능한 자바

애 릿 용을 한 태그이다.

type 속성을 이용하여 사용자 PC에 JRE가 설치되어 있지 않은 경우 자

동으로 다운로드 받아 설치할 수 있다.

4. 다 웹 라우 지원

APPLET 태그는 모든 웹 라우 에서 사용 가능하나, 자동다운로드 기

능 등에서 제한이 있으며, OBJECT 태그는 인터넷 익스 로러에서만, 그리

고 EMBED 태그는 모질라 계열의 웹 라우 에서만 사용 가능하다. 다양

한 웹 라우 환경을 한꺼번에 지원하기 한 방법으로 다음의 두 가지

방법이 있다.

Page 54: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 48 -

<object classid="clsid:CAFEEFAC-0016-0000-0000-ABCDEFFEDCBA" <param name="code" value="Applet1.class"> <comment> <embed code="Applet1.class" type="application/x-java-applet;jpi-version=1.6"> <noembed> 자바애플릿을 지원하지 않습니다. </noembed> </embed> </comment></object>

표 23 다 웹 라우 지원 시

HTML 태그만을 이용하는 방법

자바스크립트를 이용하는 방법

다음은 HTML 태그만을 사용하여 모든 라우 를 지원하는 방법에

한 제이다. 인터넷 익스 로러의 경우 OBJECT 태그를 인식하고

COMMENT 태그는 무시한다. 하지만 Gecko 계열에서는 OBJECT 태그와

CLASSID를 무시하고 COMMENT 태그 내의 내용을 해석한다.

에 소개한 순수 HTML 태그만을 사용하는 방법 이외에 자바스크립트

를 이용하여 여러 라우 를 동시에 지원할 수 있다.

자바스크립트에서 우선 appName 변수를 통해 사용하는 웹 라우 를

악한다. 악된 웹 라우 값에 따라 document.write() 함수를 이용하여

태그를 만든다. appName 변수값이 “Netscape”인 경우 EMBED 태그를 사

용하고, 변수값이 “Microsoft Internet Explorer”이면 OBJECT 태그를 사용

하면 된다.

다음은 웹 라우 를 악하여 실시간으로 웹 라우 에 알맞은 태그를

만드는 간단한 제이다.

Page 55: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 49 -

<html><script language="Javascript"> var _app = navigator.appName; if (_app == 'Netscape') { document.write('<embed code="Applet1.class"', 'width="200"', 'height="200"', 'type="application/x-java-applet;version=1.6">'); } else if (_app == 'Microsoft Internet Explorer') { document.write('<OBJECT ', 'classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"', 'width="200"', 'height="200">', '<PARAM name="code" value="Applet1.class">', '</OBJECT>'); } else { document.write('<p>자바애플릿을 지원하지 않습니다.</p>'); }</script></html>

표 24 웹 라우 를 악하여 태그를 지정하는 시

JDK는 APPLET 태그를 와 같이 다 웹 라우 를 지원할 수 있도록

변환해주는 도구인 HTML Converter를 제공한다. HTML Converter에

한 상세한 내용은 Sun 홈페이지를 참고하기 바란다.

마. 자바클래스 원격지 로딩

자바클래스 원격지 로딩 방식은 원격지에 떨어져 있는 데이터베이스, 원

격지 서버, 일시스템, XML 일 등에서 자바클래스를 동 으로 로딩하

는 방법이다. 자바 응용 로그램의 구성요소 주요 모듈을 패키지로 배

포하지 않고 자바 응용 로그램 실행 시 네트워크상의 원격지로부터 로딩

하는 것으로 주요 모듈에 한 보안을 해 사용될 수 있다. 주요모듈을

사용자 PC가 아닌 검증된 원격지로부터 로딩 함으로써 임의의 수정된 클

래스 사용 방지가 가능하며, 원격지의 클래스를 감춤으로써 소스코드를 안

하게 리 할 수 있다.

Page 56: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 50 -

import java.net.URL;import java.net.URLClassLoader; public class FileSystemTest { public static void main(String[] args) throws Exception { URL[] urls = { new java.io.File("/usr/classes").toURL(); } URLClassLoader ucl = new URLClassLoader(urls); Class klass = ucl.loadClass("HelloWorld"); // obj를 사용하여 적절한 것을 한다. Object obj = klass.newInstance(); }}

표 25 일시스템으로부터 자바클래스를 로딩하는 시

URL[] urls = { new java.io.File("/usr/lib/madvirus.jar").toURL() };

자바는 기본 으로 여러 개의 클래스로더를 제공하고 있으며, 별도의 클

래스로더를 구 하여 사용할 수도 있다. 다음은 원격지에서 클래스를 로딩

할 수 있도록 기본으로 제공되는 클래스로더인 java.net.URLClassLoader에

해 기술한다.

URLClassLoader는 지정한 웹페이지 주소로부터 클래스를 로딩할 수 있

도록 해 다. 이는 일 시스템, HTTP, FTP를 비롯한 모든 형태의 네트

워크 자원 치로부터 클래스를 로딩할 수 있다는 것을 의미한다. 다음은

일시스템으로부터 클래스를 로딩하는 제이다.

일단 URLClassLoader를 생성하면, loadClass() 메소드를 사용하여 원하

는 클래스를 로딩할 수 있고, 이어서 loadClass() 메소드의 반환결과인

Class 객체의 newInstance() 메소드를 사용하여 새로운 인스턴스를 생성해

서 사용하면 된다.

웹페이지 주소로 Jar 일이나 Zip 일을 지정할 경우 자동 으로 Jar

일과 Zip 일로부터 클래스를 로딩한다.

Page 57: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 51 -

new URL("http", "www.hostname.com", "/lib/madvirus.jar")

new URL("ftp", "user:[email protected]:", "/")

HTTP 서버로부터 클래스를 로딩하는 경우 웹페이지 주소를 다음과 같

이 생성하면 된다.

HTTP의 경우와 마찬가지로 FTP 서버로부터 클래스를 로딩하는 경우는

다음과 같다. 여기서 user와 password는 FTP서버 속에 필요한 사용자

ID와 비 번호이다.

원격지에서 자바클래스를 로딩하여 사용하는 경우에는 신뢰된 원격지에

서 신뢰된 자바클래스에 해서만 로딩할 수 있도록 유의하여야 한다. 이

를 해 원격지의 Jar 일이나 Zip 일에 해 자서명을 이용할 수 있

다.

사. 자바애 릿에 한 근권한 리

자바 가상 머신은 쓰 드마다 한 메소드가 어느 메소드를 호출했는지

그 메소드는 어느 메소드를 호출했는지를 나타내는 호출 체인을 리

한다. 어떤 쓰 드의 한 메소드가 클래스나 일 등의 자원에 근하고자

할 때, 자바 가상 머신은 호출 체인의 마지막인 자원에 하여 근을 시

도하는 메소드부터 호출 체인의 시작에 있는 메소드까지 모두 권한 검사

를 수행하여 하나의 메소드라도 권한이 없을 경우 외를 발생시켜 근

을 막는다.

자바 스크립트에서 자원에 근하는 자바애 릿의 메소드를 호출할 경

우, 호출 체인은 자바 스크립트 메소드를 시작으로 자원에 직 근하는

자바애 릿 메소드까지로 구성된다. 자바 가상 머신이 이 호출 체인의 메

소드들에 한 권한을 검사할 경우 자바 가상 머신은 자바 스크립트를 신

Page 58: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 52 -

import java.security.PrivilegedAction; import java.security.AccessController;public class PApplet extends JApplet {

private String doSomething() {return System.getProperty("user.home");

}public String aMethodCalledFromJS() {

PrivilegedAction pAction = new PrivilegedAction() {public Object run() {

return doSomething();}

};return (String)AccessController.doPrivileged(pAction);

}}

표 26 자바애 릿에서의 근권한 처리 시

뢰하는 객체로 보지 않기 때문에 자바 스크립트 메소드가 권한이 없다고

단하여 외를 발생시키고 근을 막는다.

와 같이 자바 스크립트에 의해서 호출되는 자바애 릿의 메소드를

doPrivileged로 명시할 경우, 호출 체인을 부 검사하는 것이 아니라 호출

체인의 마지막인 자원에 직 근하는 메소드부터 doPrivileged로 명시된

메소드까지만 권한 검사를 수행하게 된다. 이러한 방법을 통하여 자바 스

크립트는 자원에 근하는 애 릿을 제어할 수 있게 된다. 주의해야 할

은 doPrivileged가 명시된 메소드는 자원에 근할 권한이 있어야 하며,

로그램이 안 하게 사용되게 하기 해서는 doPrivileged는 되도록 사용되

지 말아야 하며, 사용된다면 가능한 한 호출 체인의 시작 쪽에서 사용되어

야 한다.

Page 59: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 53 -

용 어 정 의

보안토큰

자서명생성정보 등 비 정보를 안 하게 장․보 하기

하여 키 생성․ 자서명 생성 등이 기기 내부에서 처리되

도록 구 된 하드웨어 기기

보안토큰

구동 로그램

보안토큰과 가입자 소 트웨어간의 인터페이스를 담당하는

보안토큰 API를 구 한 로그램

자바애 릿 HTML 내에 포함되어 배포되며 웹 라우 내에서 수행되

도록 작성된 소규모의 자바 응용 로그램

코드서명

인터넷 는 무선 환경에서 배포되는 실행 일이 정당한

제작자에 의해 제작되었고 ·변조되지 않았음을 확인하는

방법

바이트코드 자바(Java) 로그램의 컴 일된 형태로써 바이트코드로 구

된 로그램은 자바가상머신에서 바이트 단 로 실행

ActiveX 컨트롤

마이크로소 트사가 개발한 재사용 가능한 소 트웨어 컴포

트 기술로써 인터넷 익스 로러에 추가되어 동 인 웹 이

용환경을 제공함

Swing

자바 로그램에서 GUI를 구 하기 한 툴킷. 버튼, 표 등

과 같은 사용자 인터페이스를 포함하며 랫폼 독립 이고

확장 가능

용 어 정 의

Page 60: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 54 -

약 어 설 명

APDU Application Protocol Data Unit, 응용 로토콜 데이터 단

API Application Program Interface, 응용 로그램 인터페이스

AWT Abstract Windows Toolkit, 추상 도우 툴킷

CMP Certificate Management Protocols, 인증서 리 로토콜

CPS Certification Practice Statement, 인증업무 칙

CRL Certificate Revocation List, 공인인증서 효력정지 폐지목록

DER Definite Encoding Rules, 인코딩 규칙

DOM Document Object Model, 문서 객체 모델

FTP File Transfer Protocol, 일 송 규약

GUI Graphic User Interface, 그래픽 사용자 인터페이스

HTML HyperText Markup Language, 하이퍼텍스트 생성 언어

HTTP HyperText Transfer Protocol, 하이퍼텍스트 송 규약

JAR Java ARchive file, 자바 압축 일

JCA Java Cryptography Architecture, 자바 암호 구조

JCE Java Cryptography Extension, 자바 암호 확장

JDK Java Development Kit, 자바개발도구

JRE Java Runtime Environment, 자바실행환경

JVM Java Virtual Machine, 자바 가상 머신

MAC Message Authentication Code, 메시지 인증 코드

OCSP Online Certificate Status Protocol, 온라인 인증서 상태확인 규약

RPM Red Hat Package Manager, 드햇 패키지 리

USB Universal Serial Bus, 범용 직렬 버스

XML Extensible Markup Language, 확장성 생성 언어

약 어 표

Page 61: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 55 -

참고문헌 자료

[1] IETF, RFC2119, Key words for use in RFCs to Indicate Requirement

Levels, March 1997, http://www.ietf.org/rfc/rfc2119.txt

[2] IETF, RFC3280, Public Key Infrastructure Certificate and Certificate R

evocation List(CRL) Profile, April 2002, http://www.ietf.org/rfc/rfc

3280.txt

[3] ITU-T, X.509, Information Technology - Open Systems Interconnection

- Directory: Public Key and Attribute Certificate Frameworks, 2005

[4] RSA Laboratories PKCS#1, RSA Cryptography Standard v2.0, 1998,

http://www.rsa.com/rsalabs/node.asp?id=2125

[5] RSA Laboratories PKCS#5, Password-based Encryption Standard v1.5

& v2.0, 1993, http://www.rsa.com/rsalabs/node.asp?id=2127

[6] RSA Laboratories PKCS#7, Cryptographic Message Syntax Standard

v1.5, 1997, http://www.rsa.com/rsalabs/node.asp?id=2129

[7] RSA Laboratories PKCS#8, Private-Key Information Syntax Standard

v1.2, 1993, http://www.rsa.com/rsalabs/node.asp?id=2130

[8] RSA Laboratories PKCS#10, Certification Request Standard, v1.7, 20

00, http://www.rsa.com/rsalabs/node.asp?id=2132

[9] RSA Laboratories PKCS#11, Cryptographic Token Interface Standard

v2.11, 2001, http://www.rsa.com/rsalabs/node.asp?id=2133

[10] RSA Laboratories PKCS#12, Personal Information Exchange Syntax S

tandard v1.0, 1999, http://www.rsa.com/rsalabs/node.asp?id=2138

[11] TTA, TTAS.KO-12.0012/R1, 자서명 인증서 로 일 표 , 2006,

Page 62: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 56 -

http://www.tta.or.kr

[12] TTA, TTAS.KO-12.0004/R1, 128비트 블록암호알고리즘 SEED, 2005,

http://www.tta.or.kr

[13] TTA, TTAS.KO-12.0028, 자서명 인증서 경로처리 알고리즘, 2005,

http://www.tta.or.kr

[14] TTA, TTAS.KO-12.0029, 식별번호를 이용한 본인확인 기술, 2005,

http://www.tta.or.kr

[15] KISA, KCAC.TS.CERTPROF, 자서명 인증서 로 일 규격 v1.50,

2007, http://www.rootca.or.kr

[16] KISA, KCAC.TS.CRLPROF, 자서명 인증서 효력정지 폐지목록

로 일 규격 v1.30, 2007, http://www.rootca.or.kr

[17] KISA, KCAC.TS.DN, 자서명인증체계 DN 규격 v1.11, 2007, http:

//www.rootca.or.kr

[18] KISA, KCAC.TS.NSACA, 공인인증서 표시를 한 기술규격 v1.00,

2002, http://www.rootca.or.kr

[19] KISA, KCAC.TS.SIVID, 식별번호를 이용한 본인확인 기술규격 v1.11,

2002, http://www.rootca.or.kr

[20] KISA, KCAC.TS.CRMF, 공인인증서 요청형식 로토콜 규격 v1.10,

2007, http://www.rootca.or.kr

[21] KISA, KCAC.TS.RS, 공인인증서 발 을 한 참조번호/인가코드

기술규격 v.1.00, 2003, http://www.rootca.or.kr

[22] KISA, KCAC.TS.CMP, 공인인증서 리 로토콜 규격 v1.10, 2007,

Page 63: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit

- 57 -

http://www.rootca.or.kr

[23] KISA, KCAC.TS.OCSP, 실시간 인증서 상태확인 기술규격 v1.10,

2004, http://www.rootca.or.kr

[24] KISA, KCAC.TS.CERTVAL, 공인인증서 경로검증 기술규격 v1.00,

2004, http://www.rootca.or.kr

[25] KISA, KCAC.TS.UI, 공인인증기 간 상호연동을 한 사용자 인터

페이스 기술규격 v1.60, 2007, http://www.rootca.or.kr

[26] KISA, KCAC.TS.HSMS, 보안토큰 기반 공인인증서 장형식 기술

규격 v1.0, 2007, http://www.rootca.or.kr

[27] KISA, KCAC.TS.HSMU, 보안토큰 기반 공인인증서 이용기술 규격

v1.50, 2007, http://www.rootca.or.kr

[28] JDKTM 5.0 Documentation, http://java.sun.com/j2se/1.5.0/docs/

[29] JDKTM 6 Documentation, http://java.sun.com/javase/6/docs/

[30] JavaTM PKCS#11 Reference Guide, http://java.sun.com/javase/6/

docs/technotes/guides/security/p11guide.html

[31] JavaTM PKI Programmer's Guide, http://java.sun.com/javase/6/d

ocs/technotes/guides/security/certpath/CertPathProgGuide.html

[32] The SunPCSC Provider, http://java.sun.com/javase/6/docs/techn

otes/guides/security/SunProviders.html#SunPCSCProvider

Page 64: 자바 기반의 공인인증서 가입자 소프트웨어...자바 기반의 공인인증서 가입자 소프트웨어 구현 가이드라인 Guideline for Java based PKI Toolkit