我有以下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 DONE
答案 0 :(得分:0)
问题在于,您实际上并没有将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