验证X509证书V3的过程

时间:2014-02-16 04:34:28

标签: java certificate x509certificate

我需要创建一个程序,通过验证签名来验证任何给定的X509证书版本3是否可信。为了做到这一点,我需要能够知道签署了给定证书的发行人的公钥。我知道如何使用 getIssuerDN()方法输出发布者信息,但我不知道的是当我只知道其名称时如何获取发行者的公钥!< / p>

到目前为止,我唯一的解决方案是维护网络上最常见的证书颁发机构的公钥列表,然后只搜索它。虽然这个解决方案是可行的,但对我来说似乎不切实际。

因此,还有另一个想法是直接从证书中获取Issuer的公钥,然后完成验证过程吗?

以下是我获取发卡人姓名但不是公钥的代码。

    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());

1 个答案:

答案 0 :(得分:1)

  

我需要创建一个程序,通过验证签名来验证任何给定的X509证书版本3是否可信。为了做到这一点,我需要能够知道已签署该证书的发行人的公钥。

没有。无论是你还是给你任务的人都不懂PKI。我们的想法是,已经信任某些发行人,因为已经拥有他们的证书,例如在与JRE一起分发的cacerts文件中,因此它们的公钥。如果您要求验证的证书可追溯到其中一个发件人,它会通过所有其他验证,您可以信任它。仅通过公钥进行验证是不够的。