【发布时间】:2017-12-30 03:45:56
【问题描述】:
我使用此脚本生成了 3 个密钥/证书:
#!/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 标志,然后你可以使用上面的命令来解密生成的密钥
#!/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使用此选项,预期或输出未加密的 PrivateKeyInfo 结构。 但releasekey.pk8使用密码加密。不是吗? -
@pedrofb 没有。我在上面写道:“releasekey.pk8 没有密码”密码=密码。是空的
标签: ssl encryption openssl certificate pkcs#8