Keystore là một repository chứa các khóa bí mật, các chứng chỉ và các khóa đối xứng. Mỗi dòng trong keystore sẽ có một alias để định danh.

Chúng ta sẽ dùng tool keytool được cài đặt cùng với JDK để quản lý keystore.

Tạo mới một keystore chứa một cặp khóa RSA:

keytool -genkeypair \
		-keyalg RSA \
		-keysize 2048 \
		-validity 365 \
		-alias aliasname \
		-keypass keypassword \
		-keystore keystore.jks \
		-storepass keystorepassword

Giải thích câu lệnh trên:

  • -genkeypair: tạo cặp khóa bất đối xứng
  • -keyalg: thuật toán của cặp khóa
  • -keysize: kích thước khóa (đơn vị bit)
  • -validity: thời hạn sử dụng của khóa (đơn vị ngày)
  • -alias: tên của entry ở trong keystore
  • -keypass: password cho alias
  • -keystore: tên của file chứa keystore
  • -storepass: password cho toàn bộ keystore

Tạo CSR từ khóa riêng tư có sẵn:

keytool -certreq \
        -alias aliasname \
        -file aliasname.csr \
        -keystore keystore.jks

Tạo self-signed certificate ở trong keystore mới:

keytool -genkey \
        -alias aliasname \
        -keyalg RSA \
        -validity 365 \
        -keystore keystore.jks

Importing and Exporting

Import certificate đã được ký vào keystore:

keytool -importcert \
        -trustcacerts \
        -alias aliasname \
        -file aliasname.crt \
        -keystore keystore.jks

Export certificate dưới định dạng DER:

keytool -exportcert \
        -alias aliasname \
        -file aliasname.der \
        -keystore keystore.jks

Viewing Keystore Entries

Xem keystore:

keytool -list \
		-keystore keystore.jks

Kết quả có thể là:

Keystore type: PKCS12
Keystore provider: SUN
 
Your keystore contains 1 entry
 
aliasname, Jan 30, 2024, PrivateKeyEntry,
Certificate fingerprint (SHA-256): C2:20:C3:EA:FA:AD:61:8A:59:DC:54:57:9B:F3:EC:3C:EB:CD:60:AD:F6:FF:AB:10:FA:2B:E9:AA:75:38:52:DA

Xem thông tin chứng chỉ trong file chứng chỉ:

keytool -printcert \
        -file aliasname.crt

Kết quả có thể là:

Owner: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
Issuer: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
Serial number: 3c81cb7f867ce157
Valid from: Tue Jan 30 14:23:36 ICT 2024 until: Wed Jan 29 14:23:36 ICT 2025
Certificate fingerprints:
	 SHA1: 4F:DF:D6:01:9B:9A:5F:A9:31:D0:61:DE:FE:17:8D:02:D0:D3:85:AC
	 SHA256: C2:20:C3:EA:FA:AD:61:8A:59:DC:54:57:9B:F3:EC:3C:EB:CD:60:AD:F6:FF:AB:10:FA:2B:E9:AA:75:38:52:DA
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
 
Extensions:
 
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 6D C7 5D CE 93 32 69 B3   14 63 14 64 D6 70 2E EA  m.]..2i..c.d.p..
0010: 6B CD AC 5B                                        k..[
]
]

Modifying Keystore

Đổi password của keystore:

keytool -storepasswd \
        -keystore keystore.jks

Xóa một alias ở trong keystore:

keytool -delete \
		-alias aliasname \
		-keystore keystore.jks

Đổi tên alias:

keytool -changealias \
        -alias aliasname \
        -destalias newaliasname \
        -keystore keystore.jks

Resources