檢查金鑰庫檔案中的憑證名稱和別名
瀏覽人數:735最近更新:
1. 概述
在本教程中,我們將學習使用 Java KeyStore API 和keytool
實用程式檢查 Java 金鑰庫檔案中的憑證名稱和別名。
2. 設定
在描述這兩種方法之前,讓我們使用keytool
實用程式建立一個金鑰庫檔案:
$ keytool -genkeypair -keyalg rsa -alias baeldung -storepass storepw@1 -keystore my-keystore.jks
請注意,在使用 bash CLI 時,密鑰庫密碼中包含“ $'
字元可能會導致一些意外行為,因為它被解釋為環境變數。
接下來,讓我們提供額外的必需資訊:
What is your first and last name?
[Unknown]: my-cn.localhost
What is the name of your organizational unit?
[Unknown]: Java Devs
What is the name of your organization?
[Unknown]: Baeldung
What is the name of your City or Locality?
[Unknown]: London
What is the name of your State or Province?
[Unknown]: Greater London
What is the two-letter country code for this unit?
[Unknown]: GB
Is CN=my-cn.localhost, OU=Java Devs, O=Baeldung, L=London, ST=Greater London, C=GB correct?
[no]: yes
Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 90 days
for: CN=my-cn.localhost, OU=Java Devs, O=Baeldung, L=London, ST=Greater London, C=GB
最後,我們驗證一下my-keystore.jks
檔案是否已產生:
$ ls | grep my-keystore.jks
my-keystore.jks
現在,我們準備好繼續使用兩種方法來檢查產生的金鑰庫檔案中的憑證名稱和別名。
3. 使用 Java KeyStore API 檢查憑證名稱和別名
此方法使用 Java KeyStore API,適用於 X509 憑證。首先,讓我們讀取密鑰庫檔案:
KeyStore readKeyStore() throws Exception {
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(getClass().getResourceAsStream(KEYSTORE_FILE), KEYSTORE_PWD.toCharArray());
return keystore;
}
接下來,讓我們驗證金鑰庫中存在具有符合別名和名稱的憑證時的場景:
@Test
void whenCheckingAliasAndName_thenMatchIsFound() throws Exception {
KeyStore keystore = readKeyStore();
assertThat(keystore.containsAlias("baeldung")).isTrue();
X509Certificate x509Certificate =
(X509Certificate) keystore.getCertificate("baeldung");
String ownerName = x509Certificate.getSubjectX500Principal().getName();
assertThat(ownerName.contains("my-cn.localhost")).isTrue();
}
最後,讓我們驗證金鑰庫中不存在具有給定別名或名稱的憑證時的場景:
@Test
void whenCheckingAliasAndName_thenNameIsNotFound() throws Exception {
KeyStore keystore = readKeyStore();
assertThat(keystore.containsAlias("baeldung")).isTrue();
X509Certificate x509Certificate =
(X509Certificate) keystore.getCertificate("baeldung");
String ownerName = x509Certificate.getSubjectX500Principal().getName();
assertThat(ownerName.contains("commonName1")).isFalse();
}
@Test
void whenCheckingAliasAndName_thenAliasIsNotFound() throws Exception {
KeyStore keystore = readKeyStore();
assertThat(keystore.containsAlias("alias1")).isFalse();
}
4. 使用keytool
實用程式檢查憑證名稱和別名
第二種方法使用keytool
實用程式和alias
參數:
$ keytool -list -v -alias baeldung -keystore my-keystore.jks -storepass storepw@1 | grep my-cn.localhost
Owner: CN=my-cn.localhost, OU=Java Devs, O=Baeldung, L=London, ST=Greater London, C=GB
Issuer: CN=my-cn.localhost, OU=Java Devs, O=Baeldung, L=London, ST=Greater London, C=GB
請注意,我們也使用grep
命令來搜尋證書名稱。當未找到憑證別名和名稱的符合項目時,上述命令將傳回空結果。
5. 結論
在本教程中,我們學習如何使用兩種方法檢查 Java 金鑰庫檔案中的憑證名稱和別名。第一種方法使用 Java KeyStore API,而後者則使用keytool
實用程式。當使用多個金鑰庫檔案時,這些方法非常有用,我們需要找到特定別名和名稱的金鑰庫檔案。
像往常一樣,完整的程式碼可以在 GitHub 上找到。
本作品係原創或者翻譯,採用《署名-非商業性使用-禁止演繹4.0國際》許可協議