为什么 openssl 会打印到 stderr 以获得成功的命令?

Tra*_*mas 8 openssl certificates

当我使用 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:~>
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 9

给用户的消息会在 stderr 上进行。善有善报到stdout是结果的的openssl命令。

默认情况下,除非你使用-in或者-outopenssl在从标准输入需要的数据(密钥,证书......),并出在标准输出(结果如要求PEM文件)中写入数据。

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

openssl cmd < in.pem > out.pem
Run Code Online (Sandbox Code Playgroud)

您不希望发送给用户的消息以这样的方式结束,out.pem这就是它们在 stderr 上发布的原因。