繁体   English   中英

握手后退出“ openssl s_client -connect”

[英]“openssl s_client -connect” exit after handshake

我正在尝试测试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?

原来, Windows上的某些本机openssl客户端二进制文件存在问题 ,这意味着即使关闭了标准输入,您最终也会遇到不终止的s_client 如果从输出中收到一条已知行,或者从cygwin安装中复制了所需的二进制文件,以使opensl的​​cygwin版本正常运行,Workrounds将终止。

请注意,上一段是针对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下的语句,该语句指出:

当以交互方式使用(这意味着-quiet-ign_eof都没有给出)时,如果该行以R开头,并且该行以Q开头或到达文件结尾,则将重新协商会话。关闭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM