Можно ли сгенерировать правильный файл PKCS12 (.pfx) в Python?

Мне нужно создать файл PKCS12 в python, который будет содержать самозаверяющий сертификат и закрытый ключ для него. Я собрал следующий код 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» с сертификатом и соответствующим закрытым ключом - вещь, необходимая для подписи исполняемых файлов. К сожалению, если я пытаюсь открыть этот файл «.pfx» в Windows, он завершается с ошибкой «файл недействителен», и его анализ с помощью инструмента командной строки также завершается неудачей:

certutil -asn container.pfx

Сбой с ошибкой декодирования в середине файла.

Я что-то не так делаю в своем коде, или Python + OpenSSL не предназначены для создания действительных файлов PKCS # 12 под Windows?

P.S. Я использую последний ActivePython 2.7 32-разрядный дистрибутив.

6 голосов | спросил grigoryvp 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 17 Sep 2012 13:27:34 +0400 2012, 13:27:34

1 ответ


0

У меня есть предположение, что вам нужно открыть container.pfx в двоичном режиме:

open( "container.pfx", 'wb' ).write( p12.export() )
ответил Andrey Atapin 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 17 Sep 2012 13:55:47 +0400 2012, 13:55:47

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132