使用 openssl 从 ssl 密钥中删除空密码

使用 openssl 从 ssl 密钥中删除空密码

我有一个使用空密码加密的 openssl 密钥文件。我尝试使用此命令删除密码

openssl rsa -in ca.key -out ca.key.clear

然后,当系统要求输入当前密码时,我尝试输入空密码,但出现此错误:

140592616367776:错误:28069065:lib(40):UI_set_result:结果太小:ui_lib.c:869:您必须输入 4 到 8191 个字符

因此,如果密码少于 4 个字符,我似乎无法删除它。

我如何删除密码,最好使用 openssl。

答案1

我想出了一个解决方法,使用etcd-ca工具。

mkdir .etcd-ca
mv ca.key .etcd-ca/ca.host.key
touch .etcd-ca/ca.host.crt
chmod a-w .etcd-ca/ca.host.crt
etcd-ca export --insecure ca > ca.tar
tar xf ca.tar

虽然不太美观,但确实有效。不过我还是不知道如何使用 openssl 来实现这一点。

答案2

确实,您无法获得PEM_bytes_read_bioPEM_do_header,而这正是传统 PEM 解密的最终结果,无法获取零长度密码。

有一个解决方法,但是你可能不喜欢

# assumes DES3 (aka DES-EDE3) CBC as in the example
# changes and/or additional logic needed for other ciphers

# get the IV from the file header 
iv=`awk <silly -F, '/DEK-Info:/{print $2}'`
# use enc to do EVP_BytesToKey with salt=IV and just print result 
key=`openssl enc -des3 -k '' -S $iv -P |awk -F= '/^key/{print $2}'`
# get body of the file, debase64 and decrypt 
# note openssl silently drops dash-END line, another debase64 may not 
<silly sed '1,/^$/d' |openssl base64 -d |openssl enc -des3 -d -K $key -iv $iv >sillyd

# sillyd is now unencrypted DER "legacy" (PKCS#1) 
# and can be read by "openssl rsa <sillyd -inform der"
# but since we're on a roll let's do PEM too!
(echo -----BEGIN RSA PRIVATE KEY-----;openssl base64 <sillyd;\
 echo -----END RSA PRIVATE KEY-----) >sillyp

我的建议:下次不要使用空密码:-)

答案3

以下是我解决这个问题的方法。

  1. 为最初创建时没有密码的私钥添加新的密码。

    openssl rsa -des3 -in your.key -out your.encrypted.key
    mv your.encrypted.key your.key
    

这将提示您输入新的密码。

  1. 现在删除密码,如下所示:

    openssl rsa -in your.key -out your.key_NO_PASSPHRASE.pem
    
  2. 这将提示您输入上面步骤 1 中指定的密码,然后将其从密钥中删除。

这对我来说很有效,Apache 启动时没有任何错误。(我假设这就是你首先需要删除它的原因:))

相关内容