2013-07-22 5 views
5

Ich frage mich, wie Sie Schlüssel aus einer Apple .p12-Datei extrahieren. Aus meiner Sicht ist eine .p12-Datei eine Kombination aus X504-Zertifikaten und privaten Schlüsseln.Extrahieren Sie mehrere Schlüssel aus einer .p12-Datei mit OpenSSL Ruby

Ich sehe, dass jede .p12-Datei, in die ich hineinrenne, ein X504-Zertifikat und mindestens einen Schlüssel und in manchen Fällen zwei Schlüssel hat. Dies liegt daran, dass jeder .p12 einen Apple-Entwicklerschlüssel hat und einige einen zusätzlichen Schlüssel (möglicherweise einen Apple-Root-Autorisierungsschlüssel) haben. Ich denke nur über diese .p12-Dateien mit zwei Schlüsseln als gültig. Mein Ziel ist es, zwischen solchen .p12-Dateien mit einem Schlüssel und solchen mit zwei Schlüsseln zu unterscheiden.

Bis jetzt habe ich OpenSSL verwendet, um X504-Dateien und die Schlüssel von jedem .p12 zu überprüfen. Zum Beispiel habe ich diesen Code, der die Prüfungen für alle P12-Dateien in einem Verzeichnis tut:

Dir.glob('*.p12').each do |p| 
    file = File.read(p) 
    p12 = OpenSSL::PKCS12.new(file, "") 

    # note that this new certificate is in an X509 format 
    cert = p12.certificate 
    puts p12.inspect() 
    puts cert.inspect() 
end 

Das ist mein Ausgang:

#<OpenSSL::PKCS12:0x007fcf33018920> 
#<OpenSSL::X509::Certificate subject=/UID=FFBMT4K5/CN=iPhone Distribution: A.H. Belo Management Services, Inc./OU=FFBMT4K5/O=FFBMT4K5/C=US, issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority, serial=36597980220620, not_before=2012-01-11 16:30:22 UTC, not_after=2013-01-10 16:30:22 UTC> 

Nun mein Problem ist immer Schlüssel. Wenn ich so etwas tun:

puts p12.key 

ich eine lange Zeichenfolge auf verschlüsselten Daten wie folgt aus:

-----BEGIN RSA PRIVATE KEY----- 
MIIEowIBAAKCAQEA4Pet7CZrPr4x/SKjMwy5avXmcguzQlix/vBq+qq7aKQhctKr 
d5HE7wk4jWbDGj7Rf9ckeFFMktTTbKYmnKCywCct/uJmgavFl1+t45DIQL2V1JMU 
JSXvtjDXoKFweKQgdiha5mBNL70+ivqxMzJJw19E+MhFoZ6tFOgQ5gPLcDLR5WTU 
ezxH9RbXGWbq+CMBjJ+lw8/Ako7IOm+d95ZTM6u333qp0dsn+1/I/zGeWE1gJXIl 
8mIkvrp7+BDTvXHYALADwXnXijqvd/bANfetsDQ+gxRnc06dFt114JUuptcXGwbg 
//ykDzNYhuibQD1Z65KfTB/ntQ1aE5FtHEXirwIDAQABAoIBACNCrt/0pZqP9QXY 
B/xYYjeBkz0M2GvtuvhadmoTmIwuLY/xtS5oipVsvJBtKudSMUP4VJ8HHxlkgj7l 
S+gAyAOWIH9yvN5WLgIr3PVuG/UJwhIve1jXOVs1DJcAtsAx+WSLrrOtJGv3HXZr 
FJsRpr4YkJbtzPwoArjkJsHmllxfT2zeQPMJy+RQ/qlHUqsude/ahC0I3RiW3SgB 
EKTNM1vGTEkox8bUUhHqNY3ERlihFpZC2wSkroETDY3RkSjuPkNy7uT/b66a/qjj 
qaIA0YLhNOYGdN2llJN5GJjYYVKakpiipqcHCFrV1+JtbFB2tKhqAvK6fjCZcSFF 
fW58owECgYEA/g8FvAPcejPR3O8E1ydNWChhd9UZQUeQNCET+lY3Dxwklk+u1140 
yw/u2hUoNdJLfev1HtlYruglD9jW/LGoLaPodQfcHcaCSfdJa1mmKfSieApOe15+ 
ijO3WpZK/MJUTteGVMW/B/QnxPBGtsDo6q2v2YxA7fOhzmImn5hgxlsCgYEA4q/A 
DBKe1WDZPUyG3R/Cfl5AEqEHly6VkCPFF+uYFZzep/SN/ez34r7fmcfl0RL7H9kn 
Q4WBaCMbCgG9dErORW99usoBsjys5pojstNJDZwACUg9rPnV/+uUqMyocjeN0Vrl 
2Vg0dC8HH1hLZPLkp+MAy2nNzmnnHcTKiTqsDT0CgYEApVzfzaXxvvS1t4k37Fbf 
h+8YqefhfVT4LoYNO9ccFVCrG88XrYTa9gUT4Yz91DJiAr8vl/m+OHJPlUX9gRKd 
tb9HEc2g3xyTN1OmzSHX/t0FVv7WYIR79rZ8tJC4lFZki8DK5aikk6e+rvf5/wAH 
WqDcocwhgwAeJHhMTXrgGpsCgYBGYqWx2fJBdNHfK6zQafUdAazJXACcW5WK7OBc 
vgU56Lxl0BRqnLKXUAbjm+Lq2Qbqa6W6XHDC4euaXtHxkuybOLQEVIbUTeytqXye 
IOaU+DQ2rZyg4e4liYNeKjW/SSqar6ugobefv55piCPY02ZWDrEHd/G0PsPJRXpR 
w8r6TQKBgFMoEZKywokRIbMCUHHRR3TVeizBMhbNUUmOiRhzsHZPJ2V63PNp3L1c 
0NsRo62mbekXDRH8J0C8fLG4R64Y7+rHBQo0tBpgYepPU0NCrsojF7brtYYb3VqI 
baVEPRhIy2tJylDad6M36DeOCIhvXalh8GaV/HhEr4lxykth+mGH 
-----END RSA PRIVATE KEY----- 

Meine Frage ist, wie kann ich feststellen, ob dieses Zertifikat mehr als einen Schlüssel hat, und auch wie ich die Schlüssel für Informationen überprüfen kann. Wenn das, was ich verlange, oder mein Verständnis dieses Themas grundlegend fehlerhaft ist, lass es mich wissen. Dies ist das erste Mal, dass ich Zertifikaten ausgesetzt bin und jede Information wird sehr hilfreich sein. Irgendwelche Punkte in der richtigen Richtung werden geschätzt, danke im Voraus.

EDIT:

OpenSSL Ich kann die beiden gehüllt keybags eines P12-Ansicht. Beispiel:

openssl pkcs12 -in some_p12.p12 -info -noout 

Ausgang:

Enter Import Password: 
MAC Iteration 1 
MAC verified OK 
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048 
Certificate bag 
Certificate bag 
PKCS7 Data 
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048 
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048 

Also ich suche ein paar Dinge. Im Allgemeinen, was genau sind diese Schlüsseltaschen? Und auch, wie kann ich überprüfen/bestimmen, wie viele ich pro .p12-Datei mit Ruby habe. Vielen Dank.

Antwort

0

Ein .p12 enthält nur einen privaten Schlüssel und enthält einen oder mehrere öffentliche Schlüssel. Die öffentlichen Schlüssel sind diejenigen, die die Vertrauenskette bilden.

.p12 ist ein Binärformat. Um es zu konvertieren und in einzelne Zertifikate zu extrahieren, suchen Sie beispielsweise nach here. Der Link enthält alle von Ihnen benötigten openssl-Befehle.