在 openssl 命令中自动输入密码

在 openssl 命令中自动输入密码

我正在编写一个脚本,用于自动输入用户对 openssl 命令的输入,但我找不到让脚本自动输入所需密码的方法。我尝试过:

spawn sudo openssl x509 -req -in client.csr -CA /etc/mosquitto/ca_certificates/ca.crt -CAkey /etc/mosquitto/ca_certificates/ca.key -CAcreateserial -out client.crt -days 15; 
expect 'Enter pass phrase for /etc/mosquitto/ca_certificates/ca.key:'
send '1234\n'

不起作用(未找到生成和发送)

printf '1234\n' | sudo openssl x509 -req -in client.csr -CA /etc/mosquitto/ca_certificates/ca.crt -CAkey /etc/mosquitto/ca_certificates/ca.key -CAcreateserial -out client.crt -days 15; 

不起作用,一直等待密码,程序永远不会完成,除非我手动输入“1234”。

在其他情况下,它与 printf 一起工作:

printf 'ES\n\n\n\n\nclient'$n'\n\n\n\n' | sudo openssl req -out client.csr -key client.key -new; 

我猜想如果输入被隐藏,printf 将不起作用。有什么想法吗?

答案1

找到了一种不使用 expect 的方法:

你基本上需要--passin pass:'your_passphrase'在命令中包含

例如:sudo openssl x509 -req -in client.csr -CA /etc/mosquitto/ca_certificates/ca.crt -CAkey /etc/mosquitto/ca_certificates/ca.key -CAcreateserial -out client.crt --passin pass:1234 -days 15;

来源

还有其他方法可以做到这一点,例如加载更安全的密码文件,如上所述这里

答案2

创建受密码保护的密钥文件的过程需要一个密码,该密码用于存储此输出文件。因此,-passin您使用的参数是读取输入文件。从文档

-passin arg - 输入文件密码源。

相反,您需要适当的选项来指定输出密码,即

-passout arg - 输出文件密码源。

在这种情况下,要打开/etc/mosquitto/ca_certificates/ca.key密钥,您需要:

sudo openssl x509 \
-passin pass:'1234' \
-req \
-in client.csr \
-CA /etc/mosquitto/ca_certificates/ca.crt \
-CAkey /etc/mosquitto/ca_certificates/ca.key 
-CAcreateserial \
-out client.crt \
-days 15 

相关内容