是否可以在Python中生成正确的PKCS12(.pfx)文件?

是否可以在Python中生成正确的PKCS12(.pfx)文件?,python,cryptography,openssl,Python,Cryptography,Openssl,我需要用python生成一个PKCS12文件,该文件将包含自签名证书和它的私钥。我为此任务汇编了以下python代码: import OpenSSL key = OpenSSL.crypto.PKey() key.generate_key( OpenSSL.crypto.TYPE_RSA, 1024 ) cert = OpenSSL.crypto.X509() cert.set_serial_number(0) cert.get_subject().CN = "me" cert.set_issu

我需要用python生成一个PKCS12文件,该文件将包含自签名证书和它的私钥。我为此任务汇编了以下python代码:

import OpenSSL
key = OpenSSL.crypto.PKey()
key.generate_key( OpenSSL.crypto.TYPE_RSA, 1024 )
cert = OpenSSL.crypto.X509()
cert.set_serial_number(0)
cert.get_subject().CN = "me"
cert.set_issuer( cert.get_subject() )
cert.gmtime_adj_notBefore( 0 )
cert.gmtime_adj_notAfter( 10*365*24*60*60 )
cert.set_pubkey( key )
cert.sign( key, 'md5' )
open( "certificate.cer", 'w' ).write( 
  OpenSSL.crypto.dump_certificate( OpenSSL.crypto.FILETYPE_PEM, cert ) )
open( "private_key.pem", 'w' ).write( 
  OpenSSL.crypto.dump_privatekey( OpenSSL.crypto.FILETYPE_PEM, key ) )
p12 = OpenSSL.crypto.PKCS12()
p12.set_privatekey( key )
p12.set_certificate( cert )
open( "container.pfx", 'w' ).write( p12.export() )
这段代码创建了一个.cer文件,我可以在Windows中查看它,而且看起来是正确的。它还创建了一个“.pfx”文件,该文件是一个“PKCS#12”容器,带有证书和相应的私钥,这是签署可执行文件所需的东西。不幸的是,如果我尝试在Windows上打开此“.pfx”文件,它会失败,并出现“文件无效”错误,并且通过命令行工具解析它也会失败:

certutil -asn container.pfx
失败,文件中间出现“解码错误”

是我在代码中犯了错误,还是Python+OpenSSL不打算在Windows下创建有效的PKCS#12文件


另外,我正在使用最新的ActivePython 2.7 32位发行版。

我有一个假设,您需要以二进制模式打开
container.pfx

open( "container.pfx", 'wb' ).write( p12.export() )

非常合理的假设:)哦。同样,这个自动“\n”翻译让我在几个工作小时内感到不适:(.非常感谢!Stackoverflow真是太棒了:)。我在这个问题上也犯了几个小时的错误!谢谢你的帖子:-)我投你的票太多了。无论如何,我点击了箭头几十次。