You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl调用OpenSSL导出证书至文件需手动回车的自动化解决求助

解决方法

方法1:通过管道传递空输入自动退出

Windows下用echo |给openssl s_client传递空输入,命令完成证书握手后会读取到EOF并自动退出,无需手动回车。修改脚本中的命令行即可:

$commandToExecute = "echo | openssl s_client -connect varcert.test.com:8334";
my $filename = 'C:\F6\certoutput.txt';
my @cmdout = `$commandToExecute`;
open(my $cmd, '>', $filename) or die "Could not open file '$filename' $!";
print $cmd @cmdout;
close $cmd; # 关闭文件句柄避免资源泄漏

方法2:利用空设备输入+专用参数

如果echo |方式不稳定,可结合Windows的空设备< NUL给openssl传递EOF,同时添加-servername(适配需要SNI的站点)和-quiet(减少冗余输出)参数:

$commandToExecute = "openssl s_client -connect varcert.test.com:8334 -servername varcert.test.com -quiet < NUL";
my $filename = 'C:\F6\certoutput.txt';

open(my $openssl_fh, '-|', $commandToExecute) or die "Failed to run openssl: $!";
open(my $out_fh, '>', $filename) or die "Could not open file '$filename' $!";

print $out_fh <$openssl_fh>;

close $openssl_fh;
close $out_fh;

方法3:直接导出证书文件(仅需证书时用)

如果目标只是获取证书而非完整的s_client输出,可让openssl直接导出PEM格式证书,完全无交互:

my $cert_file = 'C:\F6\certoutput.pem';
$commandToExecute = "openssl s_client -connect varcert.test.com:8334 -servername varcert.test.com -showcerts < NUL | openssl x509 -outform PEM > $cert_file";
system($commandToExecute) == 0 or die "Certificate export failed: $?";

内容的提问来源于stack exchange,提问作者rick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:03:16