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

Papps

我对使用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!");
Jarnbjo

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在SSL连接期间未发送客户端证书?CXF 2.7.9

来自分类Dev

Java SSL 套接字——客户端证书证明

来自分类Dev

2种方式的SSL-客户端证书未发送到服务器

来自分类Dev

Powershell SSL套接字客户端

来自分类Dev

套接字客户端连接

来自分类Dev

客户端套接字连接被拒绝

来自分类Dev

卷毛未发送客户端证书

来自分类Dev

如何向通过套接字连接的特定客户端发送消息

来自分类Dev

带有客户端ssl证书的libcurl返回403,但curl可以正常工作

来自分类Dev

套接字连接被拒绝,但是客户端和服务器均独立工作

来自分类Dev

SSL客户端证书不是由python'requests'库或s_client发送的,但是在Web浏览器中可以正常工作

来自分类Dev

C套接字客户端发送换行符

来自分类Dev

C套接字客户端发送换行符

来自分类Dev

Lua套接字客户端:发送功能

来自分类Dev

使用JavaScript绘制从客户端套接字发送的图像

来自分类Dev

客户端的SSL证书

来自分类Dev

在FTP客户端套接字程序中拒绝连接

来自分类Dev

Java客户端套接字返回连接超时异常

来自分类Dev

通过套接字连接从kext验证客户端

来自分类Dev

TCP客户端套接字。连接并等待输入流

来自分类Dev

Web套接字连接从Android客户端失败

来自分类Dev

Android聊天客户端:套接字连接

来自分类Dev

服务器/客户端套接字连接

来自分类Dev

Python客户端不断失去与tcp套接字的连接

来自分类Dev

在FTP客户端套接字程序中拒绝连接

来自分类Dev

POSIX 套接字客户端连接到自身

来自分类Dev

Python套接字等待客户端连接

来自分类Dev

将客户端重新连接到不同的套接字

来自分类Dev

套接字编程-客户端主机正在工作

Related 相关文章

热门标签

归档