2

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

4

1 回答 1

1

是否可以构建在 iOS 设备上运行的 SSL/TLS 服务器?如果是,如何?

绝对地。我在模拟器和设备上都使用了带有 SSL/TLS 的CocoaHTTPServer来进行测试。要使用客户端证书,您需要进行一些修改,其中大部分都在其 GitHub 问题列表中的补丁中。

您可以在 iOS 上即时创建证书吗?从来没听说过。

你能告诉 SSL 不使用证书吗?嗯。即使可以,使用 SSL 又有什么意义呢?证书是“保护”传输的东西。SSL 是一种信任模型,链路两端的各方评估另一方的信任。如果您正在动态创建证书,或者试图不使用证书期限,那么您就是在使该信任模型无效 - 您并没有保护任何东西。

于 2013-03-21T07:17:10.813 回答