Java KeyStore (JKS)

 

SSL 암호화를 위해 쓰이는 key 들을 모아놓은 파일이다.

파일 extension 으로는 .jks 또는 .keystore 을 사용할 수 있으며 default로는 .jks 가 사용된다.

JDK 내 jre/lib/security/cacerts 디렉토리에 제공되는 기본 CA keystore를 사용하거나 별도의 keystore를 사용할 수 있다. 

JDK 에서는 keystore를 조작할 수 있는 keytool 을 제공하는데, 이것을 사용해서 keystore를 생성할 수 있다.

JKS 포멧으로 KeyStore 생성하기

 

  1. keystore 생성을 시작한다.

    keytool -keystore clientkeystore -genkey -alias client
  2. 아래와 같이 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):

     

  3. CA에게 certificate request를 보낼 때 사용될 수 있는 CSR을 생성한다. (client.csr 은 CSR을 PEM 포멧으로 저장한 파일임)

    keytool -keystore clientkeystore -certreq -alias client -keyalg rsa -file client.csr

    [다음 스탭] certificate이 CA의 certificate 과 연동되어 있다면 여기서 4번 스탭으로 가고, 아닐 경우 5번 스탭으로 갈 것.

  4. certificate 을 import 한다. (client certificate 이 client.cer 에 있고, CA의 certificate이 CARoot.cer에 있다고 가정)

    keytool -import -keystore clientkeystore -file client.cer -alias client
  5. client의 certificate 과 CA의 certificate을 연동하기 위해 CA의 certificate을 KeyStore로 import한다.

    keytool -import -keystore clientkeystore -file CARoot.cer -alias theCARoot
  6. 이미 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