【发布时间】:2013-03-12 14:18:36
【问题描述】:
是否可以构建在 iOS 设备上运行的 SSL/TLS 服务器?如果是,怎么做?
我的疑问与这些问题有关:在设备上,我可以即时创建自签名证书以供以后使用吗?或者我可以告诉 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。
【问题讨论】:
标签: cocoa-touch encryption ssl cocoaasyncsocket