当我使用 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
。
默认情况下,除非您使用-in
or -out
,openssl
否则从 stdin 获取数据(密钥、证书...)并在 stdout 上写出数据(结果类似于请求 pem 文件)。
在 shell 中,您通常将其用作:
openssl cmd < in.pem > out.pem
您不希望发送给用户的消息最终出现out.pem
在 stderr 上,这就是它们发出的原因。