- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要使用 Java 中的 SSL 套接字开发客户端-服务器桌面应用程序。其中一项要求是对消息进行加密。
我正在尝试一些互联网示例代码,只是为了了解如何建立加密连接。这些示例似乎工作正常,或者至少它们不会产生错误,但是我必须从 Wireshark 验证消息实际上是加密的,但在 wireshark 中我只看到 TCP 数据包。在我看来,我的证书和 keystore 是正确的。
JavaSSLServer.java
/**
@web http://java-buddy.blogspot.com/
*/
public class JavaSSLServer {
static final int port = 8000;
public static void main(String[] args) {
System.setProperty("javax.net.ssl.keyStore","/home/jose/serverKey.jks");
System.setProperty("javax.net.ssl.keyStorePassword","servpass");
SSLServerSocketFactory sslServerSocketFactory =
(SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
try {
ServerSocket sslServerSocket =
sslServerSocketFactory.createServerSocket(port);
System.out.println("SSL ServerSocket started");
System.out.println(sslServerSocket.toString());
Socket socket = sslServerSocket.accept();
System.out.println("ServerSocket accepted");
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
try (BufferedReader bufferedReader =
new BufferedReader(
new InputStreamReader(socket.getInputStream()))) {
String line;
while((line = bufferedReader.readLine()) != null){
System.out.println(line);
out.println(line);
}
}
System.out.println("Closed");
} catch (IOException ex) {
Logger.getLogger(JavaSSLServer.class.getName())
.log(Level.SEVERE, null, ex);
}
}}
JavaSSLClient.java
/**
@web http://java-buddy.blogspot.com/
*/
public class JavaSSLClient {
static final int port = 8000;
public static void main(String[] args) {
System.setProperty("javax.net.ssl.trustStore", "/home/jose/clientTrustedCerts.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "clientpass");
SSLSocketFactory sslSocketFactory =
(SSLSocketFactory)SSLSocketFactory.getDefault();
try {
Socket socket = sslSocketFactory.createSocket("localhost", port);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
try (BufferedReader bufferedReader =
new BufferedReader(
new InputStreamReader(socket.getInputStream()))) {
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("Enter something:");
String inputLine = scanner.nextLine();
if(inputLine.equals("q")){
break;
}
out.println(inputLine);
System.out.println(bufferedReader.readLine());
}
}
} catch (IOException ex) {
Logger.getLogger(JavaSSLClient.class.getName())
.log(Level.SEVERE, null, ex);
}
}
}
我添加了 System.setProperty (...
在 Wireshark 中:
其他示例:
Wireshark 中的结果相似。
我想与加密客户端和服务器之间的消息的 SSL 套接字建立连接,并且可以从 Wireshark 验证(这是另一个要求)。
我的问题是:
如何验证消息是否真的使用 wireshark 加密?
我应该看到 SSL/TLS 数据包而不是 TCP 才能断定它们已加密吗?
您能告诉我一些示例代码是否错误或不完整吗?
最佳答案
您的客户端和服务器代码正在交换纯文本消息,因此,如果您在 TCP 数据包中看不到纯文本,则消息可能已被加密(根据显示的代码,它们应该是加密的)。
要验证,您可以过滤连接的两个 IP/端口对上的 Wireshark 捕获,然后将该 TCP 流解码为 TLS
,然后查看是否成功。如果是这样,它将显示连接的前几个数据包(在 TCP 3 次握手之后)是未加密的 TLS 握手(交换证书并协商加密值),后续数据包是加密的 TLS 数据包。
关于java - java(client-server)中如何使用wireshark检查与SSL sockets的连接等疑惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41751962/
我有以下变量: string str1 = "1"; string str2 = "asd"; string str3 = "3.5"; string str4 = "a"; 现在我需要找到每个字符串
这个问题在这里已经有了答案: Is Java "pass-by-reference" or "pass-by-value"? (92 个回答) 关闭 8 年前。 public class progr
我对这种行为有些疑惑。谁能解释一下 void Decrement(int* x){ *x--; //using this line, the output is 5
您好 StackOverflow 用户(或 Stackoverflowers?): 我正在通过编写 WPF 代码来学习。我阅读了几篇文章/看到了几个截屏视频,并且来自 WEB 开发背景,我启动了 VS
在阅读 HTML5 IndexedDB Specification 时我对它的异步请求模型有些怀疑。查看 request api example 时, open 方法用于启动异步请求。 var req
有几个问题,首先是这个方法,它将 int[] 转换为 byte[]: public static byte[] intToByte(int[] input){ ByteBuffer byteB
我是一名优秀的程序员,十分优秀!