2012-09-17 98 views
5

Necesito generar un archivo PKCS12 en python que contendrá un certificado autofirmado y una clave privada para él. Reuní el siguiente código Python para esta tarea:¿Es posible generar el archivo PKCS12 (.pfx) correcto en 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()) 

Este código crea un archivo .cer que puedo ver en Windows y que parece correcta. También crea un archivo ".pfx" que pretende ser un contenedor "PKCS # 12" con certificado y clave privada correspondiente, algo necesario para firmar ejecutables. Por desgracia, si intento abrir este archivo ".pfx" en Windows falla con 'archivo no es válido', y analizarlo mediante la herramienta de línea de comandos también falla:

certutil -asn container.pfx 

error con el 'error de decodificación' en el medio del archivo.

¿Es algo que estoy haciendo mal en mi código o Python + OpenSSL no está destinado a crear archivos PKCS # 12 válidos en Windows?

P.S. Estoy usando la distribución más reciente de ActivePython 2.7 de 32 bits.

Respuesta

10

que tienen una suposición, de que es necesario abrir container.pfx en modo binario:

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

suposición muy razonable :) –

+1

Oh. De nuevo, esta traducción automática de "\ n" me critica por algunas horas de trabajo :(¡Muchas gracias! Stackoverflow es increíble :). – grigoryvp

+1

¡También me metí en esto por varias horas! Gracias por la publicación :-) –

Cuestiones relacionadas