如何在连接后终止OpenSSL s_client

时间:2014-09-10 08:23:24

标签: windows batch-file openssl

(评论者:我也知道这是在超级用户领域,但如果前一个问题悄悄通过... :))

这与this question非常相似,但在Windows(7/8 / Server 2008/2012)环境中:我使用的是OpenSSL的Windows端口。

我正在运行

openssl s_client -connect 192.168.0.1:443

从命令提示符,以显示证书信息。但是,openssl之后会等待用户输入;我可以 Ctrl + C 来“打破”输出,或者每次只输入几个字符然后点击返回,但我需要自动化这个 - 所有我真的很感兴趣in是证书信息。

根据上一个问题,我需要一些方法来终止/关闭连接。但是,我尝试在输入文件中输入echo / type输入到混合中,似乎没有任何东西可以模拟真实用户。任何人都可以告诉我如何在连接后强制openssl退出吗?

3 个答案:

答案 0 :(得分:30)

使用管道传入字符“Q”可以达到预期的效果。这为脚本提供了很好的单行程序:

echo "Q" | openssl s_client -connect host:port

如果您使用的是新版本的BASH,您还可以使用三重小于重定向而不是管道(有时管道不可用,因为它在stdin / stdout上运行):

openssl s_client -connect host:port <<< "Q"

答案 1 :(得分:4)

在空白行的开头输入字母“Q”将结束活动连接。我已经看到s_client进入没有做任何事情的状态,但这是退出会话的记录方式。

如果您想在批处理模式下执行此操作,只需创建一个文本文件,其中包含字母“Q”,后跟回车符,并将其指向命令的末尾,如下所示:

openssl s_client -connect host:port < Q.txt

我试过这个并且有效。

答案 2 :(得分:1)

我的 $profile 中有一个关注者,如果我需要扩展输出,只需使用 cert github.comcert github.com 15 调用它。一直工作到现在。

# $profile
function test-certificate($domain, $contextLength = 10) {
    
    $domain += ":443"
    echo "q" | openssl s_client -connect $domain | openssl x509 -noout -enddate | sls "notAfter.*"
    echo "q" | openssl s_client -connect $domain | sls "certificate chain" -Context $contextLength
    write-host "~~~" -ForegroundColor darkcyan
    write-host "If needed, pass a desired output length after domainname" -ForegroundColor darkcyan
}
Set-Alias cert test-certificate

enter image description here

编辑:要解析 unable to get local issuer certificate,请从 https://curl.se/docs/caextract.html 下载证书包。我不以编程方式进行,所以我最终得到了

function test-certificate($domain, $contextLength = 10) {
    
    $cacertPath = "c:\Users\Admin\tools\cacert.pem" #←EDIT THIS
    $domain += ":443"
    echo "q" | openssl s_client -connect $domain -CAfile $cacertPath  | openssl x509 -noout -enddate | sls "notAfter.*"
    echo "q" | openssl s_client -connect $domain -CAfile $cacertPath  | sls "certificate chain" -Context $contextLength
    Write-Host "~~~" -ForegroundColor darkcyan
    Write-Host "→ If needed, pass a desired output length after domainname" -ForegroundColor darkcyan
    Write-Host "→ To update the list of trusted Certificates, run:" -ForegroundColor darkcyan
    Write-Host "→ Invoke-WebRequest https://curl.se/ca/cacert.pem -OutFile 'c:\Users\Admin\tools\cacert.pem'" -ForegroundColor darkcyan
    Write-Host "~~~" -ForegroundColor darkcyan
}