如何从 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 个证书的信任库。