是否可以构建在 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
。