我正在将Pyjks PrivateKeyEntry对象加载到PEM中,然后尝试将pem编码的字符串加载到Pkey对象中。正如您可能已经猜到的那样,我正在尝试将PrivateKeyEntry及其证书链导出到文件中。我们有一个能够将证书和p12容器导入java密钥库的UI,我也试图让它们可以下载。
pkey_pem = pkey_as_pem(keystore_entry)
load_privatekey(crypto.FILETYPE_PEM, pkey_pem)
但是,我从OpenSSL.crypto库得到的错误至少可以说:
OpenSSL.crypto.Error: [('asn1 encoding routines', 'asn1_check_tlen', 'wrong tag'), ('asn1 encoding routines', 'asn1_item_embed_d2i', 'nested asn1 error'), ('rsa routines', 'old_rsa_priv_decode', 'RSA lib'), ('asn1 encoding routines', 'asn1_check_tlen', 'wrong tag'), ('asn1 encoding routines', 'asn1_item_embed_d2i', 'nested asn1 error'), ('PEM routines', 'PEM_read_bio_PrivateKey', 'ASN1 lib')]
Pyjks也表明这是以同样的方式完成的:https://github.com/kurtbrose/pyjks/blob/master/tools/readks.py我能够输出这样的证书就好了。
编辑:也尝试使用load_privatekey(crypto.FILETYPE_ASN1, pkey_pem._pkey)
,导致类似的神秘错误消息:
{Error}[('asn1 encoding routines', 'asn1_check_tlen', 'wrong tag'), ('asn1 encoding routines', 'asn1_template_noexp_d2i', 'nested asn1 error'), ('asn1 encoding routines', 'asn1_check_tlen', 'wrong tag'), ('asn1 encoding routines', 'asn1_item_embed_d2i', 'nested asn1 error'), ('rsa routines', 'old_rsa_priv_decode', 'RSA lib'), ('asn1 encoding routines', 'asn1_check_tlen', 'wrong tag'), ('asn1 encoding routines', 'asn1_item_embed_d2i', 'nested asn1 error')]
从我自己的代码中发现了一个错误(实际上监督听起来更好),这实际上在导入到jks期间搞砸了pkey,这就是它在OpenSSL中失败的原因。