我需要创建一个程序,通过验证签名来验证任何给定的 X509 证书版本 3 是否受信任。为了做到这一点,我需要能够知道签署该给定证书的颁发者的公钥。我知道如何使用getIssuerDN()方法输出发行者信息,但我不知道的是当我只知道它的名字时如何获取发行者的公钥!
到目前为止,我唯一的解决方案是维护网络上最常见的证书颁发机构的公钥列表,然后搜索它。虽然这个解决方案是可行的,但对我来说似乎不切实际。
因此,是否有另一种想法可以直接从证书中获取颁发者的公钥,然后完成验证过程?
这是我用于获取颁发者名称而不是其公钥的代码。
URL url = new URL("https link here!");
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.connect();
Certificate cert[] = con.getServerCertificates();
X509Certificate x509cert = (X509Certificate) cert[0];
String[] st= x509cert.getIssuerDN().toString().split(",");
System.out.println("Issuer CN is: "+st[0].toString());
我需要创建一个程序,通过验证签名来验证任何给定的 X509 证书版本 3 是否受信任。为了做到这一点,我需要能够知道签署该给定证书的颁发者的公钥。
不。无论是你还是给你作业的人都不懂PKI。这个想法是,您已经信任某些颁发者,因为他们已经拥有他们的证书,例如在与 JRE 一起分发的 cacerts 文件中,因此他们的公钥。如果要求您验证的证书可追溯到这些颁发者之一,并且它通过了所有其他验证,则可以信任它。仅通过公钥进行验证是不够的。