일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- chatGPT's answer
- python
- Java
- oracle
- jpa
- flet
- spring integration
- 리눅스
- GPT-4's answer
- kotlin
- 코틀린
- 자바
- NIO
- 유닉스
- spring data jpa
- 웹 크롤링
- write by GPT-4
- 역학
- 인프라
- 소프트웨어공학
- 자바암호
- 파이썬
- 시스템
- write by chatGPT
- 자바네트워크
- Database
- 데이터베이스
- android
- 고전역학
- JVM
- Today
- Total
기억을 지배하는 기록
자바을 이용한 암호학 - 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 인증서 객체를 생성한다.
'오래된글 > 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 |