2012-07-03 4 views
6

मैं आईओएस उपकरणों के लिए .mobileconfig प्रोफाइल साइन और एन्क्रिप्ट करने की कोशिश कर रहा हूं।आईओएस में मोबाइल कॉन्फ़िगरेशन प्रोफाइल कैसे एन्क्रिप्ट करें (ओटीए तैनाती में)?

हस्ताक्षर पूरी तरह से माणिक में openssl::pkcs7 हस्ताक्षर समारोह,

तथापि एन्क्रिप्ट समारोह का उपयोग कर, मैं एक एन्क्रिप्टेड डेटा प्राप्त लेकिन सफारी प्रोफ़ाइल कह "अवैध प्रोफाइल" स्थापित करने के लिए विफल रहता है का उपयोग कर काम करता है।

  1. .mobileconfig प्रोफ़ाइल से कौन सा डेटा वास्तव में एन्क्रिप्टेड है कि (डेटा) में चला जाता है .. (/ डेटा) (कुंजी) की धारा :

    इस संबंध में दो प्रश्न हैं एन्क्रिप्टेडपेलोड सामग्री (/ कुंजी)?

  2. क्या बाइनरी प्रारूप (.der) या बेस 64 एन्कोडेड में डेटा है?

इस संबंध में कोई भी सहायता उपयोगी होगी क्योंकि एपीएलई प्रोफाइल में एन्क्रिप्ट करने में किसी दस्तावेज़ का गंभीर रूप से कमी नहीं है।

+0

मुझे यकीन है कि आप कभी भी, यह करने के लिए सक्षम होगा जब से तुम प्रयास करने से पहले अपने प्रोफाइल को डिक्रिप्ट करने सफारी हिदायत नहीं कर सकते हैं नहीं कर रहा हूँ इसे सिस्टम कीचेन में आयात करने के लिए। चूंकि आप सफारी का जिक्र करते हैं, मुझे लगता है कि आप इसके माध्यम से प्रोफाइल स्थापित करने का प्रयास कर रहे हैं। शायद आप उन्हें सर्वर पर एन्क्रिप्टेड स्टोर कर सकते हैं, अनुरोध पर डिक्रिप्ट कर सकते हैं (एचटीएमएल फॉर्म में एक कुंजी दर्ज करें) और एसएसएल पर डिक्रिप्ट संस्करण को डिवाइस पर भेज सकते हैं? – Soup

उत्तर

0

यह प्रश्न another question जैसा है। कुछ संशोधनों के साथ यहां जवाब दोबारा पोस्ट करना!

मैंने रूबी और Plist मणि में उपलब्ध OpenSSL मॉड्यूल का उपयोग किया है।

पासकोड प्रतिबंध प्रोफ़ाइल पर विचार करें।

passcode_payload ={ 
       'PayloadUUID' => 'RANDOM_STRING_UUID', 
       'PayloadOrganization' => 'PayloadOrganization', 
       'PayloadVersion' => 1, 
       'PayloadIdentifier' => 'com.test.PayloadIdentifier', 
       'PayloadType' => 'Configuration', 
       'PayloadDisplayName' => 'PayloadDisplayName', 
       'PayloadRemovalDisallowed' => false 
      } 
    passcode_payload_content = { 
       'PayloadDescription' => 'PayloadDescription', 
       'PayloadDisplayName' => 'PayloadDisplayName', 
       'PayloadIdentifier' => 'PayloadIdentifier', 
       'PayloadOrganization' => 'PayloadOrganization', 
       'PayloadType' => 'com.apple.mobiledevice.passwordpolicy', 
       'PayloadUUID' => "RANDOM_STRING_UUID", 
       'PayloadVersion' => 1, 
       'allowSimple' => true, 
       'forcePIN' => true 
       'maxPINAgeInDays' => 20, 
       'minComplexChars' => 1, 
       'minLength' => 4, 
       'requireAlphanumeric' => true 
      } 

आमतौर पर एक सामान्य प्रोफ़ाइल के लिए passcode_payload_content शब्दकोशों की सरणी के रूप में passcode_payload['PayloadContent'] में चला जाता है।

passcode_payload [ 'PayloadContent'] = [passcode_payload_content]

लेकिन एक एन्क्रिप्टेड प्रोफ़ाइल के लिए, PayloadContent हटा दिया जाना चाहिए और EncryptedPayloadContentconfiguration profile key reference document प्रति के रूप में इस्तेमाल किया जाना चाहिए।

प्रश्न 1:.mobileconfig प्रोफ़ाइल है वास्तव में उस एन्क्रिप्टेड से कौन सा डेटा (डेटा) में चला जाता है .. (/ डेटा) (कुंजी) EncryptedPayloadContent की धारा (/ कुंजी)

से दस्तावेज़,

एक प्रोफ़ाइल एन्क्रिप्ट करने के लिए निम्न कार्य करें:

  • PayloadContent सरणी निकालें और एक उचित plist के रूप में यह क्रमानुसार।
  • ध्यान दें कि इस प्लिस्ट में शीर्ष-स्तरीय ऑब्जेक्ट एक सरणी है, शब्दकोश नहीं।
  • सीएमएस-सीरियलाइज्ड प्लिस्ट को लिफाफा डेटा के रूप में एन्क्रिप्ट करें। डीईआर प्रारूप में एन्क्रिप्टेड डेटा को सीरियलाइज़ करें।
  • प्रोफ़ाइल में एक डाटा plist आइटम के रूप में की मूल्य के रूप में धारावाहिक डेटा सेट, plist में महत्वपूर्ण EncryptedPayloadContent
  • के बाद से शीर्ष स्तर वस्तु का उपयोग कर एक सरणी

    passcode_payload_content_array = [passcode_payload_content] 
    

    होना चाहिए उचित plist

    to_be_encrypted_plist = passcode_payload_content_array.to_plist 
    

    प्रमाण पत्र पेलोड contening एन्क्रिप्ट करना टी,

    device_certificate = OpenSSL::X509::Certificate.new File.read('deviceIdentityCertificate.pem') 
    encrypted_payload = OpenSSL::PKCS7.encrypt([device_certificate],to_be_encrypted_plist, OpenSSL::Cipher::Cipher::new("des-ede3-cbc"),OpenSSL::PKCS7::BINARY) 
    

    प्रश्न 2:द्विपदीय प्रारूप (.der) या बेस 64 में डेटा इनकोडिंग है? der प्रारूप में मूल पेलोड को

    जोड़ें एन्क्रिप्टेड पेलोड सामग्री

    passcode_payload['EncryptedPayloadContent'] = StringIO.new(encrypted_payload.to_der) 
    
    संबंधित मुद्दे