为什么 openssl 会打印到 stderr 来表示成功的命令?

为什么 openssl 会打印到 stderr 来表示成功的命令?

当我使用 openssl 生成 CSR 时,正常输出会发送到 stderr。我不明白为什么它不在标准输出上。我正在编写一些证书/密钥对的生成脚本,并希望能够检测错误条件,但这使问题变得混乱。

admin@ip-10-248-185-66:~> openssl req -rand $RAND -new -newkey rsa:2048 -nodes -keyout $KEYPATH -subj /C=US/ST=CA/L=LA/O=TS/OU=server/CN=primary -out $CSRPATH -config $CONFPATH
Generating a 2048 bit RSA private key
.........................+++
..................................+++
writing new private key to '$KEYPATH'
-----
admin@ip-10-248-185-66:~> echo $?
0
admin@ip-10-248-185-66:~> openssl req -rand $RAND -new -newkey rsa:2048 -nodes -keyout $KEYPATH -subj /C=US/ST=CA/L=LA/O=TS/OU=server/CN=primary -out $CSRPATH -config $CONFPATH 2>/dev/null
admin@ip-10-248-185-66:~>

答案1

给用户的消息在 stderr 上。发送到标准输出的是结果命令的openssl

默认情况下,除非您使用-inor -outopenssl否则从 stdin 获取数据(密钥、证书...)并在 stdout 上写出数据(结果类似于请求 pem 文件)。

在 shell 中,您通常将其用作:

openssl cmd < in.pem > out.pem

您不希望发送给用户的消息最终出现out.pem在 stderr 上,这就是它们发出的原因。

相关内容