如何从 Java TrustStore (JKS) 文件中列出唯一的主题备用名称
How to list unique Subject Alternative Names from a Java TrustStore (JKS) file
是否有任何简单的方法(最好是从命令行界面)列出 Java TrustStore (JKS) 文件中所有证书的唯一主题备用名称?
作为 Java 开发人员,一个小的 Java 程序可以解决问题:
public static void main(String[] args) {
String fileName= "website_certs.jks";
char[] password = "".toCharArray();
try {
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(fileName), password);
Set<Object> subjAltNames = Collections.list(ks.aliases()).stream().flatMap(alias -> {
try {
return ((X509Certificate) ks.getCertificate(alias)).getSubjectAlternativeNames().stream();
} catch (Exception e) {
return Stream.empty();
}
}).collect(Collectors.toSet());
subjAltNames.forEach(System.out::println);
} catch (Exception e) {
e.printStackTrace();
}
}
您的问题中唯一奇怪的是,信任库通常包含根或中间 CA 证书。但只有安装在 Web 服务器上的叶证书才具有主题备用名称。因此,此代码仅适用于包含 leaf/server 个证书的信任库。
是否有任何简单的方法(最好是从命令行界面)列出 Java TrustStore (JKS) 文件中所有证书的唯一主题备用名称?
作为 Java 开发人员,一个小的 Java 程序可以解决问题:
public static void main(String[] args) {
String fileName= "website_certs.jks";
char[] password = "".toCharArray();
try {
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(fileName), password);
Set<Object> subjAltNames = Collections.list(ks.aliases()).stream().flatMap(alias -> {
try {
return ((X509Certificate) ks.getCertificate(alias)).getSubjectAlternativeNames().stream();
} catch (Exception e) {
return Stream.empty();
}
}).collect(Collectors.toSet());
subjAltNames.forEach(System.out::println);
} catch (Exception e) {
e.printStackTrace();
}
}
您的问题中唯一奇怪的是,信任库通常包含根或中间 CA 证书。但只有安装在 Web 服务器上的叶证书才具有主题备用名称。因此,此代码仅适用于包含 leaf/server 个证书的信任库。