Java 如何获取网站的根CA?
使用以下代码时,根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
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信任库。