Возможно создание сервера 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
.
Спасибо за ваш ответ! Если я не могу создать сертификат на iOS, какой сертификат вы бы использовали? Вы внедряете его в комплект приложения? Но так как приложение распространяется в App Store, возможно ли, чтобы злоумышленник экстраполировал его и расшифровал передачи, используя закрытый ключ, содержащийся в нем? – Dev
Да, вам нужно было бы создать его самостоятельно и включить в свое приложение - и да, это означает, что кто-то может восстановить этот сертификат из пакета приложений. Ты, черт возьми, проклят, если не сделаешь. Вы можете поместить сертификат в брелок для приложения в первый раз и сохранить его там, но независимо от того, какой сертификат должен прибыть откуда-то, и злоумышленник может легко получить сертификат и пароль. – quellish
Но если я защищу сертификат с паролем? Могу ли я прочитать его с iOS? (Очевидно, это означает, что приложение должно иметь несколько затененных паролей в двоичном формате, но это все же лучше, чем ничего!) PS Я прочитал патч для CocoaHTTPServer [у вас есть ссылка] (https://github.com/robbiehanson/CocoaHTTPServer/pull/26), но, похоже, он относится к клиенту, и я не могу понять, как он может помочь мне на стороне сервера. – Dev