簡體   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