keytool –import

Download Report

Transcript keytool –import

Key and Certificate Management
Using Keystores
CS & AI Lab
2006-08-21
서대교
2006-08-21
1
Contents
KeyStore Nested Classes and Interfaces
The PKCS #12 Format
The Keytool
Jarsigning and Java Policy
2006-08-21
2
KeyStore Nested Classes and
Interfaces
Nested Class

클래스를 따로 선언하고 정의하기에는 간단하고 특정 클래스와 밀접
한 관계를 갖는 경우, 혹은 클래스로 정의해야 되지만 다른 클래스에
서는 사용하지 않고 특정 클래스 하나에서만 사용하는 경우, 특정 클
래스 내부에 중첩된 클래스로 생성
KeyStore




The
The
The
The
2006-08-21
KeyStore.ProtectionParameter Interface
KeyStore.Entry Interface
KeyStore.LoadStoreParameter Interface
KeyStore.Builder class
3
KeyStore Nested Classes and
Interfaces
KeyStore.ProtectionParameter Interface

KeyStore 의 ProtectionParameter 를 위한 마커 인터페이스
ProtectionParameter 에 포함된 정보에 의해 KeyStore 내용이 보호

KeyStore.CallbackHandlerProtection





CallbackHandler 받아서 새로운 CallbackHandlerProtection을 구축
getCallbackHandler()
KeyStore.PasswordProtection
Password 파라미터를 받아서 ProtectionParameter 객체에 포함



getPassword()
destory()
isDestoryed()
2006-08-21
4
KeyStore Nested Classes and
Interfaces
KeyStore.Entry Interface

KeyStore 종류에 대한 마커 인터페이스

KeyStore.getEntry()


KeyStore.setEntry()


Alias 에 일치하는 keystore 를 반환
Alias 의 이름으로 keystore 를 저장
KeyStore.entryInstanceOf()

Alias 와 keystore.entry 클래스가 동일하면 true, 아니면 false
2006-08-21
5
KeyStore Nested Classes and
Interfaces
KeyStore.Entry 를 구현하여 KeyStore 클래스에 중첩

KeyStore.PrivateKeyEntry





KeyStore.SecretKeyEntry



개인키로 entry 를 만들고 chain 에 대응
getCertificate()
getCertificateChain()
getPrivateKey()
비밀키로 entry 를 생성
getSecretKey()
KeyStore.TrustedCertificateEntry


신뢰할 수 있는 Certificate으로 TrustedCertificate 을 생성
getTrustedCertificate()
2006-08-21
6
2006-08-21
7
2006-08-21
8
The KeyStore.Builder Class
KeyStore 객체의 인스턴스화와 초기화에 필요한 정보를 캡슐화

KeyStore.Builder.getKeyStore()


KeyStore.Builder.getProtectionParameter()


KeyStore 반환
Alias 가 사용한 ProtectionParameter 를 반환
KeyStore.Builder.newInstance( keystore , protectionparameter )

주어진 정보를 이용하여 builder 를 생성
The KeyStore.LoadStoreParameter Interface


KeyStore의 load() 와 store() 에 대한 마커인터페이스
getProtectionParameter()

Keystore 의 protectionparameter 를 반환
2006-08-21
9
2006-08-21
10
The PKCS #12 Format
PKCS( Public Key Cryptography Standard )


RSA 사에서 주관하고 있는 공개키 암호를 위한 표준으로 PKCS #1
에서 PKCS #15 까지 존재
비공식 표준 프로토콜
PKCS #12 ( Personal Information Exchange Syntax Standard )



사용자의 개인 정보( Key, Certificate )를 전달하거나 교환하는 방법
을 설명
Privacy mode – password-based encryption( PBE ), public key
encryption
Integrity mode – HMAC based on a password and PBE, digital
signature
2006-08-21
11
The PKCS #12 Format
PFX 의 ASN.1 형식


PFX( Personal inFormation eXchange ) : PKCS#12 표준으로 모든
개인키, 공개키 및 인증서가 포함됨
Binary 형식으로 저장
2006-08-21
12
The PKCS #12 Format
The AuthenticatedSafe type
The SafeBag type
2006-08-21
13
The PKCS #12 Format
PFX
Authenticated
Safe
Safe
Contents
MAC Data
Safe
Contents
Safe Bag
Safe
Contents
Safe Bag
Safe Bag
Key
Attributes
or
Certificate
Attributes
or
Encrypted Key
Attributes
2006-08-21
14
2006-08-21
15
The Keytool
Keytool




KeyStore 를 관리하기 위한 command-line tool
관리자 차원에서 키는 JRE 와 함께 제공되는 keytool 로 관리
키생성, 디지털 인증서 불러오기, 현존하는 키 저장 등 키 관리 시스
템에서 작업
Keytool command options
2006-08-21
16
2006-08-21
17
2006-08-21
18
2006-08-21
19
2006-08-21
20
2006-08-21
21
Jarsigning and Java Policy
The Jarsigner


JAR화일을 sign하고 사인된 jar화일의 서명을 검증
사인( sign )


Jarsigner options jar-file key_entry-alias
검증( verify )

Jarsigner –verify options jar-file
2006-08-21
22
Jarsigning and Java Policy
Java Policy Files

policy configuration을 외부에서 조정할 수 있도록 하는 도구
시스템 정책 파일

시스템에 대한 모든 사용자의 권한을 규제
사용자 정책 파일



홈 디렉토리에 위치
사용자 정책 파일을 이용해서 그 시스템의 모든 사용자에게 주어진
권한 외에 특정한 사용자에게 추가적인 권한을 부가
시스템 정책 파일과 사용자 정책 파일은 결합되어서 효과를 획득
2006-08-21
23
Jarsigning and Java Policy
프로그램 정책 파일



프로그램 정책 파일은 어느 곳에나 위치
java 명령어가 실행될 때나 애플릿 뷰어에 의해서 애플릿이 실행될
때 특별히 이름이 지정
응용프로그램이나 애플릿이 특정한 보안 파일과 같이 실행될 때, 그
정책 파일에 있는 권한은 시스템 보안 파일이나 사용자 보안 파일에
지정된 권한을 대체 프로그램 정책 파일은 프로그램 테스팅과 응용
프로그램이나 애플릿의 인트라넷 배포를 위해서 사용
2006-08-21
24
Q&A
2006-08-21
25
Keytool
관리자 차원에서 키는 JRE와 함께 제공되는
keytool 유틸리티로 관리
키 생성, 디지털 인증서 불러오기, 현존하는
키 저장 등 키 관리 시스템에서 작업
Keytool에는 명령행 인터페이스만 있음
2006-08-21
26
Keytool의 전역 옵션
alias alias
 작업이 적용되는 별명을 지정
 예: -alias sdo, 기본값은 “mykey”
dname distinguishedName
 구분되는 이름 지정

예: -dname “CN=Scott Oaks, OU=JSD, O=Sun Microsystems,
L=NY, S=NY, C=US”
keypass password
 키 저장소를 보호하는데 사용하는 암호를 지정, 최소 6자 이상
keystore filename
 키 저장소가 저장되어 있는 파일을 지정
 기본값은 $Home/.keystore
2006-08-21
27
Keytool의 전역 옵션(계속)
storepass password

특정 엔트리의 개인키를 보호하는 암호
storetype storetype

keytool이 작업하게 될 키 저장소의 타입을 지
정
V

keytool이 현재 하고 있는 작업에 대한 상세한
정보를 출력
2006-08-21
28
Keytool에서 사용 가능한 명령어
키 엔트리 생성
인증서 요청 생성
인증서 불러오기
인증서 엔트리 생성
키 저장소 엔트리 변경
키 저장소 엔트리 삭제
키 저장소 데이터 보기
기타 명령어
넷스케이프 인증서 사용
2006-08-21
29
키 엔트리 생성
Genkey
 키 쌍을 생성하고 그 엔트리를 키 저장소에 추가
 전역 옵션 지원(alias alias, dname DN, keypass keypass,
keystore keystore, storepass storepass, storetype storetype)
 keyalg AlgorithmName : 키 쌍을 생성할 때 주어진 알고리즘을
사용, 기본값은 DSA
 keysize keysize : 주어진 키 크기를 이용해서 키 쌍 생성기를 초
기화, 기본값은 1024
 sigalg signatureAlgorithm : 자체 서명된 인증서를 생성하는데
사용할 서명 알고리즘을 지정, 기본값은 SHA1withDSA
 validity nDays : 자체 서명된 인증서가 유효한 기간을 지정, 기본
값은 90일
2006-08-21
30
키 엔트리 생성(계속)
2006-08-21
31
인증서 요청 생성
생성한 키를 타인에게 보내려면 알려진 인증서 확인
자로부터 인증서를 받아와야 함
인증서 서명 요청(CSR)을 생성
CSR은 특정 별명에 해당하는 구별되는 이름, 공개
키를 포함하고 있으며, 별명의 개인키로 서명
인증서 확인자는 서명을 확인한 후에 공개키를 확인
해 주는 인증서를 배포
2006-08-21
32
인증서 요청 생성(계속)
CSR 생성 명령어
Certreq : 인증서 서명 요청을 생성,
 전역 옵션을 지원(alias alias, keypass keypass, keystore
keystore, storepass storepass, storetype storetype, v)
 sigalg signatureAlgorithm : CSR을 서명할 때 사용, 인증서 확인
자에서 처리할 수 있는 알고리즘으로 서명, 기본값은 별명이 소유
하고 있는 키의 타입에 따라 결정
 File outputFile : CSR을 저장, CSR의 형식은 PKCS#10에 정의,
기본적으로 CSR은 System.out으로 출력
2006-08-21
33
인증서 요청 생성(계속)
–CSR 생성 예
-----BEGIN NEW CERTIFICATE REQUEST----MIIBozCCAQwCAQAwYzELMAkGA1UEBhMCa3IxDjAMBgNVBAgTBXNlb3VsMREwDwYDVQQHEwhub3dv
bi1ndTENMAsGA1UEChMEc251dDELMAkGA1UECxMCY3MxFTATBgNVBAMTDGlteW91bmcgc29uZzCB
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvD2A4rxYn0IsZzsJ7OJZOuFl+Ry9ewy29fc08D5r
o7bpzO7ntoO6RFykgVPBeO0kM302J2CWBD3hr2W86CXEklvdN1R2kqP43eQS/sZJk4l1X4pXrzxR
R0ZJmuS7o+ybF0WLgQlcen46pldiUeTq4PT2YdCAKhPFUVg6TR68rlUCAwEAAaAAMA0GCSqGSIb3
DQEBBAUAA4GBAHZ4ll0pvox349REky6j7frFTJzbQYOqk4xJ1oEpccFMnCAsaBkcjk9mKinBk2Wm
gNSNbLYW772mJzqzRTBjolja+f1xi4lgyyQ3QCt25MueliXB1WTe2oFtW2eyCYVXQnSt2ra0p9ZF
nRToowNpHkER4OOc+e8+5iuyzeGwoBrs
-----END NEW CERTIFICATE REQUEST----2006-08-21
34
인증서 불러오기
Import




새로운 인증서 엔트리를 생성
현존하는 키 엔트리에 해당하는 인증서 불러옴
전역 옵션을 지원 (alias alias, keypass keypass,
keystore keystore, storepass storepass, storetype
storetype, v)
file inputFile : 불러오는 인증서가 포함되어 있는 파
일을 지정, 인증서는 RFC1421 형식


2006-08-21
system.in에서 데이터를 읽어들임
인증서 확인자에서 보낸 인증서 파일에는 인증서 체인이 있
음, 체인의 형식은 넷스케이프 인증서 체인 혹은 PKCS #7
인증서 체인
35
인증서 불러오기(계속)



Noprompt : 인증서를 받아들이지에 대해서 묻지 않
고 항상 설치
Trustcacerts : 인증서 확인자의 믿을 수 있는 인증서
를 읽어들임
키 저장소로 불러오는 예
piccolo% keytool –import –file sdo.cer –alias sdo -trustcacerts
Enter keystore password : ******
Certificate reply was installed in keystore
2006-08-21
36
인증서 엔트리 생성
인증서 엔트리는 항상 존재하는 인증서를 불어오는 방식으로 생성
인증서는 알려진 인증서 확인자의 기초 인증서 혹은 정보를 교환할
타인을 확인해 주는 인증서
Piccolo% keytool –import –alias sdo –file fromsdo.cer
Enter keystroe password: ******
Owner: [email protected], CN=Thawte Freemail Member
Issuer: CN=Personal Freemail RSA 2000.8.30, OU=Certificate Services, O=Thawte, L=Cape Town,
ST=Western Cape, C=ZA
Serial number: 3df48
Valid from: Thu Dec 28 22:18:19 EST 2000 until: Fri Dec 28 22:18:29
EST 2001
Certificate fingerprints:
MD5: BE:E1:5C:………………..72:5A
SHA1: 4F:22:2D…………………………DC:E8:DD:65:F6:45
Trust this certificate? [no]: yes
Certificate was added to keystore
2006-08-21
37
키 저장소 엔트리 변경
키 저장소에서 인증서 엔트리는 변경안됨
필요시 현재있는 엔트리를 삭제하고 새로운 엔트리
를 추가
키 엔트리 안에 있는 데이터를 변경

selfcert : 인증서 체인 변경, CSR 생성



전역 옵션 지원(alias alias, dname DN, keypass keypass,
keystore keystore, storepass storepass, storetype
storetype)
sigalg algorithmName : 자체 서명 인증서의 서명을 생성
validity nDays : 자체 서명된 인증서가 유효한 기간을 지정,
기본값은 90
2006-08-21
38
키 저장소 엔트리 변경(계속)

Keyclone : DN이 변경되기전 엔트리의 사본
생성



전역 옵션 지원(alias alias, keypass keypass,
keystore keystore, storepass storepass,
storetype storetype, v)
dest newAlias : 복사된 엔트리의 새로운 별명을 지
정
new newPassword : 복사된 엔트리의 새로운 암호
지정
2006-08-21
39
키 저장소 엔트리 변경(계속)

Keypasswd : 특정 키 엔트리의 암호 변경


전역 옵션 지원(alias alias, keystore keystore, storepass
storePassword, storetype storetype, keypass
originalPassword)
new newPassword : 복사된 엔트리의 새로운 암호 지정
piccolo% keytool –keypasswd –alias sdo –storetype jceks
2006-08-21
40
키 저장소 엔트리 삭제
키 엔트리 혹은 인증서 엔트리를 삭제하는 명
령어

Delete : 지정된 별명의 엔트리 삭제

전역 옵션 지원(alias alias, keystore keystore,
storepass storepass, storetype storetype,v)
2006-08-21
41
키 저장소 데이터 보기
한 개 이상의 엔트리 출력
 list : 키 저장소의 엔트리 나열






전역 옵션 지원(alias alias, keystore keystore, storepass
storepass, storetype storetype,v)
rfc : RFC 1421 표준으로 보여줌
export :지정한 별명의 인증서를 파일로 저장
전역 옵션 지원(alias alias, keystore keystore, storepass
storepass, storetype storetype,v)
file outputFile : 인증서를 저장할 파일 이름을 지정, 기본적으로
system.out으로 출력
Printcert : 인증서를 출력, 암호 없이 실행 가능

v
file certificateFile : RFC1421 형식의 인증서가 있는 파일 지정, 기
본적으로 systme.in에서 인증서 읽어들임
2006-08-21
42

키 저장소 데이터 보기(계속)
2006-08-21
43
키 저장소 데이터 보기(계속)
2006-08-21
44
기타 명령어
키 저장소의 전역 암호를 변경

storepasswd



전역 옵션 지원(keystore keystore, storepass
storepass, storetype storetype,v)
new newPassword : 키 저장소의 새로운 전역 암호
를 지정
help : keytool의 간단한 사용법을 출력
2006-08-21
45
넷스케이프 인증서 사용
넷스케이프에서 인증서를 저장
 확장자는 .p12
키 저장소를 읽어들임
piccolo% keytool –list –keystore sdocer.p12 –storetype pkcs12
Enter keystore password : ******
Keystore type: pkcs12
Keystore provider: SunJSSE
Your keystore contains 1 entry:
Scott oak’s verisign, inc. id, Sat Dec 30 18:39:54 EST 2000, keyEntry,
Certificate fingerprint(MD5): 4D:09:1……….FB:87:F8
인증서를 저장하고 불러옴
2006-08-21
46