2011년 6월 13일 월요일

자바을 이용한 암호학(자바보안 개정판:키 관리) - 7

PLT 3.5 KeyStore 클래스의 관리 패러다임
KeyStore
키 저장소는 키와 증명소의 컬렉션이다. 키 저장소는 보통 파일의 형태로 저장되지만 데이터베이스나 LDAP 서버 같은 형태로 저장될 수 있다. java.security.KeyStore 클래스를 사용하여 키 저장소를 사용할 수 있다.

java.security.KeyStore
주요Method :
- public static final KeyStore getInstance (String type) : 지정된 타입의 스토어 오브젝트를 작성합니다. KeyStore ks = KeyStore.getInstance("JKS"); à JKS는 Java KeyStore로 기본적인 저장 구현입니다. 파일 위치는 USER_HOME/.keystore 입니다.
- public static final KeyStore getInstance (String type, String provider) : 지정된 프로바이더로부터, 지정된 스토어 타입의 스토어 오브젝트를 작성합니다. KeyStore ks = KeyStore.getInstance("JKS", "SUN");
- public final void load (InputStream stream, char[] password) : 지정된 입력 Stream로부터 스토어를 로드합니다.
- public final void store (OutputStream stream, char[] password) : 지정된 출력 Stream에 스토어를 저장하고, 지정된 패스워드로 완전성을 보호합니다
키 저장소에는 다음 두 종류의 엔트리가 저장됩니다.
1. 신뢰된 인증서 : 신뢰되는 인증서, Verisign이나 CA에서 다른 인증서를 검증하기 위해 사용되는 인증서. serCertificateEntry()를 사용하여 추가할 수 있다.
2. 키 : 전자 서명이나 암호화에 사용되는 개인 혹은 대칭키. 키 저장소안의 키는 반드시 인증서와 연결되어 있어야 한다. setKeyEntry()를 사용하여 추가할 수 있다.

KeyTool
JDK와 함께 제공되는 실행 어플리케이션으로, 키저장소를 다루고 인증서를 생성할수 있게 해준다.
옵션
내용
-certreq
CA 서명된 인증서를 얻는데 사용될 인증서 요청을 생성한다. Verisign인증서를 신청할 때 입력하는 Request 폼이다.
-delete
키 저장소의 엔트리를 지운다.
-export
키 저장소로부터 DER 인코딩을 해서 내보낸다. –rfc 옵션을 사용하면 BASE64 인코딩이 추가된다. 개인 키는 내보낼 수 없다.
-genkey
키 쌍과 스스로 서명한 인증서를 생성한다. -keyalg옵션으로 알고리즘을 명시할 수 있다.(-keyalg RSA)
-help
키툴을 사용할 때 가능한 모든 옵션을 보여준다.
-identitydb
JDK1.1 신원 데이터베이스를 자바2스타일로 바꾼다.
-import
키저장소로 새로운 인증서를 들여온다. 이미 있는 alias에 새로운 인증서와 서명된 인증서를 추가할 때 유용하다.
-keyclone
키저장소의 엔트리를 복사한다.
-keypasswd
특정한 alias를 보호하는 패스워드를 바꾼다.
-list
데이터베이스 내의 모든 alias를 보여준다.
-printcert
인증서를 보여준다.
-selfcert
스스로 서명된 인증서를 생성한다.
-storepasswd
키저장소의 패스워드를 바꾼다.


인증서 생성하기
“keytool –genkey –alias hurukku”
“CN=Lee Yun Chang, OU=Team, O=Love, L=Kwang Jin, ST=Seoul, C=KO”
생성된 인증서 확인
“keytool –v –list”

인증서 정보확인
1. .cer파일로 저장된 인증서 파일의 정보를 확인에 사용되는 API는 다음과 같다.
java.security.cert.CertificateFactory
java.security.cert.Certificate
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
FileInputStream fis = new FileInputStream (filepath);
Certificate cert = certFactory.generateCertificate(fis);
fis.close();
System.out.println(cert)


filepath는 X.509 형태로 출력된 .cer파일 위치를 넣는다.
2. keystore에서 인증서 정보 확인
package com.crypto;
import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.cert.Certificate;
public class PrintCertFromKeyStore {
public static void main (String[] args) throws Exception {
if (args.length != 2) {
System.err.println("Usage: java PrintCertFromKeyStore alias password");
System.exit(1);
}
// The default keystore is in the user's home directory.
String userHome = System.getProperty("user.home");
String keystoreFilename = userHome + File.separator + ".keystore";
char[] password = args[1].toCharArray();
String alias = args[0];
// Open the keystore file
FileInputStream fIn = new FileInputStream(keystoreFilename);
KeyStore keystore = KeyStore.getInstance("JKS");
// Load the keystore from that file.
keystore.load(fIn, password);
// Fetch the certificate.
Certificate cert = keystore.getCertificate(alias);
// Display general information about the certificate
System.out.println(cert);
}
}


위의 예제는 KeyStore 파일에 저장된 인증서(alias이름)을 보여준다. KeyStore에 인증서가 없으면 KeyTool로 인증서를 추가 해줘야 한다.

keystore.load(fIn, password);
Certificate cert = keystore.getCertificate(alias);
위 코드는 Keystore객체를 로드하고 해당 Alias 인증서 객체를 생성한다.

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...