java keytool 로 Keystore 와 인증서 관리하기 - On this Page 예제

다단 편집 예제 페이지입니다. (원본)

 

개요

Java 는 KeyStore 라는 인터페이스를 통해 Encryption/Decryption 및 Digital Signature 에 사용되는 Private Key, Public Key 와 Certificate 를 추상화하여 제공하고 있다.

keytool 은 Keystore 기반으로 인증서와 키를 관리할 수 있는 커맨드 방식의 유틸리티로 JDK 에 포함되어 있다.

커맨드 방식의 openssl  과 비슷한 용도로 사용할 수 있는  프로그램이라 보면 된다.

사용법

옵션없이 keytool 을 실행하면 다음과 같이 메인 command 를 표시한다.

$ keytool Key and Certificate Management Tool Commands: -certreq Generates a certificate request -changealias Changes an entry's alias

KeyStore Type

keytool 을 사용할 경우 명시적으로 -keystore 옵션으로 키스토어 파일의 경로를 지정하지 않으면 기본적으로 사용자의 홈디렉터리에서 .keystore 파일을 찾게 된다.

keystore 는 여러 가지 타입을 지원하는데 기본적으로는 JKS(Java KeyStore) 라는 타입으로 처리된다.

다음은 jks_keystore 라는 파일 이름으로 JKS 방식의 키스토어를 생성하는 명령어로 JKS 는 기본 옵션이므로 -storetype jks 은 생략 가능하다.

keytool -genkeypair -keystore jks_keystore -storetype jks

인증서와 개인키를 저장하는 또 다른 표준인 PKCS12 타입을 사용할 경우 다음과 같이 -storetype 옵션을 추가하면 된다.

keytool -genkeypair -keystore pkcs12_keystore -storetype pkcs12

Windows 와 Mac OSX 는 OS 에 개인키와 인증서를 저장하는 공간이 따로 있는데 keytool 로 접근이 가능하다. 

Windows-MY 는 사용자의 인증서와 개인키를 저장하는 공간이며 Windows-ROOT 는 신뢰하는 루트 인증서를 저장하는 공간이다. OSX 의 키체인(KeyChain) 에 접근시 KeychainStore 를 타입으로 지정하면 된다. 그외 Bouncy Castle 를 JCE Provider 로 사용할 경우 BKS 타입을 사용할 수 있다.

KeyPair 내 Object 출력

인증서 목록 출력

다음 명령으로 KeyStore 내 인증서 목록을 출력할 수 있다.

$ keytool -list -keystore my-keystore.jks

JRE 에 포함되어 있는 기본 인증기관(ca) 인증서 파일은 jre/lib/security/cacerts/cacerts 파일에 존재한다. 다음 명령은 기본 ca 목록을 출력한다.

$ keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts

암호 변경

Key Store 에 저장된 개인키를 보호하기 위해 key store 자체에 대해서 암호를 걸 수 있고 특정 alias 에 저장된 개인키에도 암호를 걸 수 있다.

keystore 암호 변경

jks_keystore  라는 키스토어  파일의 암호를 변경한다.

$ keytool -storepasswd -keystore jks_keystore Enter keystore password: New keystore password: Re-enter new keystore password:

key 암호 변경

jks_keystore 라는 키스토어 파일내의 mykey 라는 alias 를 가진 개인키의 암호를 변경한다.

$ keytool -keypasswd -alias mykey -keystore jks_keystore Enter keystore password: Enter key password for <mykey> New key password for <mykey>: Re-enter new key password for <mykey>:

 

 

목차

관련 레이블

There are no related labels.

 

더 알아보기