gpt4 book ai didi

java - 即使客户端未发送证书,SSL 套接字连接仍能正常工作?

转载 作者:行者123 更新时间:2023-11-29 05:15:20 24 4
gpt4 key购买 nike

我对使用 Java 的密码学还很陌生。我必须构建一个程序,在进行任何数据通信之前交换证书。我正在使用 sslSockets 构建基本的客户端-服务器程序,我没有使用 HTTP/S,这只是为了获得额外的安全性。 (想知道 Socket 和 SSLSocket 之间的区别..这是否意味着所有内容都会自动加密?)

这是我更新的服务器代码:

public class SSLServerExample {
final static String pathToStores = "C:/Users/XXX/Desktop/sslserverclientprogram";
final static String keyStoreFile = "keystore.jks";
final static String passwd = "changeit";

final static int theServerPort = 8443;

static boolean debug = false;



public static void main(String args[]) throws Exception {

String trustFilename = pathToStores + "/" + keyStoreFile;
// System.out.println("Verifying KeyStore File of Client..");

System.setProperty("javax.net.ssl.keyStore", trustFilename);
System.setProperty("javax.net.ssl.keyStorePassword", passwd);
if (debug)
System.setProperty("javax.net.debug", "all");
System.out.println("Setting up SSL parameters");

// Initialize socket connection
SSLServerSocketFactory sslssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslServerSocket = (SSLServerSocket)sslssf.createServerSocket(theServerPort);
System.out.println("Server Started..Waiting for clients");
sslServerSocket.setNeedClientAuth(true);
SSLSocket sslSocket = (SSLSocket)sslServerSocket.accept();
//sslSocket.startHandshake();
System.out.println("Client Connected!");

InputStream sslIS = sslSocket.getInputStream();

OutputStream sslOS = sslSocket.getOutputStream();
sslServerSocket.setNeedClientAuth(true);

final int RSAKeySize = 1024;
final String newline = "\n";

Key pubKey = null;
Key privKey = null;
boolean flag = sslSocket.getNeedClientAuth();
System.out.println("Flag value: "+ flag);

即使我将其设置为 true 并且客户端发送的数据由服务器解密但没有相互验证,但该标志的结果为 False。

我错过了什么吗?

请帮忙。

PS:我的客户端代码:

public class SSLClientExample {
final static String pathToStores = "C:/Users/XXX/Desktop/sslserverclientprogram";
final static String trustStoreFile = "cacerts.jks";
final static String passwd = "changeit";
final static String INPUT_FILE = "E:/workspace/input.txt";
final static String theServerName = "localhost";
final static int theServerPort = 8443;

static boolean debug = false;

public static void main(String args[]) throws Exception {

String trustFilename = pathToStores + "/" + trustStoreFile;
System.out.println("Validating KeyStore file of Server..");

System.setProperty("javax.net.ssl.trustStore", trustFilename);
System.setProperty("javax.net.ssl.trustStorePassword", passwd);
if (debug)
System.setProperty("javax.net.debug", "all");


SSLSocketFactory sslssf = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslSocket = (SSLSocket)sslssf.createSocket(theServerName, 8443);
System.out.println("Connected to Server!");

最佳答案

在接受传入的客户端连接之前,您必须调用 sslServerSocket.setNeedClientAuth(true);。在建立连接后修改服务器套接字的配置。

关于java - 即使客户端未发送证书,SSL 套接字连接仍能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26761966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com