我正在编写一个bash脚本来生成和使用RSA私钥。当我运行它时,它无法生成私钥并说“无法加载Priavate Key"然后:期待:任何私钥。
当我使用pass:foo作为密码短语通过iTerm2运行genrsa命令时,它可以工作但是我无法使用我在gen_hex函数中生成的十六进制字符串。
gen_hex() {
# generate random hexadecimal string/array
echo hexdump -n 16 -e '4/4 "%08X" 1 "\n"' /dev/random
}
check_for_keys() {
if [ ! -f ./public.pem ]; then
echo "> Generating Passphrase..."
passp = $(gen_hex)
touch pass.txt
echo $passp > pass.txt
echo "> Done."
echo "> Generating keys..."
openssl genrsa -des3 -passout pass:$passp -out private.pem 4096
echo "> Done."
echo "> Exporting Public Key..."
openssl rsa -in private.pem -passin pass:$passp -outform PEM -
pubout - out public.pem
echo "> Done."
fi
}
完整的错误消息:
:unable to load Private Key 35508:error:0906D06C:PEM
routines:PEM_read_bio:no start line:
/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-
64.50.6/src/crypto/pem/pem_lib.c:648:Expecting: ANY PRIVATE KEY
谢谢!
答案 0 :(得分:1)
你(至少)有两个重大问题。首先,gen_hex
不会产生十六进制字符串;它输出您要运行的命令。删除echo
。其次,你不能在作业中放置=
周围的空格。
gen_hex() {
# generate random hexadecimal string/array
hexdump -n 16 -e '4/4 "%08X" 1 "\n"' /dev/random
}
和
passp=$(gen_hex)
第三,你应该引用$passp
,无论它在哪里使用,以避免任何涉及字符串中任何字符的shell解释的令人讨厌的意外。为了安全起见,我还会使用printf
代替echo
,除非是为了避免echo
附加到密码短语结尾的换行符。
printf '%s' "$passp" > pass.txt