gpt4 book ai didi

ssl - 解密openssl证书

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:01 24 4
gpt4 key购买 nike

我使用这个脚本生成了 3 个 key /证书:

#!/bin/sh
AUTH='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
if [ "$1" == "" ]; then
echo "Create a test certificate key."
echo "Usage: $0 NAME"
echo "Will generate NAME.pk8 and NAME.x509.pem"
echo " $AUTH"
exit
fi

openssl genrsa -3 -out $1.pem 2048

openssl req -new -x509 -key $1.pem -out $1.x509.pem -days 10000 \
-subj "$AUTH"

echo "Please enter the password for this key:"
openssl pkcs8 -in $1.pem -topk8 -outform DER -out $1.pk8 -passout stdin

输出是:

releasekey.pem
releasekey.pk8
releasekey.x509.pem

然后我尝试使用此命令对其进行解密:

openssl pkcs8 -in ~/.android-certs/releasekey.pk8 -inform DER

所以,输出是

alex-garmas-osx:android alex-garmash$ openssl pkcs8 -in ~/.android-

certs/releasekey.pk8 -inform DER
Enter Password:
-----BEGIN PRIVATE KEY-----
CONTENT OF PRIVATE KEY HERE
-----END PRIVATE KEY-----

而且它工作正常。 releasekey.pk8 没有密码

当我对命令执行相同操作时:

openssl pkcs8 -in ~/.android-certs/releasekey.pk8 -inform DER -nocrypt

我有一个错误:

140735885419528:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1200:
140735885419528:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:tasn_dec.c:768:
140735885419528:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:700:Field=version, Type=PKCS8_PRIV_KEY_INFO

documentation我看到我可以使用选项 -nocrypt,但为什么会失败?

更新

非常感谢 @bartonjs 的解释。为了解决这个问题,你需要在脚本的最后一个命令中添加-nocrypt标志,然后你就可以使用上面的命令来解密生成的 key

#!/bin/sh
AUTH='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
if [ "$1" == "" ]; then
echo "Create a test certificate key."
echo "Usage: $0 NAME"
echo "Will generate NAME.pk8 and NAME.x509.pem"
echo " $AUTH"
exit
fi

openssl genrsa -3 -out $1.pem 2048

openssl req -new -x509 -key $1.pem -out $1.x509.pem -days 10000 \
-subj "$AUTH"

echo "Please enter the password for this key:"
openssl pkcs8 -in $1.pem -topk8 -outform DER -out $1.pk8 -passout stdin -nocrypt

最佳答案

系统提示您输入空密码,它成功了,而使用 -nocrypt 则失败了。

“用空密码加密”和“未加密”之间是有区别的(尽管对于暴力破解者来说,区别不大)。

未加密的 PKCS#8 blob 看起来像 (ASN.1):

PrivateKeyInfo ::= SEQUENCE {
version Version,
privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
privateKey PrivateKey,
attributes [0] IMPLICIT Attributes OPTIONAL }

如果已经加密了,那么就是

EncryptedPrivateKeyInfo ::= SEQUENCE {
encryptionAlgorithm EncryptionAlgorithmIdentifier,
encryptedData EncryptedData }

EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier

EncryptedData ::= OCTET STRING

所以 -nocrypt 告诉 OpenSSL 它应该直接期待第一个结构,而你的看起来像第二个(值得注意的是,SEQUENCE 的第一个 child 不是 INTEGER,而是另一个 SEQUENCE) .

并且说您的数据是用空密码加密的并不意味着它是用某种空 key 加密的。 PKCS#8 文件的创建者几乎肯定经历过为 PBKDF2 算法选择随机盐的麻烦,然后将其与空密码结合以产生输出。这些数据仍然是噪音,只是……比正常噪音更容易暴力破解。

关于ssl - 解密openssl证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45282578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com