시스템 관리자 및 개발자가 알아야 할 17가지 Keytool 명령 예

Keytool: 암호화 키 및 인증서 관리 도구

Keytool은 암호화 키와 인증서를 관리하고 저장하는 데 사용되는 강력한 명령줄 유틸리티입니다. Java가 시스템에 설치되어 있다면, 이 도구를 통해 다양한 작업을 수행할 수 있습니다. CA 인증서를 가져오거나, 기존 인증서를 나열하고, 자체 서명된 인증서를 생성하는 것은 물론, 암호 및 공개/개인 키를 저장하는 데에도 활용할 수 있습니다.

복잡하게 느껴지시나요? 걱정하지 마세요. 이 글을 통해 keytool 명령을 쉽게 이해하실 수 있도록 자세히 설명해 드리겠습니다.

여기서는 Linux 환경에서 명령을 테스트하고 예시를 통해 좀 더 자세히 알아보겠습니다. 물론 keytool 명령은 Windows 및 macOS에서도 사용할 수 있습니다.

Keytool 명령이란?

Keytool은 키 및 인증서를 관리하는 데 특화된 유틸리티입니다. 주로 서비스에 대한 접근을 확인하고 인증하는 데 사용되는 개인/공용 키 쌍을 저장할 수 있게 해줍니다.

이 글의 제목에서 알 수 있듯이, keytool 명령은 주로 시스템 관리자와 개발자가 사용합니다. 하지만 일반 사용자도 keytool을 활용하여 인증, 암호화 및 복호화를 위한 암호와 비밀 키를 저장할 수 있습니다. 그러니 궁금하시다면, 시스템에서 직접 사용해 보시는 것도 좋은 경험이 될 것입니다.

만약 암호화 키 개념이 처음이시라면, keytool 명령을 시도하기 전에 데이터 암호화 관련 글을 먼저 읽어보시기를 권장합니다. 추가적으로 OpenSSL 명령 예제를 살펴보면, 두 도구의 차이점과 각 상황에 맞는 활용법을 이해하는 데 도움이 될 것입니다.

자체 서명된 인증서 생성

keytool -genkeypair -alias <alias> -keypass <keypass> -validity <validity> -storepass <storepass>

구매한 SSL 인증서와는 달리, 자체 서명된 인증서는 개발 및 테스트 환경에서 보안 연결을 설정하는 목적으로 주로 사용됩니다. 위의 keytool 명령 구문을 사용하여 쉽게 생성할 수 있으며, 다음은 그 예시입니다.

keytool -genkeypair -alias koreantech.org -keypass passforkeystore -validity 365 -storepass passforkeystore

별칭은 원하는 이름으로 설정할 수 있습니다. 여기서는 예시로 “koreantech.org”를 사용했습니다. 유효 기간을 사용자 정의하고, “passforkeystore” 부분을 키 저장소 암호로 대체할 수 있습니다.

PKCS12 키 저장소는 단일 암호만 지원하지만, Java 환경 외에서도 편리하게 사용할 수 있는 키 저장소 유형입니다.

키 저장소와 인증서에 각각 다른 암호를 사용하고 싶다면, keytool 명령에 특정 인터페이스를 사용하도록 명시적으로 지정할 수 있습니다. 자세한 내용은 공식 문서를 참조하시기 바랍니다.

인증서 생성을 진행하면 진위 여부를 확인하기 위한 추가 정보를 요청합니다. 화면에 다음과 같이 표시될 것입니다.

What is your first and last name?
  [Unknown]:  Ankush
What is the name of your organizational unit?
  [Unknown]:  koreantech.org
What is the name of your organization?
  [Unknown]:  koreantech.org
What is the name of your City or Locality?
  [Unknown]:  Bhubaneswar
What is the name of your State or Province?
  [Unknown]:  Odisha
What is the two-letter country code for this unit?
  [Unknown]:  91
Is CN=Ankush, OU=koreantech.org, O=koreantech.org, L=Bhubaneswar, ST=Odisha, C=91 correct?
  [no]:  yes

Java 키 저장소 및 키 쌍 생성

keytool -genkeypair -keyalg RSA -keysize 2048 -keystore keystore.jks -alias geekflarejava -validity 3650

Java 키 저장소 생성 및 인증서 가져오기

먼저 유효한 인증서가 있는지 확인하거나, 이전에 생성한 인증서를 준비해야 합니다. 인증서가 준비되면, 이를 가져와 Java Keystore를 생성할 수 있습니다.

keytool -importcert -file test.crt -keystore truststore.jks -alias koreantech.org

이름이 있는 기본 키 저장소에 키 쌍 생성

다음 명령을 사용하면 “ca”와 같은 이름으로 키 쌍을 빠르게 생성할 수 있습니다.

keytool -alias ca -dname CN=CA -genkeypair

서명된 인증서 체인 만들기

만약 “ca” 및 “ca1″이라는 키 쌍이 있다고 가정해 보겠습니다. 다음 명령을 사용하여 “ca”가 “ca1″에 서명하는 서명된 인증서 체인을 만들 수 있습니다.

keytool -alias ca1 -certreq
keytool -alias ca -gencert -ext san=dns:ca1
keytool -alias ca1 -importcert

“ca1″이 “ca2″에 서명하는 방식으로, “ca1″과 “ca2″라는 추가 키 쌍을 사용하여 체인을 더 늘릴 수도 있습니다.

인증서 가져오기

만약 사용 가능한 파일에서 인증서를 가져와야 한다면, 다음 명령을 사용할 수 있습니다.

keystool -import -alias koreantech.org -file geekflareserver.cer

기존 키 저장소에 대한 인증서 서명 요청(CSR) 생성

이미 Keystore를 생성했다면, 다음 명령을 사용하여 CSR을 생성할 수 있습니다.

keytool -certreq -keyalg rsa -keystore keystore.jks -alias server -file koreantech.org.csr

Java 키 저장소에 저장된 인증서 나열

키 저장소에는 여러 인증서 항목이 존재할 수 있습니다. “keystore.jks” 데이터베이스에서 인증서 목록을 확인하려면, 다음 명령을 입력하면 됩니다.

keytool -v -list -keystore keystore.jks

명령을 실행하면 다음과 유사한 결과가 출력됩니다.

keytool -v -list -keystore keystore.jks
Enter keystore password:  
Keystore type: PKCS12
Keystore provider: SUN

Your keystore contains 2 entries

Alias name: geekflarecert
Creation date: 16-Nov-2022
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Ankush, OU=Geek, O=koreantech.org, L=Bhubaneswar, ST=od, C=91
Issuer: CN=Ankush, OU=Geek, O=koreantech.org, L=Bhubaneswar, ST=od, C=91
Serial number: a0b9a99
Valid from: Wed Nov 16 09:42:37 IST 2022 until: Sat Nov 13 09:42:37 IST 2032
Certificate fingerprints:
	 SHA1: 23:7C:65:A7:A6:84:18:F8:45:04:92:DF:D4:BB:0F:91:6D:A5:C5:BE
	 SHA256: C0:25:ED:B8:CF:1A:E6:E1:C5:75:A8:10:8F:CD:BE:42:26:96:9C:9A:FA:74:65:07:71:06:9A:2C:F5:80:FE:7F
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3

단일 인증서의 내용 확인

생성된 인증서의 상세 정보를 확인하고 싶다면, 다음 명령을 사용하세요.

keytool -v -printcert -file server.crt

Java 키 저장소에서 인증서 보기

Keystore 데이터베이스에 저장된 모든 인증서 목록을 확인하려면 다음 명령을 실행합니다.

keytool -v -list -keystore keystore.jks

별칭과 키 저장소를 사용하여 키 저장소 보기

키 저장소를 생성할 때 설정한 별칭 이름을 사용하여 특정 키 저장소를 확인하려면 다음 명령을 입력합니다.

keytool -v -list -keystore keystore.jks -alias geekflareserver

KeyStore의 인증서 나열

기본 Keystore에 저장된 인증서를 확인하고 싶다면, 다음 명령을 사용합니다.

keytool -list -storepass passforkeystore

이때, “passforkeystore” 부분을 실제 설정한 암호로 바꿔야 합니다.

인증서 정보 보기

특정 인증서의 세부 정보를 확인해야 할 때는, Keystore 데이터베이스를 지정하지 않고 해당 별칭을 사용하여 정보를 얻을 수 있습니다.

다음 명령을 사용하면 됩니다.

keytool -list -v -alias koreantech.org -storepass passforkeystore

PEM 형식의 인증서 보기

PEM은 인증서와 암호화 키를 저장하는 데 가장 널리 사용되는 형식 중 하나입니다. PEM 형식으로 인증서를 확인하려면 다음 명령을 사용합니다.

keytool -v -printcert -file koreantech.org.crt -rfc

Java 키 저장소 비밀번호 변경

이미 생성한 Java Keystore의 암호를 변경하고 싶다면 다음 명령을 사용하세요.

keytool -delete -alias koreantech.org -keystore keystore.jks

Java 키 저장소에서 인증서 삭제

Java Keystore와 삭제하려는 인증서의 별칭을 지정하여 인증서를 삭제할 수 있습니다. 다음은 그 예시입니다.

keytool -delete -alias koreantech.org -keystore keystore.jks

명령 탐색 및 도움 받기

keytool 명령은 다양한 작업을 수행하기 위한 수많은 인수와 확장을 포함하고 있습니다. 사용 목적에 따라 모두 사용해야 할 수도 있고, 일부만 사용해도 될 수 있습니다.

명령 옵션에 대한 자세한 정보를 얻고 싶다면 언제든지 다음 명령어를 입력할 수 있습니다.

keytool -help

Linux 터미널을 사용한다면 다음 명령으로 man(매뉴얼) 페이지를 읽는 것이 좋습니다.

man keytool

man 명령어를 통해 keytool 명령에 대한 자세한 정보를 얻을 수 있습니다. keytool에 대해 가능한 모든 것을 배워보세요!

마무리

파일 경로와 기타 사용자 지정 옵션은 사용 중인 플랫폼에 따라 약간 다를 수 있습니다. 표준화된 옵션에 대한 자세한 내용은 Oracle 문서를 참조하시기 바랍니다.

Keytool은 매우 다양한 작업에 활용할 수 있는 유용한 도구입니다. 직접 사용해보시고, 이 도구를 통해 무엇을 할 수 있는지 확인해 보세요!

시스템을 최적으로 유지하고 관리하기 위해, 몇 가지 Linux 명령어를 추가로 탐색해 보는 것도 좋은 방법입니다.