【问题标题】:iOS - Simple SSL socket connectioniOS - 简单的 SSL 套接字连接
【发布时间】:2013-12-25 20:55:46
【问题描述】:

在 iOS 中创建 SSL 套接字连接的正确方法是什么?

我用 Java 实现了一个 SSL 服务器:

  • 使用商店密码创建 SSL 证书
  • 通过设置系统属性“javax.net.ssl.keyStore”和“javax.net.ssl.keyStorePassword”来加载
  • 使用 SSLServerSocket 工厂创建 SSLServerSocket

现在我想创建一个客户端应用程序,它在线程中打开一个套接字连接并通过它进行通信。创建此类连接并与我的服务器证书进行通信的正确方法是什么?

【问题讨论】:

    标签: ios iphone sockets ssl


    【解决方案1】:

    如果您制作的是客户端应用程序而不是服务器应用程序,则无需创建证书。 在 iOS 中,有很多方法,最简单的是使用AFNetworking 库。 只需将 url (https) 放入其中一个方法中,就可以了。 我用过很多次。只需花 5 分钟阅读文档。

    【讨论】:

    • SSLServerSocket 就像人们想象的那样,是一个套接字服务器,而不是一个 Web 服务器。
    • @guiseppe 我不想只创建一个打开某种 HTTPS 连接的客户端。我想创建一个 SSL 套接字连接到我自己的 Java 服务器,我无法发送纯字节......
    【解决方案2】:

    您可以根据this question 的答案使用NSInputStreamNSOutputStream 使用TLS 进行连接。

    编辑: 我建议不要在该答案中使用 SSL 设置:

    NSDictionary *settings = @{ 
        (__bridge NSString *)kCFStreamPropertySocketSecurityLevel:(__bridge NSString *)kCFStreamSocketSecurityLevelNegotiatedSSL 
    };
    

    这使用以下默认值:

    kCFStreamSSLAllowsExpiredCertificates:  NO
    kCFStreamSSLAllowsAnyRoot: NO
    kCFStreamSSLValidatesCertificateChain: YES
    

    如果您想将安全级别设置为使用特定版本的 SSL 或 TLS,请查看 CFSocketStream.h 中的值。

    【讨论】:

    • 谢谢,但是使用 kCFStreamSSLAllowsAnyRoot 安全吗?
    • 安全,是的,因为它是一个有效的选项。它安全吗?没有。
    • 那么......创建安全连接的正确方法是什么? ;)
    • 好的,到目前为止一切顺利,但由于我的流不再允许“任何根”,我如何让我的服务器 SSL 证书被允许?
    • 如果您需要允许任何 root,请应用该设置。如果您想使用自定义根证书,请确保它位于您设备上的钥匙串中。
    猜你喜欢
    • 2013-10-14
    • 2011-12-03
    • 2020-06-30
    • 2013-09-18
    • 2016-08-19
    • 1970-01-01
    • 2023-03-26
    • 2014-06-30
    • 1970-01-01
    相关资源
    最近更新 更多