Java KeyStore (JKS)
SSL 암호화를 위해 쓰이는 key 들을 모아놓은 파일이다.
파일 extension 으로는 .jks 또는 .keystore 을 사용할 수 있으며 default로는 .jks 가 사용된다.
JDK 내 jre/lib/security/cacerts 디렉토리에 제공되는 기본 CA keystore를 사용하거나 별도의 keystore를 사용할 수 있다.
JDK 에서는 keystore를 조작할 수 있는 keytool 을 제공하는데, 이것을 사용해서 keystore를 생성할 수 있다.
JKS 포멧으로 KeyStore 생성하기
-
keystore 생성을 시작한다.
keytool -keystore clientkeystore -genkey -alias client
-
아래와 같이 CSR 을 위해 필요한 정보를 입력한다.
주의 : “first and last name” 질문에는 FQDN (Fully Qualified DomainName) 을 입력해야 함. key 패스워드를 KeyStore의 패스워드와 같게 하기 위해서 마지막에 RETURN (엔터키)를 눌러야 함.
Enter keystore password: javacaps What is your first and last name? [Unknown]: development.sun.com What is the name of your organizational unit? [Unknown]: Development what is the name of your organization? [Unknown]: Sun What is the name of your City or Locality? [Unknown]: Monrovia What is the name of your State or Province? [Unknown]: California What is the two-letter country code for this unit? [Unknown]: US Is<CN=development.sun.com, OU=Development, O=Sun, L=Monrovia, ST=California, C=US> correct? [no]: yes Enter key password for <client> (RETURN if same as keystore password):
-
CA에게 certificate request를 보낼 때 사용될 수 있는 CSR을 생성한다. (client.csr 은 CSR을 PEM 포멧으로 저장한 파일임)
keytool -keystore clientkeystore -certreq -alias client -keyalg rsa -file client.csr
[다음 스탭] certificate이 CA의 certificate 과 연동되어 있다면 여기서 4번 스탭으로 가고, 아닐 경우 5번 스탭으로 갈 것.
-
certificate 을 import 한다. (client certificate 이 client.cer 에 있고, CA의 certificate이 CARoot.cer에 있다고 가정)
keytool -import -keystore clientkeystore -file client.cer -alias client
-
client의 certificate 과 CA의 certificate을 연동하기 위해 CA의 certificate을 KeyStore로 import한다.
keytool -import -keystore clientkeystore -file CARoot.cer -alias theCARoot
-
이미 CA와 연동된 client certificate을 import 한다. 여기서 생성된 clientkeystore 가 client의 private key 를 보관한다.
keytool -import -keystore clientkeystore -file client.cer -alias client
출처 : https://docs.oracle.com/cd/E19509-01/820-3503/ggfgo/index.html