iPhone应用程序的安全登录和会话管理
Posted
技术标签:
【中文标题】iPhone应用程序的安全登录和会话管理【英文标题】:secure log in and session management for iphone app 【发布时间】:2010-11-08 08:39:54 【问题描述】:我有一个服务器(不是一个网络服务器,只是低级 tcp 套接字服务器),我想知道如何通过 iphone 安全登录(可能使用 ssl)、管理会话和通信与服务器(可能使用 aes)。我的想法是“使用 ssl 登录并交换 aes 密钥”和“以后使用该 aes 密钥进行通信”。有人有更好的主意吗?请提供一些示例代码来做这些事情。
【问题讨论】:
+1 用于询问代码。通常是-1,但不是在这个区域。加密太难了。没有小错误。 【参考方案1】:看看CFReadStream 和CFWriteStream。您也可以使用 CFStream 类型设置 SSL 连接。
要设置 SSL 连接,您需要类似以下内容:
NSString *host = @"example.com";
unsigned port = 1234;
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFHostRef remoteHost = CFHostCreateWithName(kCFAllocatorDefault,
(CFStringRef) host);
//Create a socket pair for reading and writing
CFStreamCreatePairWithSocketToCFHost(kCFAllocatorDefault,
remoteHost,
port,
&readStream,
&writeStream);
//Setup ssl properties - Customize it to yout needs
NSDictionary *sslProperties = [NSDictionary dictionaryWithObjectsAndKeys:
(NSString *)kCFStreamSocketSecurityLevelNegotiatedSSL, kCFStreamSSLLevel,
kCFBooleanTrue, kCFStreamSSLAllowsAnyRoot,
kCFBooleanFalse, kCFStreamSSLValidatesCertificateChain,
kCFNull, kCFStreamSSLPeerName,
kCFBooleanFalse, kCFStreamSSLIsServer,
nil];
CFReadStreamSetProperty(readStream,
kCFStreamPropertySSLSettings,
sslProperties);
CFWriteStreamSetProperty(writeStream,
kCFStreamPropertySSLSettings,
sslProperties);
CFStreamClientContext readContext = 0, self, NULL, NULL, NULL;
CFOptionFlags registeredReadEvents = kCFStreamEventHasBytesAvailable
| kCFStreamEventErrorOccurred
| kCFStreamEventEndEncountered
| kCFStreamEventOpenCompleted;
//replace OnReadStreamEvent with your own callback
if(CFReadStreamSetClient(readStream, registeredReadEvents, OnReadStreamEvent, &readContext))
CFReadStreamScheduleWithRunLoop(readStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);
CFStreamClientContext writeContext = 0, self, NULL, NULL, NULL;
CFOptionFlags registeredWriteEvents = kCFStreamEventCanAcceptBytes
| kCFStreamEventErrorOccurred
| kCFStreamEventOpenCompleted;
//replace OnWriteStreamEvent with your own callback
if(CFWriteStreamSetClient(writeStream, registeredWriteEvents, OnWriteStreamEvent, &writeContext))
CFWriteStreamScheduleWithRunLoop(writeStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);
这是从文档中可能难以弄清楚的部分。也许这可以帮助您入门。
【讨论】:
一个 c++ 替代品可能是 Boost.Asio以上是关于iPhone应用程序的安全登录和会话管理的主要内容,如果未能解决你的问题,请参考以下文章
在 iPhone 上的 Web 应用程序中维护 PHP 会话