2012-09-17 35 views
5

Tôi cần tạo tệp PKCS12 trong python sẽ chứa chứng chỉ tự ký và khóa cá nhân cho nó. Tôi đã tập hợp mã python sau cho tác vụ này:Có thể tạo tệp PKCS12 (.pfx) đúng trong Python không?

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()) 

Mã này tạo tệp .cer mà tôi có thể xem trong Windows và có vẻ đúng. Nó cũng tạo tệp ".pfx" được dự định là vùng chứa "PKCS # 12" có chứng chỉ và khóa cá nhân tương ứng - một thứ cần thiết để ký các tệp thi hành. Thật không may, nếu tôi cố gắng để mở này "pfx" tập tin trên Windows nó không thành công với 'tập tin không hợp lệ' lỗi, và phân tích nó thông qua công cụ dòng lệnh cũng thất bại:

certutil -asn container.pfx 

Không với 'lỗi giải mã' tại giữa tệp.

Có điều gì đó tôi đang làm sai trong mã của tôi hoặc Python + OpenSSL không nhằm mục đích tạo tệp PKCS # 12 hợp lệ trong Windows?

P.S. Tôi đang sử dụng phiên bản ActivePython 2.7 32 bit mới nhất.

Trả lời

10

Tôi có một giả thuyết, rằng bạn cần phải mở container.pfx trong chế độ nhị phân:

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

giả định Rất hợp lý :) –

+1

Oh. Một lần nữa, bản dịch tự động "\ n" này làm tôi đau trong một vài giờ làm việc: (Cảm ơn rất nhiều! Stackoverflow thật tuyệt vời :). – grigoryvp

+1

Tôi cũng trượt lên trên này trong vài giờ! Cảm ơn bạn đã đăng bài :-) –

Các vấn đề liên quan