Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取网站的根CA?_Java_Ssl_Truststore - Fatal编程技术网

Java 如何获取网站的根CA?

Java 如何获取网站的根CA?,java,ssl,truststore,Java,Ssl,Truststore,使用以下代码时,根CA证书将不会列出 URL destinationURL = new URL("https://google.com"); HttpsURLConnection conn = (HttpsURLConnection) destinationURL.openConnection(); conn.connect(); Certificate[] certs = conn.getServerCertificates(); 如何获取根CA(此处为Geo

使用以下代码时,根CA证书将不会列出

URL destinationURL = new URL("https://google.com");    
HttpsURLConnection conn = (HttpsURLConnection) destinationURL.openConnection();
        conn.connect();    
Certificate[] certs = conn.getServerCertificates();
如何获取根CA(此处为GeoTrust全局CA)。我是否应该使用
CertPathBuilder

这是我找到的用于构建认证路径的示例代码

// Create the selector that specifies the starting certificate
X509CertSelector selector = new X509CertSelector();
selector.setCertificate(cert);

// Create the trust anchors (set of root CA certificates)
Set<TrustAnchor> trustAnchors = new HashSet<TrustAnchor>();
for (X509Certificate trustedRootCert : trustedRootCerts) {
     trustAnchors.add(new TrustAnchor(trustedRootCert, null));
}

// Configure the PKIX certificate builder algorithm parameters
PKIXBuilderParameters pkixParams = new PKIXBuilderParameters(
            trustAnchors, selector);

// Disable CRL checks (this is done manually as additional step)
pkixParams.setRevocationEnabled(false);

// Specify a list of intermediate certificates
CertStore intermediateCertStore = CertStore.getInstance("Collection",
            new CollectionCertStoreParameters(intermediateCerts));
pkixParams.addCertStore(intermediateCertStore);

// Build and verify the certification chain
CertPathBuilder builder = CertPathBuilder.getInstance("PKIX");
PKIXCertPathBuilderResult result = (PKIXCertPathBuilderResult) builder
            .build(pkixParams);
//创建指定起始证书的选择器
X509CertSelector=新的X509CertSelector();
选择器。setCertificate(证书);
//创建信任锚(根CA证书集)
Set trustAnchors=newhashset();
对于(X509Certificate trustedRootCerts:trustedRootCerts){
添加(新信任锚(trustedRootCert,null));
}
//配置PKIX证书生成器算法参数
PKIXBuilderParameters pkixParams=新PKIXBuilderParameters(
信任锚、选择器);
//禁用CRL检查(这是作为附加步骤手动完成的)
pkixParams.setRevocationEnabled(false);
//指定中间证书的列表
CertStore intermediateCertStore=CertStore.getInstance(“集合”,
新的CollectionCertStoreParameters(intermediateCerts));
pkixParams.addCertStore(intermediateCertStore);
//建立并验证认证链
CertPathBuilder=CertPathBuilder.getInstance(“PKIX”);
PKIXCertPathBuilderResult结果=(PKIXCertPathBuilderResult)生成器
.build(pkixParams);
但是如何获得
受信任的rootcerts
中间副本
?还是有完全不同的方式

编辑


问题解答如何获取受信任的根CA,我想
intermediateCerts
conn.getServerCertificates()。应该在选择器
selector.setCertificate(cert)中设置什么证书

除非是新版本且您使用的是旧版本的Java,否则
GeoTrust Global CA
证书应该已经存在于您的
cacerts
文件中

您的屏幕截图看起来像一个显示证书路径的Web浏览器,如果您信任它,您可以从那里保存证书

请注意,Web服务器不应该发送根证书,因此服务器的操作是正确的

Certificate[] certs = conn.getServerCertificates();

此数组的顺序已定义。您信任的服务器证书现在位于
certs[certs.length-1
。请注意,它不一定是根证书。如果您需要,您可能必须使用
CertPathBuilder

当您尝试代码时会发生什么?您得到了什么?什么不起作用?您还尝试了什么?@JimGarrison 1。我没有运行代码,因为我不知道如何获得
trustedRootCerts
intermediateCerts
。2.重复的问题确实告诉我们如何获取受信任的根证书,但它并不能完全回答这个问题。3.我甚至不确定
CertPathBuilder
是否是获取ssl证书根CA的唯一方法,我想知道是否还有其他简单的方法。你说“根证书”作为如果只有一个。谷歌IA2的发行人GeoTrust有自己的根,但也连接到一个旧的Equifax根,这几乎是但尚未过时的,并且是由实际的谷歌服务器暗示的——但这只是一个提示,relier可以忽略。两个链和两个根现在都有效。你称哪一个为“根”?我说的“根”是指tru安装在操作系统中的sted CA证书(当您在浏览器中检查“查看证书”时显示在顶部的证书)。我不知道还会有更多:)或者如果他使用的是openjdk,在这种情况下,它通常(至少IME)使用平台信任库,而不是Java特定的/Sun Oracle信任库。