Download presentation
Presentation is loading. Please wait.
1
Key and Certificate Management Using Keystores
CS & AI Lab 서대교
2
Contents KeyStore Nested Classes and Interfaces The PKCS #12 Format
The Keytool Jarsigning and Java Policy
3
KeyStore Nested Classes and Interfaces
클래스를 따로 선언하고 정의하기에는 간단하고 특정 클래스와 밀접한 관계를 갖는 경우, 혹은 클래스로 정의해야 되지만 다른 클래스에서는 사용하지 않고 특정 클래스 하나에서만 사용하는 경우, 특정 클래스 내부에 중첩된 클래스로 생성 KeyStore The KeyStore.ProtectionParameter Interface The KeyStore.Entry Interface The KeyStore.LoadStoreParameter Interface The KeyStore.Builder class Keystore class 를 위한 몇 개의 중첩된 클래스와 인터페이스를 소개한다. 4개의 그룹으로 나누어 진다 1번 그룹은 keystore.entry 가장많이 사용된다. 2번 그룹은 keystore.protectionparameter Keystore.builder(클래스)와 keystore.loadstoreparameter
4
KeyStore Nested Classes and Interfaces
KeyStore.ProtectionParameter Interface KeyStore 의 ProtectionParameter 를 위한 마커 인터페이스 ProtectionParameter 에 포함된 정보에 의해 KeyStore 내용이 보호 KeyStore.CallbackHandlerProtection CallbackHandler 받아서 새로운 CallbackHandlerProtection을 구축 getCallbackHandler() KeyStore.PasswordProtection Password 파라미터를 받아서 ProtectionParameter 객체에 포함 getPassword() destory() isDestoryed() 패스워드나 인증정보를 가져와서 무결성체크나 암호화에 사용된다 Keystore는 프로텍션파라미터 인터페이스를 구현하는 2개의 클래스를 가진다 Callbackhandler는 javax.의 콜백핸들러와 함께 생성된다. 이것은 getcallbackhandler 메소드 하나만을 가지고 있다.함께생성된 콜백핸들러를 정정하는데 이용가능하다. 콜백핸들러는 handler() 하나의 메소드를 가지고 있는데 이것은 callback 객체를 배열로 가진다 Passwordprotection 은 char[] 를 가지고 패스워드를 생성한다. 마커인터페이스 실제 내용은 없지만 설계상의 또는 개념상의 명확한 의미를 지니게 하는 목적
5
KeyStore Nested Classes and Interfaces
KeyStore.Entry Interface KeyStore 종류에 대한 마커 인터페이스 KeyStore.getEntry() Alias 에 일치하는 keystore 를 반환 KeyStore.setEntry() Alias 의 이름으로 keystore 를 저장 KeyStore.entryInstanceOf() Alias 와 keystore.entry 클래스가 동일하면 true, 아니면 false Keystore 종류에 대한 마커 인터페이스 이다. Privatekey entry, secretkeyentry, trustedcertificateentry Keystore.entry 를 이용하는 메소드가 getentry, setentry, entryinstanceof 입니다 Keystore.entry 를 구현하는 세클래스가 다음장에 나오는 것들입니다.
6
KeyStore Nested Classes and Interfaces
KeyStore.Entry 를 구현하여 KeyStore 클래스에 중첩 KeyStore.PrivateKeyEntry 개인키로 entry 를 만들고 chain 에 대응 getCertificate() getCertificateChain() getPrivateKey() KeyStore.SecretKeyEntry 비밀키로 entry 를 생성 getSecretKey() KeyStore.TrustedCertificateEntry 신뢰할 수 있는 Certificate으로 TrustedCertificate 을 생성 getTrustedCertificate()
9
The KeyStore.Builder Class
KeyStore.Builder.getKeyStore() KeyStore 반환 KeyStore.Builder.getProtectionParameter() Alias 가 사용한 ProtectionParameter 를 반환 KeyStore.Builder.newInstance( keystore , protectionparameter ) 주어진 정보를 이용하여 builder 를 생성 The KeyStore.LoadStoreParameter Interface KeyStore의 load() 와 store() 에 대한 마커인터페이스 getProtectionParameter() Keystore 의 protectionparameter 를 반환 당신은 정보를 묶어 둘수 있다. Keystore를 생성하기 위한 정보 실제 keystore가 필요할때까지 연기할수 있다. 당신이 패스워드를 입력할때 까지 생성을 연기 할수 있다. 이미 만들어진 keystore 객체를 생성하는 것도 가능하게 합니다.
10
지정된 keystore를 캡슐화 하는 새로운 builder를 돌려줍니다. 이 빌더로 부터 getkeystore()를
지정된 keystore를 캡슐화 하는 새로운 builder를 돌려줍니다. 이 빌더로 부터 getkeystore()를 호출하면 keystore
11
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 프라이버시 모드와 인테그리티 모드에 기반을 두고 여러가지 방법으로 사용될수 있다.
12
The PKCS #12 Format PFX 의 ASN.1 형식
PFX( Personal inFormation eXchange ) : PKCS#12 표준으로 모든개인키, 공개키 및 인증서가 포함됨 Binary 형식으로 저장 맥데이타는 PBE 가 integrity 모드로 사용되는 PFX 에서만 나타난다. Iteration 는 디폴트 값은 잘 쓰이지 않는다. 1,000 이상의 값이 될것이다. authSafe contentInfo 에서 contentinfo 는 PKCS7( 서명, Digital Envelope )에서 언급되어있다.
13
The PKCS #12 Format The AuthenticatedSafe type The SafeBag type
Contentinfo 는 data 나 signdata 일것이다. 이것은 BER 인코딩된 AuthenticatedSafe 타입이다. Safecontenttype 형태는 safebag 이 형성한다. 각각의 세이프백은 하나의 정보를 가진다. ( 키, 인증서. Etc ) 각각은 객체의 식별자에 의해 구별가능하다. Pkcs 12 사용자의 개인정보( 키, 인증서 )를 전달하는 방법을 설명한다.
14
The PKCS #12 Format or or PFX Authenticated Safe Safe Contents
Safe Bag Key Attributes or MAC Data Safe Contents Safe Bag Certificate Attributes Safe Contents Safe Bag or PBE가 PFX의 integrity 모드에 사용된다면 MacData 는 존재할것이다. Encrypted Key Attributes
16
The Keytool Keytool KeyStore 를 관리하기 위한 command-line tool
관리자 차원에서 키는 JRE 와 함께 제공되는 keytool 로 관리 키생성, 디지털 인증서 불러오기, 현존하는 키 저장 등 키 관리 시스템에서 작업 Keytool command options Alias mykey 알고리즘 dsa 키사이즈 1024 유효기간 90일
19
2006-08-21 PKCS12-DEF BCPKCS12 List : 키저장소의 엔트리 나열
어떤 이유로, 당신이 PKCS12를 명시한다면 keytool은 SunJSSE를 사용할 것입니다. 나도 왜 이런 문제가 발생하는지는 모르겠지만 바운시 캐슬은 이 문제를 해결할수 있는 방법을 제시한다.
21
Rfc1421 표준 Import 새로운 인증서 엔트리를 생성
22
Jarsigning and Java Policy
The Jarsigner JAR화일을 sign하고 사인된 jar화일의 서명을 검증 사인( sign ) Jarsigner options jar-file key_entry-alias 검증( verify ) Jarsigner –verify options jar-file Jarsigner tool 과 java policy 메커니즘이 있다. 정책 파일에는 세 종류가 있다 : 시스템 정책 파일 : 시스템에 대한 모든 사용자의 권한을 규제한다. 사용자 정책 파일, 사용자 정책 파일은 사용자의 홈 디렉토리에 위치한다. 사용자 정책 파일을 이용해서 그 시스템의 모든 사용자에게 주어진 권한 외에 특정한 사용자에게 추가적인 권한을 줄 수 있다. 시스템 정책 파일과 사용자 정책 파일은 결합되어서 효과를 낸다. 프로그램 정책 파일.
23
Jarsigning and Java Policy
Java Policy Files policy configuration을 외부에서 조정할 수 있도록 하는 도구 시스템 정책 파일 시스템에 대한 모든 사용자의 권한을 규제 사용자 정책 파일 홈 디렉토리에 위치 사용자 정책 파일을 이용해서 그 시스템의 모든 사용자에게 주어진 권한 외에 특정한 사용자에게 추가적인 권한을 부가 시스템 정책 파일과 사용자 정책 파일은 결합되어서 효과를 획득
24
Jarsigning and Java Policy
프로그램 정책 파일 프로그램 정책 파일은 어느 곳에나 위치 java 명령어가 실행될 때나 애플릿 뷰어에 의해서 애플릿이 실행될 때 특별히 이름이 지정 응용프로그램이나 애플릿이 특정한 보안 파일과 같이 실행될 때, 그 정책 파일에 있는 권한은 시스템 보안 파일이나 사용자 보안 파일에 지정된 권한을 대체 프로그램 정책 파일은 프로그램 테스팅과 응용프로그램이나 애플릿의 인트라넷 배포를 위해서 사용
25
Q & A
26
Keytool 관리자 차원에서 키는 JRE와 함께 제공되는 keytool 유틸리티로 관리
키 생성, 디지털 인증서 불러오기, 현존하는 키 저장 등 키 관리 시스템에서 작업 Keytool에는 명령행 인터페이스만 있음
27
Keytool의 전역 옵션 alias alias dname distinguishedName keypass password
작업이 적용되는 별명을 지정 예: -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
28
Keytool의 전역 옵션(계속) storepass password storetype storetype V
특정 엔트리의 개인키를 보호하는 암호 storetype storetype keytool이 작업하게 될 키 저장소의 타입을 지정 V keytool이 현재 하고 있는 작업에 대한 상세한 정보를 출력
29
Keytool에서 사용 가능한 명령어 키 엔트리 생성 인증서 요청 생성 인증서 불러오기 인증서 엔트리 생성
키 저장소 엔트리 변경 키 저장소 엔트리 삭제 키 저장소 데이터 보기 기타 명령어 넷스케이프 인증서 사용
30
키 엔트리 생성 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일
31
키 엔트리 생성(계속)
32
인증서 요청 생성 생성한 키를 타인에게 보내려면 알려진 인증서 확인자로부터 인증서를 받아와야 함
인증서 서명 요청(CSR)을 생성 CSR은 특정 별명에 해당하는 구별되는 이름, 공개키를 포함하고 있으며, 별명의 개인키로 서명 인증서 확인자는 서명을 확인한 후에 공개키를 확인해 주는 인증서를 배포
33
인증서 요청 생성(계속) 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으로 출력
34
인증서 요청 생성(계속) CSR 생성 예 -----BEGIN NEW CERTIFICATE REQUEST-----
MIIBozCCAQwCAQAwYzELMAkGA1UEBhMCa3IxDjAMBgNVBAgTBXNlb3VsMREwDwYDVQQHEwhub3dv bi1ndTENMAsGA1UEChMEc251dDELMAkGA1UECxMCY3MxFTATBgNVBAMTDGlteW91bmcgc29uZzCB nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvD2A4rxYn0IsZzsJ7OJZOuFl+Ry9ewy29fc08D5r o7bpzO7ntoO6RFykgVPBeO0kM302J2CWBD3hr2W86CXEklvdN1R2kqP43eQS/sZJk4l1X4pXrzxR R0ZJmuS7o+ybF0WLgQlcen46pldiUeTq4PT2YdCAKhPFUVg6TR68rlUCAwEAAaAAMA0GCSqGSIb3 DQEBBAUAA4GBAHZ4ll0pvox349REky6j7frFTJzbQYOqk4xJ1oEpccFMnCAsaBkcjk9mKinBk2Wm gNSNbLYW772mJzqzRTBjolja+f1xi4lgyyQ3QCt25MueliXB1WTe2oFtW2eyCYVXQnSt2ra0p9ZF nRToowNpHkER4OOc+e8+5iuyzeGwoBrs -----END NEW CERTIFICATE REQUEST-----
35
인증서 불러오기 Import 새로운 인증서 엔트리를 생성 현존하는 키 엔트리에 해당하는 인증서 불러옴
전역 옵션을 지원 (alias alias, keypass keypass, keystore keystore, storepass storepass, storetype storetype, v) file inputFile : 불러오는 인증서가 포함되어 있는 파일을 지정, 인증서는 RFC1421 형식 system.in에서 데이터를 읽어들임 인증서 확인자에서 보낸 인증서 파일에는 인증서 체인이 있음, 체인의 형식은 넷스케이프 인증서 체인 혹은 PKCS #7 인증서 체인
36
인증서 불러오기(계속) Noprompt : 인증서를 받아들이지에 대해서 묻지 않고 항상 설치
Trustcacerts : 인증서 확인자의 믿을 수 있는 인증서를 읽어들임 키 저장소로 불러오는 예 piccolo% keytool –import –file sdo.cer –alias sdo -trustcacerts Enter keystore password : ****** Certificate reply was installed in keystore
37
인증서 엔트리 생성 인증서 엔트리는 항상 존재하는 인증서를 불어오는 방식으로 생성
인증서는 알려진 인증서 확인자의 기초 인증서 혹은 정보를 교환할 타인을 확인해 주는 인증서 Piccolo% keytool –import –alias sdo –file fromsdo.cer Enter keystroe password: ****** Owner: CN=Thawte Fre Member Issuer: CN=Personal Fre RSA , 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
38
키 저장소 엔트리 변경 키 저장소에서 인증서 엔트리는 변경안됨 필요시 현재있는 엔트리를 삭제하고 새로운 엔트리를 추가
키 엔트리 안에 있는 데이터를 변경 selfcert : 인증서 체인 변경, CSR 생성 전역 옵션 지원(alias alias, dname DN, keypass keypass, keystore keystore, storepass storepass, storetype storetype) sigalg algorithmName : 자체 서명 인증서의 서명을 생성 validity nDays : 자체 서명된 인증서가 유효한 기간을 지정, 기본값은 90
39
키 저장소 엔트리 변경(계속) Keyclone : DN이 변경되기전 엔트리의 사본 생성
전역 옵션 지원(alias alias, keypass keypass, keystore keystore, storepass storepass, storetype storetype, v) dest newAlias : 복사된 엔트리의 새로운 별명을 지정 new newPassword : 복사된 엔트리의 새로운 암호 지정
40
키 저장소 엔트리 변경(계속) Keypasswd : 특정 키 엔트리의 암호 변경
전역 옵션 지원(alias alias, keystore keystore, storepass storePassword, storetype storetype, keypass originalPassword) new newPassword : 복사된 엔트리의 새로운 암호 지정 piccolo% keytool –keypasswd –alias sdo –storetype jceks
41
키 저장소 엔트리 삭제 키 엔트리 혹은 인증서 엔트리를 삭제하는 명령어 Delete : 지정된 별명의 엔트리 삭제
전역 옵션 지원(alias alias, keystore keystore, storepass storepass, storetype storetype,v)
42
키 저장소 데이터 보기 한 개 이상의 엔트리 출력 list : 키 저장소의 엔트리 나열
전역 옵션 지원(alias alias, keystore keystore, storepass storepass, storetype storetype,v) rfc : RFC 1421 표준으로 보여줌 export :지정한 별명의 인증서를 파일로 저장 file outputFile : 인증서를 저장할 파일 이름을 지정, 기본적으로 system.out으로 출력 Printcert : 인증서를 출력, 암호 없이 실행 가능 v file certificateFile : RFC1421 형식의 인증서가 있는 파일 지정, 기본적으로 systme.in에서 인증서 읽어들임
43
키 저장소 데이터 보기(계속)
44
키 저장소 데이터 보기(계속)
45
기타 명령어 키 저장소의 전역 암호를 변경 storepasswd
전역 옵션 지원(keystore keystore, storepass storepass, storetype storetype,v) new newPassword : 키 저장소의 새로운 전역 암호를 지정 help : keytool의 간단한 사용법을 출력
46
넷스케이프 인증서 사용 넷스케이프에서 인증서를 저장 키 저장소를 읽어들임 인증서를 저장하고 불러옴 확장자는 .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 인증서를 저장하고 불러옴
Similar presentations