OpenSSL 1.0.1e 使用错误?

OpenSSL 1.0.1e 使用错误?

环境

$ cat /etc/*-release
CentOS release 6.5 (Final)

$ openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

这有效

$ tr -dc A-Za-z0-9 </dev/random | head -c 24 > ${f_host_passphrase}
$ echo -e "\n" >> ${f_host_passphrase}

$ openssl genpkey ... -pass file:${f_host_passphrase} -out ${f_host_key}

$ openssl req ... -key ${f_host_key} -passin file:${f_host_passphrase} \
    -out ${f_host_req}

$ openssl ca ... -in ${f_host_req} -out ${f_host_cert}

$ openssl pkcs12 \
  -export \
  -inkey ${f_host_key} \
  -passin pass:$(cat ${f_host_passphrase}) \
  -in ${f_host_cert} \
  -name "${l_ds_cert_name}" \
  -password file:${f_host_passphrase} \
  -out ${f_host_p12}

...

$ pk12util -i ${f_host_p12} \
  -w ${f_host_passphrase} \
  -d ${l_sql_prefix}${d_nssdb} \
  -k ${f_host_passphrase}

pk12util: PKCS12 IMPORT SUCCESSFUL

完整的功能脚本是这里。我编写了快速测试脚本,因为事实证明,下一个变体失败了。

这失败了

$ tr -dc A-Za-z0-9 </dev/random | head -c 24 > ${f_host_passphrase}
$ echo -e "\n" >> ${f_host_passphrase}

$ openssl genpkey ... -pass file:${f_host_passphrase} -out ${f_host_key}

$ openssl req ... -key ${f_host_key} -passin file:${f_host_passphrase} \
    -out ${f_host_req}

$ openssl ca ... -in ${f_host_req} -out ${f_host_cert}

$ openssl pkcs12 \
  -export \
  -inkey ${f_host_key} \
  -passin file:${f_host_passphrase} \
  -in ${f_host_cert} \
  -name "${l_ds_cert_name}" \
  -password file:${f_host_passphrase} \
  -out ${f_host_p12}

...

$ pk12util -i ${f_host_p12} \
  -w ${f_host_passphrase} \
  -d ${l_sql_prefix}${d_nssdb} \
  -k ${f_host_passphrase}

pk12util: PKCS12 decode not verified: SEC_ERROR_BAD_PASSWORD: The security password entered is incorrect.

为什么?

两种变体(“失败”openssl pkcs12命令是我链接到的脚本中的注释块)之间的唯一区别是我如何将密码短语文件传递给命令openssl pkcs12

如果我将密码发送为-passin pass:$(cat ${f_host_passphrase}),则以下pk12util命令将成功。

如果我将密码发送为-passin file:${f_host_passphrase}openssl pkcs12命令仍然会成功,但pk12util命令会失败。

我的猜测是该openssl pkcs12命令正在解析某物作为参数中的密码-passin file:${f_host_passphrase}。只是不是世界其他地方期望使用的......

相关内容