шифровать данные с помощью ненадежного сертификата на ios - PullRequest
2 голосов
/ 20 марта 2012

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

$ openssl genrsa -out private.pem 1024
$ openssl rsa -in private.pem -out public.pem -outform PEM -pubout

Когда я шифрую сообщение, я использую этот код для создания SecCertificateRef:

    NSData *certData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"wspublickey" ofType:@"pem"]];
SecCertificateRef cert = SecCertificateCreateWithData(kCFAllocatorDefault, (__bridge CFDataRef)certData);

После этой инструкции cert == nil я провожу много времени, пытаясь понять пост об этом (я понимаю слезу асимметричных ключей, но я совершенно неопытен в ее реализации). Мои выводы заключаются в том, что мой сертификат не заслуживает доверия, и поэтому SecCertificateCreateWithData возвращает ноль. У меня вопрос, как я должен зашифровать свои данные, если я не хочу платить доверенный сертификат? Извините за плохое понимание реализации шифрования данных с помощью сертификата открытого ключа RЯ, но я потерялся и не знаю, как мне решить эту проблему. Спасибо за вашу помощь. Сообщение прочитано:

«сертификат недоверенного сервера» на iPhone http://omegadelta.net/2011/01/17/ios-untrusted-server-certificate/ http://lists.apple.com/archives/apple-cdsa/2009/Jun/msg00012.html

Все, что я хочу, это сделать эквивалент команды:

$ openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl

Ответы [ 3 ]

1 голос
/ 21 марта 2012

Наконец я нашел то, что искал. То, что мне нужно, как CodeInChaos, - это мой самоподписанный сертификат С этим мой код работает нормально. Для этого я использую эту команду:

openssl req -x509 -out public_key.der -outform der -new -newkey rsa:1024 -keyout private_key.pem -days 3650

Я нашел этот пост очень полезным:

http://blog.iamzsx.me/show.html?id=155002

Он отвечает на множество вопросов. Не на английском, но Google переведен хорошо, так что это не большая проблема. Я надеюсь, что это поможет кому-то с той же проблемой.

0 голосов
/ 11 апреля 2013

Проблема исходит из формата файла. вы используете PEM вместо DER с двоичным форматом для iOS API SecCertificateCreateWithData( )

0 голосов
/ 20 марта 2012

Чтобы сделать это безопасно, вы должны использовать HTTPS или SSL / TLS.Если вы не хотите раскошелиться на 5 долларов за сертификат, вы можете использовать самозаверяющий сертификат и использовать хардкорный открытый ключ.Не нужно создавать собственный протокол, это пустая трата времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...