bash - 如何将openssl s_client -connect stdout和stderr发送到/dev/null?

标签 bash openssl stdout stderr

我有以下 bash 脚本,用于检查 Apache 中是否存在给定的 SSL 客户端证书。

#!/bin/bash
cert=$1
echo | openssl s_client -connect localhost:443 | grep -q $cert > /dev/null 2>&1
if [ $? -eq 0 ]; then
  echo $cert "client cert already exist"
else
  #Create a new client cert in Apache
fi

即使我将 openssl 命令的 stdout 和 stderr 发送到/dev/null,该命令仍然向控制台显示以下错误!

深度=3 C = OM,O = ORG,OU = 用于暂存,CN = ROOT CA - 1 验证错误:num=19:证书链中的自签名证书验证返回:0/C=om/O=o/CN=MY_CERT 完成

最佳答案

问题是,您实际上并未将 openssl 的 stderr 发送到 /dev/null,而是发送 grep 的。

要将 openssl 的 stderr 发送到 /dev/null,您需要将重定向放入与 openssl 管道相同的部分> 调用。当您使用 grep -q 时,您不需要在 grep 上进行任何 I/O 重定向。

这应该做到:

echo | openssl s_client -connect localhost:443 2>/dev/null | grep -q $cert

关于bash - 如何将openssl s_client -connect stdout和stderr发送到/dev/null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47177866/

相关文章:

linux - JBoss5 和 JBoss7 安装冲突相同的 Linux 机器

openssl CLI - 验证整个认证链的 CRL

stdout - 控制台输出格式

python - 从子进程中实时捕获标准输出

bash - 缩进长行标准输出

java - 是否有一种可实现的(非理论的)方法来证明电子邮件地址是否属于真实电子邮件帐户?

MySQL 和 Bash 分解结果并重新加载到 MySQL

昨天日期(最后一个工作日)的 bash shell 脚本

ruby - 使用 prime256v1 和已知公钥创建新的 OpenSSL EC 点

iis - Windows Server 2012 R2 和 IIS 是否受 Heartbleed 漏洞影响?