상세 컨텐츠

본문 제목

2020.12.24 keytool 유틸리티를 사용하여 인증서 생성

보안/java

by MustThanks 2020. 12. 24. 14:14

본문

반응형

docs.oracle.com/cd/E19159-01/820-4605/ablra/index.html 참고 할 수 있는 site

 

 

java jdk에 포함된 keytool 유틸리티를 사용하여 인증서 생성


keytool의 command

 

keytool
Key and Certificate Management Tool
Commands:
-certreq Generates a certificate request
-changealias Changes an entry's alias
-delete Deletes an entry
-exportcert Exports certificate
-genkeypair Generates a key pair
-genseckey Generates a secret key
-gencert Generates certificate from a certificate request
-importcert Imports a certificate or a certificate chain
-importkeystore Imports one or all entries from another keystore
-keypasswd Changes the key password of an entry
-list Lists entries in a keystore
-printcert Prints the content of a certificate
-printcertreq Prints the content of a certificate request
-printcrl Prints the content of a CRL file
-storepasswd Changes the store password of a keystore
Use "keytool -command_name -help" for usage of command_name

 

###############################################################

 

-genkeypair 명령

  공개키와 개인키 두 개의 키쌍을 생성

 

keytool -genkeypair -help
keytool -genkeypair [OPTION]...
Generates a key pair
Options:
-alias alias name of the entry to process
-keyalg key algorithm name
-keysize key bit size
-sigalg signature algorithm name
-destalias destination alias
-dname distinguished name
-startdate certificate validity start date/time
-ext X.509 extension
-validity validity number of days
-keypass key password
-keystore keystore name
-storepass keystore password
-storetype keystore type
-providername provider name
-providerclass provider class name
-providerarg provider argument
-providerpath provider classpath
-v verbose output
-protected password through protected mechanism
Use "keytool -help" for all available commands

 

###############################################################

 

-keystore 옵션
  keystore 이용하여 파일의 경로를 지정하지 않으면 사용자의 홈디렉터리에서 .keystore 파일을 검색

  JKS 는 기본 옵션 -storetype jks 생략 가능

 

file이름을 myKey_jks로 생성

keytool -genkeypair -keystore myKey_jks -storetype jks

 

Enter keystore password: ===암호입력해야함
Re-enter new password: ===암호입력해야함
What is your first and last name?
[Unknown]: === enter만 입력해도 됨
What is the name of your organizational unit?
[Unknown]: === enter만 입력해도 됨
What is the name of your organization?
[Unknown]: === enter만 입력해도 됨
What is the name of your City or Locality?
[Unknown]: === enter만 입력해도 됨
What is the name of your State or Province?
[Unknown]: === enter만 입력해도 됨
What is the two-letter country code for this unit?
[Unknown]: === enter만 입력해도 됨
Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
[no]: yes === NO로 하면 계속 반복되니 yes로 해야합니다.


###############################################################


PKCS12 타입의 인증서를 생성하고자 할때는 -storetype pkcs12 을 이용

keytool -genkeypair -keystore pkcs12_keystore -storetype pkcs12

 

###############################################################

 

KeyStore 내 인증서 목록을 출력

C:\Temp\tools\jdk-11\bin\keytool -list -keystore jks_keystore

C:\Temp\tools\jdk-11\keystore 디렉터리

jks_keystore

pkcs12_keystore

 

C:\Temp\tools\jdk-11\keystore>C:\Temp\tools\jdk-11\bin\keytool -list -keystore jks_keystore
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

mykey, 2020. 12. 24., PrivateKeyEntry,
Certificate fingerprint (SHA-256): 97:0E:EE:F5:F6:3A:59:72:B5:61:B8:4F:8A:22:84:21:24:AE:65:E1:58:56:B8:CC:F4:64:9E:09:F6:50:6B:47

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore jks_keystore -destkeystore jks_keystore -deststoretype pkcs12".

C:\Temp\tools\jdk-11\keystore>

 

###############################################################

 

JRE 에 포함되어 있는 기본 인증기관(ca) 인증서 파일인 jre/lib/security/cacerts/cacerts에 있는 목록을 확인하는 내용

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

 

###############################################################


인증서 Import

-importcert 명령
인증서를 임포트
인증기관 인증서라면 -trustcacerts 옵션을 추가

 

keytool -importcert -keystore myKey_jks -storepass changeit -trustcacerts -alias rootca -file "rootca.der"

 

###############################################################

Private Key import

JDK 6 이상부터 PKCS#12 으로 된 인증서와 개인키를 keystore 에 import 하는게 가능
openssl 로 pkcs#12 를 만들고 pkcs#12 를 KeyStore 로 임포트 가능

keytool은 PKCS#12 이 아닌 것은 외부에서 생성된 private key 를 keystore 에 import 하는 방법을 제공하지 않음


1. 외부에서 개인키(myCert.key)와 인증서(myCert.crt) 생성

2. openssl 에서는 인증서와 개인키가 DER 방식으로 encoding 되어 있으면
pkcs12 로 변환이 안되니 PEM 형식으로 변환

edit로 파일을 오픈 시
PEM 텍스트로 표시
DER 바이너리로 표시

2-1. 인증서 PEM 으로 변환
openssl x509 -inform der -in myCert.der -out myCert.crt

2-2. 개인키 변환
openssl rsa -inform der -in myCert.key.der -out myCert.key

3. openssl 이용하여 PKCS12 생성
openssl pkcs12 -export -in myCert.crt -inkey myCert.key -out myKeyPKCS.p12 -name "PKI alias"

4. 3에서 Enter
Export Password: === pkcs12 암호 입력(예시: ㅁ!=3+ㅊ=AZz)

5. keytool 이용 PKCS12 파일을 KeyStore 로 변환
keytool -importkeystore -deststorepass changeit -destkeypass changeit -destkeystore myJKS_keystore.jks -srckeystore myKeyPKCS.p12 -srcstoretype PKCS12 -srcstorepass ㅁ!=3+ㅊ=AZz -alias "PKI alias"

 

###############################################################

 

alias 변경

keytool -changealias -keystore myJKS_keystore.jks -alias OldAlias -destalias NewAlias


###############################################################

 

keystore 암호 변경

keytool -storepasswd -keystore jks_keystore

Enter keystore password:
New keystore password:
Re-enter new keystore password:

 

'보안 > java' 카테고리의 다른 글

2020.12.24 STS SunCertPathBuilderException shooting  (0) 2020.12.24
2020.12.24 Keystore  (0) 2020.12.24
java 1.8 open jdk and spring sts tools  (0) 2020.12.23
2020.12.22 Spring boot in java jdk (connect java jdk)  (0) 2020.12.22
nio server socket  (0) 2020.09.25

관련글 더보기

댓글 영역