使用 TLS 协议在客户端和服务器之间进行通信的密码套件 [重复]

Posted

技术标签:

【中文标题】使用 TLS 协议在客户端和服务器之间进行通信的密码套件 [重复]【英文标题】:Cipher suite in communication between client and server using TLS protocol [duplicate] 【发布时间】:2017-07-06 07:39:52 【问题描述】:

虽然我阅读了 JSSE 参考指南,但我对加密和 SSL/TLS 协议都不是很熟悉。我正在开发一个需要某种 TCP 连接安全性的项目,因此我选择了 TLS 作为最常用的协议。

我在 JSSE 参考指南中找到了 SSLSocket 和 SSLServerSocket 的代码,并将其复制到我的项目中,但该操作的结果并不是真正预期的。当我启动我的服务器(Java 应用程序)时,一切似乎都在我试图与客户端(也是 Java 应用程序)连接的地步。此时,发生了 SSLHandshakeExceptionNo cipher suite in common.

我的问题是,密码套件通常是什么(我用谷歌搜索了它,但我不太明白,初学者的基本解释是我需要的)以及我必须如何修复下面给出的代码让我的项目完美运行?

SSLSocket

import java.io.*;
import javax.net.ssl.*;

. . .

int port = availablePortNumber;
String host = "hostname";

try 
    SSLSocketFactory sslFact =
        (SSLSocketFactory)SSLSocketFactory.getDefault();
    SSLSocket s = (SSLSocket)sslFact.createSocket(host, port);

    OutputStream out = s.getOutputStream();
    InputStream in = s.getInputStream();

    // Send messages to the server through
    // the OutputStream
    // Receive messages from the server
    // through the InputStream


catch (IOException e) 

SSLServerSocket:

 import java.io.*;
import javax.net.ssl.*;

. . .

int port = availablePortNumber;

SSLServerSocket s;

try 
    SSLServerSocketFactory sslSrvFact =
        (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
    s = (SSLServerSocket)sslSrvFact.createServerSocket(port);

    SSLSocket c = (SSLSocket)s.accept();

    OutputStream out = c.getOutputStream();
    InputStream in = c.getInputStream();

    // Send messages to the client through
    // the OutputStream
    // Receive messages from the client
    // through the InputStream


catch (IOException e) 

【问题讨论】:

【参考方案1】:

您可能没有服务器证书。您没有显式创建SSLContext,因此您的服务器访问证书和私钥的唯一方法是您运行您的程序并设置某些系统属性。如果没有必要的密钥材料,服务器将只启用匿名密码套件。

默认情况下,客户端会禁用这些匿名密码套件,因为它们实际上并不提供任何安全性。因此,握手失败是因为没有共同的密码套件。

【讨论】:

服务器也会禁用它们。因此,如果没有证书,服务器将不会启用 密码套件。 如何启用它们?

以上是关于使用 TLS 协议在客户端和服务器之间进行通信的密码套件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 TLS/SSL 确保 WebSocket 连接的安全

如何使用 TLS/SSL 确保 WebSocket 连接的安全

SSL和TLS协议如何提供身份验证机密性和完整性

如何在Apache HttpClient中设置TLS版本

fabric之使用传输层安全性(TLS)保护通信安全

什么是SSL加密,什么是TLS加密