I'm writing a script that automatically enters the user's input for an openssl command, but I can't find a way of entering the required passphrase automatically by the script. What I've tried:
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'Doesn't work (spawn and send not found)
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; Doesn't work, stays waiting for the passphrase and programs never finishes, unless I enter '1234' manually.
In other cases, it works with printf:
printf 'ES\n\n\n\n\nclient'$n'\n\n\n\n' | sudo openssl req -out client.csr -key client.key -new; My guess is that printf doesn't work if the input it's hidden. Any ideas?
12 Answers
Found a way of doing it without using expect:
You basically need to include --passin pass:'your_passphrase' in the command
For example: 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;
There are other ways of doing it, such as loading a password file, which is more secure, as discussed here
The process that creates a password protected key file needs a password which gets used to store this output file. So, the -passin argument you use is for reading an input file. From the documentation:
-passin arg - The input file password source.
Instead you need the proper option to specify the output password, i.e.
-passout arg - The output file password source.
In this case to open the /etc/mosquitto/ca_certificates/ca.key key you need this:
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