gpt4 book ai didi

java - "openssl s_client -connect"握手后退出

转载 作者:行者123 更新时间:2023-12-01 22:06:48 24 4
gpt4 key购买 nike

我正在尝试测试 SSL 服务器,并想检查 SSL 服务器是否支持特定密码。

为此,我使用以下命令 = openssl s_client -connect google.com:443 -cipher RC4-SHA 并从 Java 程序中调用它,如下所示,并且工作得很好,除了以下事实:我的 Java 程序永远不会退出,因为启动的 openssl 进程仍然处于开启状态。

        Process process = Runtime.getRuntime().exec("openssl s_client -connect google.com:443");
System.out.println("Waiting for process to terminate ...");
process.waitFor();

BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println("Exiting ...");

我看到有类似 openssl s_client -connect google.com:443 -verify 0 的内容,但这是错误返回代码,不会获取我正在查找的信息,但它确实停止了openssl 进程。

客户端与服务器握手完成后,有什么方法可以退出 openssl connect 吗?

最佳答案

原来有一个problem with some native openssl client binaries on windows ,这意味着即使您关闭标准输入,您最终也会得到一个非终止的 s_client 。如果您从输出中收到已知行,或者从 cygwin 安装中复制所需的二进制文件以使 cygwin 版本的 openssl 顺利运行,则解决方案将终止。

请注意,前一段是针对 Windows 问题的,后面的段落完全适用于 Linux/OSX。

process.waitFor()之前,我们调用process.getOutputStream().close(),它会关闭openssl s_client的输入流>;这会触发它的自动终止逻辑。为了更好的措施,我们也关闭了 stderr。另一件事是在等待进程终止之前移动输出读数,以防缓冲区在操作系统级别被填满。

import java.io.*;

public class props {
public static void main(String[] args) throws Exception {
Process process = Runtime.getRuntime().exec("openssl s_client -connect google.com:443");
process.getOutputStream().close();
process.getErrorStream().close();

BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println("Waiting for process to terminate ...");
process.waitFor();
System.out.println("Exiting ...");
}
};

这是基于 s_client 手册页中 CONNECTED COMMANDS 下的语句,其中指出:

When used interactively (which means neither -quiet nor -ign_eof have been given), the session will be renegotiated if the line begins with an R, and if the line begins with a Q or if end of file is reached, the connection will be closed down.

关于java - "openssl s_client -connect"握手后退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32586995/

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