2013-03-12 5 views
2

Возможно создание сервера SSL/TLS, работающего на устройстве iOS? Если да, то как?Сервер SSL/TLS, запущенный на устройстве iOS

Мое сомнение связано с этими вопросами: на устройстве я могу создать на лету самозаверяющий сертификат, который будет использоваться с этого момента? Или я могу сказать SSL/TLS не использовать сертификаты?

В моем приложении iOS я использую AsyncSocket. Приложение одновременно является клиентом и сервером.

стороне клиента реализуется следующим образом:

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port { 
    // Don't even validate the certificate chain 
    NSDictionary *settings = @{(NSString *)kCFStreamSSLValidatesCertificateChain : (id)kCFBooleanFalse}; 

    [sock startTLS:settings]; 
} 

- (void)onSocketDidSecure:(AsyncSocket *)sock { 
    // omitted: send the message... 
} 

стороне сервера (который работает на другом устройстве IOS) осуществляется таким образом:

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port { 
    // Don't even validate the certificate chain 
    NSDictionary *settings = @{(NSString *)kCFStreamSSLValidatesCertificateChain : (id)kCFBooleanFalse, 
          (NSString *)kCFStreamSSLIsServer : (id)kCFBooleanTrue}; 

    [sock startTLS:settings]; 
} 

- (void)onSocketDidSecure:(AsyncSocket *)sock { 
    // omitted: read the message... 
} 

Однако, когда клиент пытается подключиться к серверу, вызывается метод делегата onSocket:willDisconnectWithError: с ошибкой Domain=kCFStreamErrorDomainSSL Code=-9848.

ответ

1

Возможно создание сервера SSL/TLS, работающего на устройстве iOS? Если да, то как?

Абсолютно. Я использовал CocoaHTTPServer с SSL/TLS как на тренажере, так и на устройстве для тестирования. Чтобы использовать клиентские сертификаты, вам необходимо внести некоторые изменения, большинство из них находятся в patch в их списке проблем GitHub.

Можете ли вы создать сертификаты на лету на iOS? Не то, что я знаю из.

Можете ли вы сказать, что SSL не использует сертификаты? Мммм. Даже если бы вы могли, какой смысл использовать SSL? Сертификаты - это то, что «обеспечивает» транспорт. SSL - это модель доверия, при этом стороны на обоих концах ссылки оценивают доверие другой стороны. Если вы создаете сертификаты «на лету» или пытаетесь не использовать период сертификатов, вы аннулируете эту модель доверия - вы ничего не добиваетесь.

+0

Спасибо за ваш ответ! Если я не могу создать сертификат на iOS, какой сертификат вы бы использовали? Вы внедряете его в комплект приложения? Но так как приложение распространяется в App Store, возможно ли, чтобы злоумышленник экстраполировал его и расшифровал передачи, используя закрытый ключ, содержащийся в нем? – Dev

+1

Да, вам нужно было бы создать его самостоятельно и включить в свое приложение - и да, это означает, что кто-то может восстановить этот сертификат из пакета приложений. Ты, черт возьми, проклят, если не сделаешь. Вы можете поместить сертификат в брелок для приложения в первый раз и сохранить его там, но независимо от того, какой сертификат должен прибыть откуда-то, и злоумышленник может легко получить сертификат и пароль. – quellish

+0

Но если я защищу сертификат с паролем? Могу ли я прочитать его с iOS? (Очевидно, это означает, что приложение должно иметь несколько затененных паролей в двоичном формате, но это все же лучше, чем ничего!) PS Я прочитал патч для CocoaHTTPServer [у вас есть ссылка] (https://github.com/robbiehanson/CocoaHTTPServer/pull/26), но, похоже, он относится к клиенту, и я не могу понять, как он может помочь мне на стороне сервера. – Dev

Смежные вопросы