sitelink1 | |
---|---|
sitelink2 | |
sitelink3 | |
sitelink4 | |
extra_vars5 | |
extra_vars6 |
Chapter 1 개념
Chapter 2 기본기
Chapter 3 난수
Chapter 4 키관리
Chapter 5 인증
Chapter 7 암호화
Chapter 8 서명된 애플릿 (이 챕터 부분만 따로 정리했다)
출처 : Tong - taehoe님의 보안통
Chapter 2 기본기
Chapter 3 난수
Chapter 4 키관리
Chapter 5 인증
Chapter 7 암호화
Chapter 8 서명된 애플릿 (이 챕터 부분만 따로 정리했다)
1. Microsoft SDK for JAVA(http://www.microsoft.com/java/)를 다운 로드 한 후 설치한다.
2. 설치한 Microsoft SDK for JAVA의 bin 디렉토리를 path에 설정해 준다.
예, path = %path%;E:Program FilesMicrosoft SDK for Java 4.0bin
3. makecert 명령어를 사용하여 인증서를 생성한다.
makecert -sk [인증서 별명] -n "CN=[인증 이름]" [인증서 화일명]
-. 공개키와 비밀키 쌍이 생성되어지고, 비밀키는 레지스트리에 저장된다.
-. 인증서가 주어진 파일명으로 생성된다.
예, makecert -sk RayCertification -n "CN=Raytrust Org." RayCertification.cer
e RayCertification.cer 파일이 생성된다
makecert 명령어의 option 설명
· -sk "KeyName"
보관되어 있는 키 이름.
없을 경우 이 이름으로 레지스트리에 키를 생성한다.
· -ss "Store"
인증서의 보관소 명
· -sr "Location"
레지스트리 내의 인증서의 보관소 위치를 나타냄.
( CurrentUser | LocalMachine ) 중 하나
· -# "Number"
1~130사이의 수.
· -$ "Authority"
인증서를 발급한 기관 형태 ( individual | commercial ) 중 하나
· -n "X.509 name"
X.500의 구분되는 이름 ( 예 : CN=Chungnam )
· -?
기본 옵션의 목록 설명
· -!
확장 옵션의 목록 설명
4. java 코드에 sign을 할 때, .spc 형식의 서명 파일이 필요하므로 cert2spc 명령을 사용하여 .cer 서명 파일에서 .spc 형식의 서명 파일을 만든다.
cert2spc [인증서 화일명] [.spc 화일]
예 > cert2spc RayCertification.cer RayCertification.spc
e RayCertification.spc 파일이 생성된다.
5. 서명이 필요한 파일들을 dubuild 명령을 사용하여 cab 형식의 파일로 만든다.
dubuild [.cab 파일] [path] /D [“frindlyname”] /I [pattern] /V [version]
예 > dubuild SignedRayApplet.cab . /D "RaySignTest" /I *.class /V 1,1,1,1
e SignedRayApplet.cab 파일이 생성된다.
dubuild 명령어의 option 설명
n /H 또는 /?
도움이 되는 텍스트를 보여준다.
n /D “friendlyname”
Distribution Unit의 친근한 이름 설정 ( 예 : … /D “RaySignTest” …)
n /P oldDUName.cab
이전 Distribution Unit의 파일 이름.
n /M
multi-CAB Distribution Unit을 만든다.
n /I {pattern}
{pattern}에 매칭되는 파일들을 포함한다.
n /X {pattern}
{pattern}에 매칭되는 파일들을 배제한다.
n /N “namespace”
Distribution Unit의 namespace.
n /B {beaninfo}
각각의 bean에 대한 정보.
n /V {version}
기본적인 버전 숫자를 설정한다. ( 예: …. /V 1,1,1,1 … )
n /Z
IE 3.0과 호환 가능한 MSZIP 압축을 사용한다.
n 더 자세한 정보는 /H 또는 /?를 사용하여 확인하기 바란다.
6. signcode 명령어를 사용하여 앞에서 만든 인증서를 cab 파일에 포함 시키고, 레지스트리의 비밀키로 서명을 한다.
signcode -j javasign.dll -jp [레벨] -spc [.spc 파일] ?k [key 이름] [.cab 파일]
예 > signcode -j javasign.dll -jp LowX -spc RayCertification.spc -k RayCertification SignedRayApplet.cab
e Sign된 SignedRayApplet.cab 파일이 된다.
signcode 명령어의 option 설명
n -spc "file"
SPC를 포함하는 파일명
n -v "pvkFile"
비밀키를 포함하고 있는 파일명
n -k "KeyName"
레지스트리 내의 키 이름
n -n "name"
사인할 내용에 대한 텍스트 이름
n -l "info"
사인할 내용에 대한 부가 설명이 있는 장소 ( 예: URL )
n -p "provider"
시스템 내의 암호화 시스템 제공자 이름
n -y "type"
시스템 내의 암호화 시스템 제공자 형태
n -ky "keyType"
키의 종류 ( signature | exchange | 정수 ) 중 하나
n -$ "authority"
인증서를 인증한 기관의 종류 ( individual | commercial ) 중 하나
n -a "algorithm"
사인에 이용된 해쉬 알고리즘. ( md5 | sha1 ) 중 하나. 기본값 : md5
n -t "URL"
타임스탬프를 찍어줄 서버의 HTTP주소
n -tr "number"
타임스탬프 서버 접속 실패시 재시도 횟수. 기본은 1회
n -tw "number"
타임스탬프간 간격 (초단위). 기본은 0초
n -j "dllName"
사인에 필요한 부가 특성들을 포함하는 DLL 파일명 ( 예 : 보안 레벨 )
n -jp "param"
DLL파일에 넘길 파라미터
n -c "file"
인코딩된 SPC를 포함한 X.509파일명
n -s "Store"
인증서를 가지고 있는 인증서 보관소명 . 기본은 mystore
n -r "location"
레지스트리 내의 인증서 보관소의 위치 ( localMachine | currentUser )중 하나. 기본은 currentUser
n -sp "policy"
인증서 검증에 필요한 모든 인증서를 포함할 것인가 아니면 SPC보관소에 들어있는 인증서가 나올 때까지 포함할 것인가에 대한 정책. ( chain | spcstore )중 하나. 기본은 spcstore
n -cn "name"
인증서 일반 이름 (별명)
n -x
사인하지 말고 타임스탬프만 받을 것을 명시
7. html 페이지에 다음과 같이 넣는다.
<applet code="org.raytrust.RayApplet.class" width=320 height=270>
<param name=useslibrary value='RaySignTest'>
<param name=useslibraryversion value='1,1,1,1'>
<param name=useslibrarycodebase value='SignedRayApplet.cab'>
</applet>
**** 주의!!!! ****
위의 html 코드에서 음영으로 표시된 부분들은 적절하게 바꾸어줘야 한다.
첫번째의 경우 정확하게 사용한 패키지명을 적어주면 된다.
두번째의 경우 dubuild.exe 명령 사용시 /D 옵션으로 주었던 friendlyname과 일치해야 한다.
셋번째의 경우 dubuild.exe 명령 사용시 /V 옵션으로 주었던 version과 일치해야 한다.
네번째의 경우 dubuild.exe 명령 사용시 이용했던 cab 파일 이름과 일치해야 한다.
8. 위와 같이 하면, 클라이언트가 연결 되었을 때 윈도우가 뜨면서 인증할 것인지를 물어 봅니다. 여기서, YES를 해주면 모든 권한을 가지게 된다.
일부의 권한만을 주기 위해서는 프로그램 내부에서 다음과 같이 해 주면 된다.
if (Class.forName("com.ms.security.PolicyEngine")!=null) {
PolicyEngine.assertPermission(PermissionID.FILEIO);
}
위의 예제 중에서 다음 부분에 여러 가지 권한들을 부여할 수 있다.
PolicyEngine.assertPermission(PermissionID.???????);
”???????” 부분은 다음과 같은 ID가 올 수 있습니다.
1. SYSTEM
2. FILEIO
3. NETIO
4. THREAD
5. PROPERTY
6. EXEC
7. REFLECTION
8. PRINTING
9. SECURITY
10. REGISTRY
11. CLIENTSTORE
12. UI
13. SYSSTREAMS
14. USERFILEIO
15. MULTIMEDIA
l 배치 파일의 내용
1: makecert -sk RayCertification -n "CN=Raytrust Org." RayCertification.cer
2: cert2spc RayCertification.cer RayCertification.spc
3: dubuild SignedRayApplet.cab . /D "RaySignTest" /I *.class /V 1,1,1,1
4: signcode -j javasign.dll -jp LowX -spc RayCertification.spc
-k RayCertification SignedRayApplet.cab
2. 설치한 Microsoft SDK for JAVA의 bin 디렉토리를 path에 설정해 준다.
예, path = %path%;E:Program FilesMicrosoft SDK for Java 4.0bin
3. makecert 명령어를 사용하여 인증서를 생성한다.
makecert -sk [인증서 별명] -n "CN=[인증 이름]" [인증서 화일명]
-. 공개키와 비밀키 쌍이 생성되어지고, 비밀키는 레지스트리에 저장된다.
-. 인증서가 주어진 파일명으로 생성된다.
예, makecert -sk RayCertification -n "CN=Raytrust Org." RayCertification.cer
e RayCertification.cer 파일이 생성된다
makecert 명령어의 option 설명
· -sk "KeyName"
보관되어 있는 키 이름.
없을 경우 이 이름으로 레지스트리에 키를 생성한다.
· -ss "Store"
인증서의 보관소 명
· -sr "Location"
레지스트리 내의 인증서의 보관소 위치를 나타냄.
( CurrentUser | LocalMachine ) 중 하나
· -# "Number"
1~130사이의 수.
· -$ "Authority"
인증서를 발급한 기관 형태 ( individual | commercial ) 중 하나
· -n "X.509 name"
X.500의 구분되는 이름 ( 예 : CN=Chungnam )
· -?
기본 옵션의 목록 설명
· -!
확장 옵션의 목록 설명
4. java 코드에 sign을 할 때, .spc 형식의 서명 파일이 필요하므로 cert2spc 명령을 사용하여 .cer 서명 파일에서 .spc 형식의 서명 파일을 만든다.
cert2spc [인증서 화일명] [.spc 화일]
예 > cert2spc RayCertification.cer RayCertification.spc
e RayCertification.spc 파일이 생성된다.
5. 서명이 필요한 파일들을 dubuild 명령을 사용하여 cab 형식의 파일로 만든다.
dubuild [.cab 파일] [path] /D [“frindlyname”] /I [pattern] /V [version]
예 > dubuild SignedRayApplet.cab . /D "RaySignTest" /I *.class /V 1,1,1,1
e SignedRayApplet.cab 파일이 생성된다.
dubuild 명령어의 option 설명
n /H 또는 /?
도움이 되는 텍스트를 보여준다.
n /D “friendlyname”
Distribution Unit의 친근한 이름 설정 ( 예 : … /D “RaySignTest” …)
n /P oldDUName.cab
이전 Distribution Unit의 파일 이름.
n /M
multi-CAB Distribution Unit을 만든다.
n /I {pattern}
{pattern}에 매칭되는 파일들을 포함한다.
n /X {pattern}
{pattern}에 매칭되는 파일들을 배제한다.
n /N “namespace”
Distribution Unit의 namespace.
n /B {beaninfo}
각각의 bean에 대한 정보.
n /V {version}
기본적인 버전 숫자를 설정한다. ( 예: …. /V 1,1,1,1 … )
n /Z
IE 3.0과 호환 가능한 MSZIP 압축을 사용한다.
n 더 자세한 정보는 /H 또는 /?를 사용하여 확인하기 바란다.
6. signcode 명령어를 사용하여 앞에서 만든 인증서를 cab 파일에 포함 시키고, 레지스트리의 비밀키로 서명을 한다.
signcode -j javasign.dll -jp [레벨] -spc [.spc 파일] ?k [key 이름] [.cab 파일]
예 > signcode -j javasign.dll -jp LowX -spc RayCertification.spc -k RayCertification SignedRayApplet.cab
e Sign된 SignedRayApplet.cab 파일이 된다.
signcode 명령어의 option 설명
n -spc "file"
SPC를 포함하는 파일명
n -v "pvkFile"
비밀키를 포함하고 있는 파일명
n -k "KeyName"
레지스트리 내의 키 이름
n -n "name"
사인할 내용에 대한 텍스트 이름
n -l "info"
사인할 내용에 대한 부가 설명이 있는 장소 ( 예: URL )
n -p "provider"
시스템 내의 암호화 시스템 제공자 이름
n -y "type"
시스템 내의 암호화 시스템 제공자 형태
n -ky "keyType"
키의 종류 ( signature | exchange | 정수 ) 중 하나
n -$ "authority"
인증서를 인증한 기관의 종류 ( individual | commercial ) 중 하나
n -a "algorithm"
사인에 이용된 해쉬 알고리즘. ( md5 | sha1 ) 중 하나. 기본값 : md5
n -t "URL"
타임스탬프를 찍어줄 서버의 HTTP주소
n -tr "number"
타임스탬프 서버 접속 실패시 재시도 횟수. 기본은 1회
n -tw "number"
타임스탬프간 간격 (초단위). 기본은 0초
n -j "dllName"
사인에 필요한 부가 특성들을 포함하는 DLL 파일명 ( 예 : 보안 레벨 )
n -jp "param"
DLL파일에 넘길 파라미터
n -c "file"
인코딩된 SPC를 포함한 X.509파일명
n -s "Store"
인증서를 가지고 있는 인증서 보관소명 . 기본은 mystore
n -r "location"
레지스트리 내의 인증서 보관소의 위치 ( localMachine | currentUser )중 하나. 기본은 currentUser
n -sp "policy"
인증서 검증에 필요한 모든 인증서를 포함할 것인가 아니면 SPC보관소에 들어있는 인증서가 나올 때까지 포함할 것인가에 대한 정책. ( chain | spcstore )중 하나. 기본은 spcstore
n -cn "name"
인증서 일반 이름 (별명)
n -x
사인하지 말고 타임스탬프만 받을 것을 명시
7. html 페이지에 다음과 같이 넣는다.
<applet code="org.raytrust.RayApplet.class" width=320 height=270>
<param name=useslibrary value='RaySignTest'>
<param name=useslibraryversion value='1,1,1,1'>
<param name=useslibrarycodebase value='SignedRayApplet.cab'>
</applet>
**** 주의!!!! ****
위의 html 코드에서 음영으로 표시된 부분들은 적절하게 바꾸어줘야 한다.
첫번째의 경우 정확하게 사용한 패키지명을 적어주면 된다.
두번째의 경우 dubuild.exe 명령 사용시 /D 옵션으로 주었던 friendlyname과 일치해야 한다.
셋번째의 경우 dubuild.exe 명령 사용시 /V 옵션으로 주었던 version과 일치해야 한다.
네번째의 경우 dubuild.exe 명령 사용시 이용했던 cab 파일 이름과 일치해야 한다.
8. 위와 같이 하면, 클라이언트가 연결 되었을 때 윈도우가 뜨면서 인증할 것인지를 물어 봅니다. 여기서, YES를 해주면 모든 권한을 가지게 된다.
일부의 권한만을 주기 위해서는 프로그램 내부에서 다음과 같이 해 주면 된다.
if (Class.forName("com.ms.security.PolicyEngine")!=null) {
PolicyEngine.assertPermission(PermissionID.FILEIO);
}
위의 예제 중에서 다음 부분에 여러 가지 권한들을 부여할 수 있다.
PolicyEngine.assertPermission(PermissionID.???????);
”???????” 부분은 다음과 같은 ID가 올 수 있습니다.
1. SYSTEM
2. FILEIO
3. NETIO
4. THREAD
5. PROPERTY
6. EXEC
7. REFLECTION
8. PRINTING
9. SECURITY
10. REGISTRY
11. CLIENTSTORE
12. UI
13. SYSSTREAMS
14. USERFILEIO
15. MULTIMEDIA
l 배치 파일의 내용
1: makecert -sk RayCertification -n "CN=Raytrust Org." RayCertification.cer
2: cert2spc RayCertification.cer RayCertification.spc
3: dubuild SignedRayApplet.cab . /D "RaySignTest" /I *.class /V 1,1,1,1
4: signcode -j javasign.dll -jp LowX -spc RayCertification.spc
-k RayCertification SignedRayApplet.cab
출처 : Tong - taehoe님의 보안통
댓글 0
번호 | 제목 | sitelink1 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
공지 | [계속 추가중] SBOM 용어 정의 | 황제낙엽 | 2025.04.10 | 52 | |
공지 | [계속 추가중] Keycloak 용어 및 설정 옵션 정의 | 황제낙엽 | 2024.02.02 | 631 | |
13 | [Copilot] javax.crypto 패키지를 사용하여 암호화, 복호화 하는 방법 | 황제낙엽 | 2024.06.07 | 96 | |
12 | Apache Log4j 2 보안 업데이트 권고 | https://www.boho.or.kr/data/secNoticeVie...ence=36389 | 황제낙엽 | 2021.12.13 | 134 |
11 | OpenSSL사용방법 메모, RSA암호의 최대 사이즈, JCA/JCE가이드 | 황제낙엽 | 2007.09.27 | 173 | |
10 | Java Cryptography Extension (JCE) 개요 | 황제낙엽 | 2007.09.27 | 345 | |
9 | Java에서 암호화하고 C++에서 복호화하는 방법 | 황제낙엽 | 2007.09.27 | 378 | |
8 | 비밀키를 Keytool에서 취급할 수 있는 형식으로 변환방법 | http://java-house.jp/ml/archive/j-h-b/051472.html | 황제낙엽 | 2007.09.27 | 229 |
7 | 공개키 암호화의 수학적 알고리즘과 자바 구현 | 황제낙엽 | 2007.09.22 | 207 | |
6 | RSA 암호화 알고리즘을 구현한 자바예제 (산술계산) | 황제낙엽 | 2007.09.17 | 326 | |
5 |
RSA 암호화 프로그램 예제 (BigInteger 이용)
![]() | 황제낙엽 | 2007.09.08 | 257 | |
4 | 해쉬를 이용한 패스워드 로그인 | 황제낙엽 | 2007.09.05 | 111 | |
» |
Java 보안과 암호화 (개론)
![]() | 황제낙엽 | 2007.09.05 | 117 | |
2 | RSA 공개키 암호화 방식 (java.security, javax.crypto, au.net.aba.crypto.provider 패키지 이용) | 황제낙엽 | 2007.09.05 | 279 | |
1 | 자바 암호화 기법 - MD5를 이용한 해쉬키 생성 (Hash) | 황제낙엽 | 2007.09.01 | 316 |