假设我有一个场景,我想在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();
}
}
}
现在假设这段代码曾经工作过 - 但有人混淆了不同服务器的证书,现在我们不知道哪个客户端证书(针对哪个盒子)与服务器信任库匹配。
我想验证服务器和客户端KeyStore和Truststore是否使用Java代码匹配而无需打开套接字。
我的问题是:是否可以在不打开套接字的情况下使用Java代码测试双向信任库是否匹配?您是否可以修改the linked Java code来实现此目的?
假设:
boolean trusted = keyStore1.checkTrust(trustStore2);
答案 0 :(得分:0)
当然可以,但只能通过复制或几乎复制创建SSL套接字时执行的所有代码。关键是当你应该测试由SSLSocket和朋友执行的代码时,除了你自己的代码之外你没有测试任何东西。所以这毫无意义。这不是一个有用的测试。