当前位置: 首页 > 面试题库 >

如何获得Java中受信任的根证书的列表?

微生承业
2023-03-14
问题内容

我希望能够以编程方式在Java应用程序中访问所有受信任的根证书。

我当时在看密钥库接口,但我希望获得JRE隐式的受信任根列表。

这可以在任何地方访问吗?


问题答案:

有一个示例显示了如何获取一组根证书,并通过它们进行遍历,这称为在密钥存储区中列出最受信任的证书颁发机构(CA)。这是经过稍微修改的版本,可打印出每个证书(在Windows
Vista上测试)。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.PKIXParameters;
import java.security.cert.TrustAnchor;
import java.security.cert.X509Certificate;
import java.util.Iterator;


public class Main {

    public static void main(String[] args) {
        try {
            // Load the JDK's cacerts keystore file
            String filename = System.getProperty("java.home") + "/lib/security/cacerts".replace('/', File.separatorChar);
            FileInputStream is = new FileInputStream(filename);
            KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
            String password = "changeit";
            keystore.load(is, password.toCharArray());

            // This class retrieves the most-trusted CAs from the keystore
            PKIXParameters params = new PKIXParameters(keystore);

            // Get the set of trust anchors, which contain the most-trusted CA certificates
            Iterator it = params.getTrustAnchors().iterator();
            while( it.hasNext() ) {
                TrustAnchor ta = (TrustAnchor)it.next();
                // Get certificate
                X509Certificate cert = ta.getTrustedCert();
                System.out.println(cert);
            }
        } catch (CertificateException e) {
        } catch (KeyStoreException e) {
        } catch (NoSuchAlgorithmException e) {
        } catch (InvalidAlgorithmParameterException e) {
        } catch (IOException e) {
        } 
    }
}


 类似资料:
  • 局域网IP地址怎么生成受信任的SSL证书?比如启明星辰的设备ip地址证书就是受信任的。

  • 我正试图使用Gradle在Ubuntu服务器上构建我的Android项目。 在我的Windows 10 PC上使用Android Studio进行构建工作正常 但是,使用或失败,输出如下: 在我的研究中,我只发现了两个类似的问题,两个答案都不适合我: Paul Lammertsma-gradlew.bat(和gradlew)SSLHandShakeExc0019 这个错误非常相似,但没有真正的解决

  • 问题内容: 我正在尝试编写一个使用javax.mail API发送邮件的SSL客户端。我遇到的问题是服务器请求我使用SSL,但是服务器还配置了非标准SSL证书。我发现的网页说我需要将证书安装到信任库中。我不想这样做(我没有必要的权限。) 有没有办法让Java忽略证书错误并接受它? 失败了,有没有办法让信任库在我的程序中是本地的,而不是在整个JVM中都安装? 问题答案: 您需要创建一个伪造的Trus

  • 我试图用JUnit实现一些Selenium2WebDriver测试。有关硒的文件。org和web让我感到困惑,因为它似乎在seleniumrc和Webdriver之间来回跳跃。另外,我的Java不是很强。几年前我上过几门课,但没怎么用。我想让JUnit测试在无头CI服务器上运行,并让Firefox通过使用Webdriver在远程客户端系统上运行。 根据我收集的信息,我可以使用以下代码在本地系统上打

  • 为此,我使用以下命令将。cer文件导入到jks文件中。(密码和密码一样,提示要求接受证书,我给y,然后说证书加到keystore了) keytool-importcert-file xyz.cer-keystore test.jks-alias“testsp” 然后我使用这个jks文件创建凭据,如下所示。 谁能指导我解决这个问题吗?

  • 问题内容: 我需要与远程服务器创建Https连接,然后检索并验证证书。 我已经建立好连接: 但似乎方法未由类型定义。 那么,如何检索服务器证书链?我的理解是应该返回一个对象数组,并且该类具有可用于询问证书的方法。 我需要验证: 证书有效且受信任, 根据证书序列号检查“证书吊销列表分发点” 确保它没有过期, 检查证书中的URL是否与另一个URL(我已经检索到)匹配。 我迷路了,非常感谢您的帮助! 问