gpt4 book ai didi

iphone - 使用的套接字上的 NSStream SSL

转载 作者:太空宇宙 更新时间:2023-11-03 12:42:30 26 4
gpt4 key购买 nike

我正在编写一个在 iphone 上使用 NSStream 的 SSL 功能的应用程序。我知道 SSL 有效,因为我可以使用 SSL 直接连接服务器。
我遇到了一个问题,使用 starttls 的协议(protocol)要求我在不安全的套接字上进行通信,发送 starttls 命令,然后为 SSL 重用相同的套接字。据我所知,nsstream 连接无法重复使用,并且在打开连接后我无法在它们上启动 SSL。

我考虑过创建自己的套接字,手动在其上进行通信,然后使用现有套接字设置 NSstream 并以这种方式启动 SSL。但是,似乎套接字上的通信将其置于我无法在其上启动 SSL 的状态。任何将套接字用于 nsstream 的尝试都会导致错误。

有什么想法吗?

最佳答案

这是执行此操作的正确方法。虽然这样做(在套接字连接后设置属性)没有记录,但这是直接来 self 的 Monal xmpp 客户端的代码,苹果从未在应用商店中给我任何问题。

 NSInputStream *iStream;
NSOutputStream *oStream;


CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)server, port, &iStream, &oStream);


[iStream open];
[oStream open];

一旦连接被打开并且你得到 NSStreamEventOpenCompleted 并且 startTLS 命令已经从客户端发送到主机:

NSDictionary *settings = [ [NSDictionary alloc ] 
initWithObjectsAndKeys:
[NSNumber numberWithBool:YES], @"kCFStreamSSLAllowsExpiredCertificates",
[NSNumber numberWithBool:YES], @"kCFStreamSSLAllowsExpiredRoots",
[NSNumber numberWithBool:YES], @"kCFStreamSSLAllowsAnyRoot",
[NSNumber numberWithBool:NO], @"kCFStreamSSLValidatesCertificateChain",
[NSNull null],@"kCFStreamSSLPeerName",
@"kCFStreamSocketSecurityLevelNegotiatedSSL",
@"kCFStreamSSLLevel",
nil ];
CFReadStreamSetProperty((CFReadStreamRef)iStream,
@"kCFStreamPropertySSLSettings", (CFTypeRef)settings);
CFWriteStreamSetProperty((CFWriteStreamRef)oStream,
@"kCFStreamPropertySSLSettings", (CFTypeRef)settings);

关于iphone - 使用的套接字上的 NSStream SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2237735/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com