Tôi tự hỏi cách trích xuất các khóa từ tệp .p12 của Apple. Từ sự hiểu biết hạn chế của tôi, tệp .p12 là sự kết hợp giữa chứng chỉ X504 và khóa riêng tư.Trích xuất nhiều khóa từ một tệp .p12 bằng cách sử dụng OpenSSL ruby
Tôi thấy rằng mọi tệp .p12 mà tôi chạy vào đều có chứng chỉ X504 và ít nhất một khóa và trong một số trường hợp, hai khóa. Điều này là do thực tế là mọi .p12 đều có một khóa của nhà phát triển Apple và một số có khóa bổ sung (có thể là khóa ủy quyền gốc của Apple). Tôi chỉ xem xét những tệp .p12 có hai khóa hợp lệ. Mục tiêu của tôi ở đây là phân biệt giữa các tệp .p12 có một khóa và những tệp có hai khóa.
Cho đến nay tôi đã sử dụng OpenSSL để có thể kiểm tra các tệp X504 và các khóa của bất kỳ .p12 nào. Ví dụ tôi có mã này mà không được kiểm tra cho tất cả các file đuôi .p12 trong một thư mục:
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
Đây là kết quả của tôi:
#<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>
Bây giờ vấn đề của tôi là nhận được chìa khóa. Nếu tôi làm điều gì đó như thế này:
puts p12.key
tôi nhận được một chuỗi dài trên dữ liệu được mã hóa như thế này:
-----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-----
Câu hỏi của tôi là làm thế nào tôi có thể xác định xem chứng chỉ này có nhiều hơn một chìa khóa, và cũng có thể làm thế nào tôi có thể kiểm tra các phím để biết thông tin. Nếu những gì tôi yêu cầu hoặc sự hiểu biết của tôi về vấn đề này về cơ bản là thiếu sót, vui lòng cho tôi biết. Đây là lần đầu tiên tôi tiếp xúc với các chứng chỉ và mọi thông tin sẽ rất hữu ích. Bất kỳ điểm nào trong đúng hướng sẽ được đánh giá cao, cảm ơn trước.
CHỈNH SỬA:
Sử dụng OpenSSL Tôi có thể xem hai túi khóa bao phủ của .p12. Ví dụ:
openssl pkcs12 -in some_p12.p12 -info -noout
đầu ra:
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
Vì vậy, tôi đang tìm một vài điều. Nói chung, những gì chính xác là những keybags? Và cũng có thể, làm thế nào tôi có thể kiểm tra chúng/xác định có bao nhiêu tôi có mỗi .p12 tập tin bằng cách sử dụng Ruby. Cảm ơn.