- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
iOS. Приемы программирования - Вандад Нахавандипур
Шрифт:
Интервал:
Закладка:
openssl sha1 *.png *.json
SHA1([email protected])= e2aaf36f4037b2a4008240dc2d13652aad6a15bb
SHA1(background.png)= b21a92dedb89f8b731adabc299b054907de2347d
SHA1([email protected])= 6abab0f77fd89f1a213940fd5c36792b4cc6b264
SHA1(icon.png)= ed698ab24c5bd7f0e7496b2897ec054bbd4 26747
SHA1([email protected])= 90381c84cfea22136c951ddb3b368ade71f49eef
SHA1(logo.png)= c3bd8c5533b6c9f500bbadbdd957b9eac8a6bfe9
SHA1([email protected])= 1a56a5564dec5e8742ad65dc47aa9bd64c39222f
SHA1(thumbnail.png)= 58883d22196eb73f33ea556a4b7ea735f90a6213
SHA1([email protected])= 0903df90165ef1a8909a15b4f652132c273 68560
SHA1(manifest.json)= 894f795b991681de8b12101afb8c2984bf8d0f65
SHA1(pass.json)= c5acddbab742f488867c34882c55ca14efff0de9
Мы рассчитали SHA1-хеши всех файлов, в том числе хеш manifest.json. Однако SHA1-хеш файла manifest.json нам не понадобится, так как он содержит хеши всех остальных файлов, а своего собственного хеша не имеет. Поэтому мы просто игнорируем хеш файла manifest.json.
Итак, теперь требуется заполнить файл manifest.json значениями SHA1 всех остальных файлов — эти хеши мы только что рассчитали:
{
«background.png»: «b21a92dedb89f8b731adabc299b054907de2347d»,
«[email protected]»: «6abab0f77fd89f1a213940fd5c36792b4cc6b264»,
«[email protected]»: «e2aaf36f4037b2a4008240dc2d13652aad6a15bb»,
«icon.png»: «ed698ab24c5bd7f0e7496b2897ec054bbd4 26747»,
«[email protected]»: «90381c84cfea22136c951ddb3b368ade71f49eef»,
«logo.png»: «c3bd8c5533b6c9f500bbadbdd957b9eac8a6bfe9»,
«[email protected]»: «1a56a5564dec5e8742ad65dc47aa9bd64c39222f»,
«pass.json»: «c5acddbab742f488867c34882c55ca14efff0de9»,
«thumbnail.png»: «58883d22196eb73f33ea556a4b7ea735f90a6213»,
«[email protected]»: «0903df90165ef1a8909a15b4f652132c273 68560»
}
Пока все понятно. Переходим к следующему этапу: нам нужно снабдить талон цифровой подписью.
См. также
Раздел 19.1.
19.5. Цифровое подписывание талонов
Постановка задачи
Вы подготовили каталог pass с файлом описания и файлом pass.json, а также все изображения. Теперь вы хотите снабдить цифровой подписью каталог с талоном и его содержимое. Это требуется для создания файла талона, готового к распространению.
Решение
Для подписывания талонов используйте OpenSSL.
Обсуждение
Каждый талон требуется подписывать с помощью сертификата, созданного в разделе 19.1. Для подписывания талонов мы вновь будем использовать команду openssl в окне терминала. Перед тем как читать дальше, убедитесь в том, что создали каталог pass и поместили в него файлы pass.json, manifest.json и все изображения. Этот каталог не обязательно должен называться pass. Тем не менее, чтобы было удобнее читать этот раздел и оставшиеся разделы этой главы, лучше не импровизировать и назвать этот каталог с файлами именно pass.
Некоторые читатели могли запутаться в том, куда относятся некоторые ключи и для чего нужны те или иные сертификаты. Надеюсь, в этом разделе ситуация прояснится. Когда вы запрашиваете новый сертификат на портале инициализации iOS, в связке ключей на вашем компьютере создается закрытый ключ, а также файл запроса на подпись сертификата (CSR). Сертификат будет сгенерирован Apple. Когда вы скачаете файл сертификата, он будет иметь расширение. cer. Это просто сертификат! Когда вы импортируете его в связку ключей, результирующий файл будет иметь расширение. p12. В этом файле будут содержаться и сертификат, и закрытый ключ к нему.
Прежде чем мы вплотную займемся процессом подписывания, нам потребуется экспортировать созданный сертификат из связки ключей. Не забывайте, что сертификат, полученный вами на портале инициализации iOS, — это не тот самый сертификат, который экспортируется из связки ключей. Поэтому при экспорте сертификата для идентификатора типа талона обязательно выполните следующие шаги.
1. Откройте на Mac программу для доступа к связке ключей (Keychain Access).
2. В левой верхней части окна в области Keychains (Связки ключей) убедитесь, что вы выбрали связку ключей для входа в систему (Login Keychain).
3. В области Category (Категория) слева выберите My Certificates (Мои сертификаты).
4. Найдите ваш сертификат для идентификатора типа талона в правой части экрана и щелкните на нем правой кнопкой мыши.
5. Теперь выберите функцию Export (Экспортировать) (рис. 19.14) и завершите экспорт вашего файла на диск в виде файла. p12. Не сохраняйте сертификат в каталоге pass. Сертификат должен находиться вне этого каталога.
Рис. 19.14. Экспорт сертификата идентификатора типа талона из программы Keychain Access
6. После того как вы попытаетесь экспортировать свой сертификат, система запросит у вас два пароля: пароль, который требуется задать для сертификата, и пароль вашей учетной записи пользователя в OS X — это должен быть пользователь, владеющий доступом к связке ключей. Первый пароль, сопровождающий сертификат, гарантирует, что без этого пароля сертификат нельзя будет импортировать на произвольную машину. Второй пароль удостоверяет, что человек, импортирующий сертификат из связки ключей, действительно имеет на это право. Например, если вы отойдете от компьютера, оставив его незаблокированным, а ваш приятель попытается экспортировать сертификат из вашей связки ключей, для этого ему придется указать пароль вашей учетной записи. В любом случае рекомендуется гарантировать, что у разных учетных записей в одной системе разные пароли. Например, если вы с братом работаете на одном и том же Mac, то ваш пароль должен быть уникальным именно для вашей учетной записи. Если пароль у вас будет одинаковым, это поставит под сомнение всю систему безопасности вашего компьютера.
Убедитесь, что не сохраняете сертификат в каталоге pass. Нельзя рассылать сертификат вместе с талоном.
Итак, вы экспортировали сертификат. У вас должен был получиться файл, который, возможно, называется Certificates.p12. Теперь нужно разделить этот файл на сертификат как таковой и закрытый ключ. Однако если вы подписываете талон с помощью OpenSSL, то вам приходится передавать сертификат и закрытый ключ по отдельности. Чтобы получить из файла Certificates.p12 закрытый ключ и сертификат (этот файл мы только что экспортировали из программы Keychain Access), выполните следующее.
1. Откройте окно терминала, если еще не сделали этого.
2. Перейдите в каталог, в котором вы сохранили экспортированный сертификат (файл. p12).
3. Чтобы получить сертификат, введите в окне терминала следующую команду:
openssl pkcs12 — in «Certificates.p12» — clcerts — nokeys
— out «exported-certificate»
После того как вы введете эту команду, система сразу же потребует у вас присвоить экспортированному сертификату пароль. В этом примере я задаю пароль 123, но вы придумайте пароль получше.
4. Чтобы получить закрытый ключ из сертификата, экспортированного из связки ключей, выполните в окне терминала следующую команду:
openssl pkcs12 — in «NAME OF YOUR.P12 CERTIFICATE FILE»
— nocerts — out «NAME OF THE OUTPUT KEY»
Я назвал экспортированный закрытый ключ exported-key, но вы можете назвать его и иначе, если желаете:
openssl pkcs12 — in «Certificates.p12» — nocerts — out «exported-key»
От вас вновь потребуется ввести пароли для ключа. Для моего ключа я указал пароль 1234, чтобы его можно было легко запомнить. Такой же пароль я задал для сертификата. Но если вы работаете в организации, где безопасности уделяется должное внимание, такой пароль вам, разумеется, не подойдет. Выберите пароль, который кажется вам осмысленным. Для максимальной защиты необходимо гарантировать, что все пароли для экспортируемых вами сертификатов/ключей являются уникальными.
Замечательно. Теперь у нас есть файлы экспортированного сертификата и закрытого ключа. Можем перейти к подписыванию талона с их помощью. Чтобы это сделать, выполните следующие шаги.
1. Если вы еще не сделали этого, поместите все файлы, относящиеся к талону (pass.json, manifest.json и все соответствующие изображения), в каталог pass. Вы можете назвать этот каталог как хотите, но в рамках этого раздела рекомендую давать создаваемым каталогам такие же названия, какие даю я. Так нам будет проще ориентироваться, в каком каталоге мы находимся и что делаем в окне терминала.
2. Воспользуйтесь командой cd, чтобы перейти из текущего рабочего каталога в каталог pass, где находятся все интересующие нас файлы талона.
3. Выполните команду rm — f.DS_Store, чтобы убедиться, что в каталоге pass отсутствуют ненужные скрытые системные файлы OS X. Вы также должны проверить, перечислены ли все файлы из этого каталога в файле manifest.json, где наряду с самими файлами должны находиться и их SHA1-хеши. Если в этот каталог просочатся какие-то другие файлы (как перечисленные в файле описания, так и не указанные там), то талон получится недействительным. Его не удастся прочитать в приложении Passbook ни на устройстве с iOS, ни на симуляторе.

