无法使用随机十六进制生成的密钥openssl加载私钥

时间:2018-03-27 22:12:56

标签: bash macos openssl rsa

我正在编写一个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

谢谢!

1 个答案:

答案 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