Akashic Records

자바을 이용한 암호학 - 7 본문

오래된글/Java

자바을 이용한 암호학 - 7

Andrew's Akashic Records 2018. 4. 7. 23:27
728x90

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 인증서 객체를 생성한다.


728x90

'오래된글 > Java' 카테고리의 다른 글

자바을 이용한 암호학 - 9  (0) 2018.04.07
자바을 이용한 암호학 - 8  (0) 2018.04.07
자바을 이용한 암호학 - 6  (0) 2018.04.07
자바을 이용한 암호학 - 5  (0) 2018.04.07
자바을 이용한 암호학 - 4  (0) 2018.04.07
Comments