Приложение для iPhone с клиентскими сертификатами SSL

Я создаю приложение для iPhone, которое должно получить доступ к веб-сервису по https использование клиентских сертификатов. Если я поместил клиентский сертификат (в формат pkcs12) в комплекте приложений, я в состоянии загрузить его в приложение и выполнить https вызов (в основном благодаря stackoverflow.com).

Однако мне нужен способ распределить приложение без любых сертификатов и предоставить пользователю право предоставлять свой собственный сертификат. Я думал, что просто сделаю это, давая пользователю команду импортировать сертификат в профилях iPhone (настройки-> общий-> профили), который является тем, что Вы получаете путем открытия .p12 файла в Mail.app, и затем я получил бы доступ к тому объекту в своем приложении. Я ожидал бы, что сертификаты в профилях доступны через API связки ключей, но я предполагаю, что я неправ в этом.

1) Существует ли способ получить доступ к сертификату, который я уже загрузил в профиле iPhone в моем приложении?

2) То, что другие опции я имею для загрузки пользователя, определило сертификат в моем приложении? Единственная вещь, которую я могу придумать, обеспечивает некоторый интерфейс, где пользователь может дать URL своему .p12 cerificate, который я могу тогда загрузить в связку ключей приложения для более позднего использования, но это не точно пользователь-friednly. Я ищу что-то, что позволило бы пользователю помещать сертификат на телефон (пошлите его по электронной почте себе), и затем загрузите его в моем приложении.

20
задан Pavel Georgiev 10 January 2010 в 13:54
поделиться

4 ответа

Ой, это вызывает болезненные воспоминания об октябре / ноябре 2009 года. Мне удалось успешно заставить работать сертификаты на стороне клиента, но мне пришлось перенести libcurl на iPhone (что было непросто, поскольку в то время действовало соглашение о неразглашении информации).

Я не занимался разработкой приложений для iPhone больше года, поэтому не знаю, сколько из них изменилось, но на вашем месте я бы сначала попытался обойтись без сертификатов на стороне клиента, и если вам абсолютно необходимо их вы можете использовать libcurl с сертификатами в формате PEM.

0
ответ дан 30 November 2019 в 01:33
поделиться

Если файл .p12 не слишком большой, вы можете закодировать его с помощью Base64 , а затем вставить ссылку в электронное письмо с настраиваемой схемой URL, например:

myapp://certificate/<base 64 data>

Пользователь нажимает ссылку, ваше приложение где-то сохраняет сертификат для использования в будущем. Просто убедитесь, что Mail.app на iPhone не искажает электронную почту.

1
ответ дан 30 November 2019 в 01:33
поделиться

Аннотации не только для java, они также существуют в c++, они так или иначе похожи на аннотации из java.

// MyCode.h
# include <CodeAnalysis/SourceAnnotations.h>
using namespace vc_attributes;
class CMyClass
{
public:
       void f ( [Pre ( Valid = Yes )] int *pWidth );
// code ...
};

// MyCode.cpp
#include "MyCode.h"
void CMyClass::f ( [Pre (Valid = Yes)] int pWidth )
{
}

Дополнительную информацию можно найти в MSDN: http://msdn.microsoft.com/en-us/library/ms182036 (VS.80) .aspx

-121--4553974-

Необходимо просто создать файл cron, а затем использовать exec для настройки этого cron:

$cron_file = 'cron_filename';
// Create the file
touch($cron_file); 
// Make it writable
chmod($cron_file, 0777); 
// Save the cron
file_put_contents($cron_file, '* * * * * your_command'); 
// Install the cron
exec('crontab cron_file');

Это требует, чтобы пользователь, под которым запущен PHP, имел право создавать crontabs. Этот файл cron по умолчанию заменяет любые другие cron для этого пользователя, поэтому не забудьте спросить пользователя, хочет ли он применить cron. Также убедитесь, что папка, в которую вы записываете файл crontab, доступна для записи.

-121--4321235-

Работает ли для вас код, предложенный в разделе Поиск сертификата в Keychain ?

0
ответ дан 30 November 2019 в 01:33
поделиться

Я пытался с этим:

NSString *thePath = [[NSBundle mainBundle] pathForResource:@"certificate" ofType:@"p12"]; 
NSData *PKCS12Data = [[NSData alloc] initWithContentsOfFile:thePath]; 
CFDataRef inPKCS12Data = (CFDataRef)PKCS12Data; 
CFStringRef password = CFSTR("pass"); 
const void *keys[] = { kSecImportExportPassphrase }; 
const void *values[] = { password }; 
CFDictionaryRef optionsDictionary = CFDictionaryCreate(NULL, keys, values, 1, NULL, NULL); 
CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL); 
SecPKCS12Import(inPKCS12Data, optionsDictionary, &items); 

inpkcs12data правильно, но элементы пустые. Что происходит?

3
ответ дан 30 November 2019 в 01:33
поделиться