Skip to content

Instantly share code, notes, and snippets.

@skazhy
Last active March 15, 2022 05:47
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save skazhy/9776258 to your computer and use it in GitHub Desktop.
Save skazhy/9776258 to your computer and use it in GitHub Desktop.
Configuration profile example
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadIdentifier</key>
<string>com.fullcontact</string>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadDisplayName</key>
<string>FullContact Blog</string>
<key>PayloadUUID</key>
<string>f6c24163-66fb-4a42-a625-d8f22d23f371</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadType</key>
<string>com.apple.webClip.managed</string>
<key>PayloadUUID</key>
<string>f78c5002-3907-4f67-b631-d41c44283628</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>URL</key>
<string>https://fullcontact.com/developers</string>
<key>Label</key>
<string>FullContact Blog</string>
<key>Icon</key>
<data>
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
</data>
<key>PayloadIdentifier</key>
<string>com.fullcontact.blog</string>
</dict>
</array>
</dict>
</plist>
# Install Sinatra gem for this script to work.
#
# When installed run `ruby server.rb` and open `localhost:4567` in browser on Mac
# or `your-hostname:4567` on your iOS device (when it shares network with server)
require 'openssl'
require 'sinatra'
class Cert
attr_accessor :cert, :keypair
end
# Isssue a self-signed certificate for signing
def issue_cert
s = Cert.new
s.keypair = OpenSSL::PKey::RSA.new(1024)
s.cert = OpenSSL::X509::Certificate.new
s.cert.version = 2
s.cert.serial = 42
s.cert.subject = OpenSSL::X509::Name.parse("/O=FullContact Demo/CN=SignerCertificate")
s.cert.issuer = s.cert.subject
s.cert.public_key = s.keypair.public_key
s.cert.not_before = Time.now
s.cert.not_after = Time.now + (86400 * 365)
s.cert.sign(s.keypair, OpenSSL::Digest::SHA1.new)
s
end
cert = issue_cert
set :bind, '0.0.0.0'
# Serve the configuration profile from the root url
get "/" do
doc = File.read("payload.xml")
headers["Content-Type"] = "application/x-apple-aspen-config"
headers["Content-Disposition"] = "attachment; filename=blog.mobileconfig"
a = OpenSSL::PKCS7.sign(cert.cert, cert.keypair, doc)
a.to_der
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment