相关疑难解决方法(0)

在java中使用自定义信任库以及默认信任库

我正在用Java编写一个应用程序,它通过HTTPS连接到两个Web服务器.一个通过默认的信任链获得证书,另一个使用自签名证书.当然,连接到第一台服务器是开箱即用的,而在我使用该服务器的证书创建一个trustStore之前,使用自签名证书连接到服务器不起作用.但是,与默认可信服务器的连接不再起作用,因为显然我创建自己的默认trustStore会被忽略.

我找到的一个解决方案是将证书从默认的trustStore添加到我自己的.但是,我不喜欢这个解决方案,因为它需要我继续管理那个trustStore.(我不能假设这些证书在可预见的未来仍然是静态的,对吧?)

除此之外,我发现了两个有着类似问题的5岁线程:

在JVM中注册多个密钥库

如何为Java服务器提供多个SSL证书

他们都深入到Java SSL基础架构.我希望到现在有一​​个更方便的解决方案,我可以在我的代码的安全审查中轻松解释.

java ssl keystore truststore

59
推荐指数
4
解决办法
5万
查看次数

如何将多个信任库路径添加到"java.net.ssl.trustStore"?

我希望我的Java代码在一个密钥库中搜索服务器的CA证书...如果它无法找到特定的证书(我认为只有当我尝试通过LDAP连接到Directory Server时才会知道),它应该是在另一个密钥库中查找证书,我知道它的路径.

我试过这个:

System.setProperty("javax.net.ssl.trustStore", System.getProperty("java.home") + "/lib/security/cacerts" + System.getProperty("path.separator") + path/to/second/keystore);

但它似乎没有用.

只添加一个路径(其中任何一个)都可以工作,即如果找到证书则会像魅力一样运行,否则就会失败.

所以我的问题是:

  1. 是否有方法将多堆密钥库路径添加到javax.net.ssl.trustStore?

  2. 如果不可能我应该如何编写我的代码(我要求算法),以便它在第一次搜索后不会抛出异常而失败?

PS:我对Java不太熟悉.

以下是我的代码的相关部分:

if(useSSL)
{
  try 
  {   
    SSLContext se = SSLContext.getInstance("TLS");
    Security.addProvider(se.getProvider());
  }   
  catch(NoSuchAlgorithmException e) { }

  System.setProperty("javax.net.ssl.trustStore", System.getProperty("java.home") + "/lib/security/cacerts");

  com.org.ldap.LDAPSocketFactory ssf = new LDAPJSSESecureSocketFactory();
  LDAPConnection.setSocketFactory(ssf);
}

try 
{   
  lc = new LDAPConnection();
  lc.connect( ldapServer, ldapPort);
  lc.bind( ldapVersion,  ldapUser, (userInfo[1]).getBytes() );
}
catch (LDAPException le)
{
  le.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

java ssl certificate

12
推荐指数
1
解决办法
2万
查看次数

如何在java SSL客户端应用程序中支持多个TrustStore

在我们的java应用程序中,我们需要使用https协议与SSL上的服务器列表进行通信.要通信的服务器列表将在运行时更改.最初我们没有任何服务器的证书.在运行时,我们将获得新服务器的证书并将公钥证书添加到信任库中; 与服务器的任何新https连接都应使用更新的信任库.

我们认为我们应该使用两个信任库,一个cacerts(默认一个附带jre)和其他包含我们在列表中动态添加/删除的服务器的证书.这将确保我们不修改java的默认TrustStore(cacerts).

请建议如何实现这一目标.此外,有没有办法只为java中的特定线程使用特定的信任存储,以便其他(现有的和新的)线程仍应使用默认的java trueststore(cacerts),并且一个特定的线程将使用特定的信任库服务器.

谢谢,迪帕克

java ssl certificate truststore

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×3

ssl ×3

certificate ×2

truststore ×2

keystore ×1