是否有任何简单的方法(最好是从命令行界面)列出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服务器上的叶子证书才有一个主题替代名称。因此,此代码仅适用于包含叶子/服务器证书的信任存储。