繁体   English   中英

是否可以在不打开套接字的情况下使用Java代码测试双向信任库是否匹配?

[英]Is it possible to test that two-way truststores match using Java code without opening a socket?

假设我有一种情况,我想使用Java上的密钥库和信任库进行双向信任连接。

想象一下我正在使用以下代码:

import java.io.FileInputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.KeyStore;

import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocketFactory;

public class MainClass {
  public static void main(String args[]) throws Exception {
    SSLContext context;
    KeyManagerFactory kmf;
    KeyStore ks;
    char[] storepass = "newpass".toCharArray();
    char[] keypass = "wshr.ut".toCharArray();
    String storename = "newstore";

    context = SSLContext.getInstance("TLS");
    kmf = KeyManagerFactory.getInstance("SunX509");
    FileInputStream fin = new FileInputStream(storename);
    ks = KeyStore.getInstance("JKS");
    ks.load(fin, storepass);

    kmf.init(ks, keypass);
    context.init(kmf.getKeyManagers(), null, null);
    SSLServerSocketFactory ssf = context.getServerSocketFactory();

    ServerSocket ss = ssf.createServerSocket(5432);
    while (true) {
      Socket s = ss.accept();
      PrintStream out = new PrintStream(s.getOutputStream());
      out.println("Hi");
      out.close();
      s.close();
    }
  }
}

现在假设此代码曾经可以工作-但是有人混淆了不同服务器的证书,现在我们不知道哪个客户端证书(针对哪个框)与服务器信任库匹配。

我想在不打开套接字的情况下使用Java代码验证服务器和客户端密钥库以及信任库是否匹配。

我的问题是: 是否可以在不打开套接字的情况下使用Java代码测试双向信任库是否匹配? 您可以修改链接的Java代码来实现此目的吗?

假设:

  • 我正在寻找一些类似的代码

boolean trusted = keyStore1.checkTrust(trustStore2);

当然可以,但是只能通过复制或几乎复制所有创建SSL套接字时执行的代码来实现。 关键是,当您应该测试由SSLSocket和朋友执行的代码时,除了测试自己的代码外,您什么都不会测试。 所以这毫无意义。 这不是有用的测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM