首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS Openssl套接字连接

iOS Openssl套接字连接
EN

Stack Overflow用户
提问于 2019-07-16 08:16:05
回答 1查看 138关注 0票数 0

我正在尝试通过证书验证连接到本地服务器。收到来自服务器的奇怪的响应消息,我不知道如何解析它们。

我和服务器在同一个wifi上,我可以在终端上得到响应

openssl s_client -connect 18.21.19.162:9000

我已经尝试为NSStreamSocketSecurityLevelKey设置不同的安全级别。我已经尝试为SSLSettings添加不同的值。

代码语言:javascript
复制
-(void)setSSL
{
    NSLog(@"setting SSL");

    NSDictionary *sslSettings = [ [NSDictionary alloc]initWithObjectsAndKeys:
                                 [NSNumber numberWithBool:NO], kCFStreamSSLValidatesCertificateChain,
                                 [NSNumber numberWithBool:NO], kCFStreamSSLIsServer,
                                 nil ];
    CFReadStreamSetProperty((CFReadStreamRef)inputStream,kCFStreamPropertySSLSettings, (CFTypeRef)sslSettings);
    CFWriteStreamSetProperty((CFWriteStreamRef)outputStream, kCFStreamPropertySSLSettings, (CFTypeRef)sslSettings);

}

- (void)open {

    NSLog(@"Opening streams.");

    outputStream = (__bridge NSOutputStream *)writeStream;
    inputStream = (__bridge NSInputStream *)readStream;

    [outputStream setDelegate:self];
    [inputStream setDelegate:self];

    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

    [inputStream setProperty:NSStreamSocketSecurityLevelTLSv1 forKey:NSStreamSocketSecurityLevelKey];

    [outputStream open];
    [inputStream open];

    NSLog(@"connected");
}

- (IBAction)connectBtnEvent:(id)sender {

   NSString *ip = @"18.21.19.162";
   NSString *port = @"9000";

    NSLog(@"Setting up connection to %@ : %i", ip, [port intValue]);
    CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (__bridge CFStringRef) ip, [port intValue], &readStream, &writeStream);

    [self open];
}

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {

    NSLog(@"stream event %lu", streamEvent);

    receivedData = @"";

    switch (streamEvent) {

        case NSStreamEventOpenCompleted:
        {
            NSLog(@"Stream opened");

            [self setSSL];
        }

            break;
        case NSStreamEventHasBytesAvailable:
        {
            //Trust object is available here
            NSLog(@"has byte available");
            if (theStream == inputStream)
            {
                uint8_t buffer[2048];
                NSInteger len;

                while ([inputStream hasBytesAvailable])
                {
                    len = [inputStream read:buffer maxLength:sizeof(buffer)];
                    if (len > 0)
                    {
                       NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
                       // NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSUTF8StringEncoding];

                        if(receivedData == nil || receivedData.length == 0)
                        {
                            receivedData = output;
                        }
                        else
                        {
                            receivedData = [receivedData stringByAppendingString:output];
                        }
                        if (output != nil)
                        {
                            NSLog(@"server said: %@", output);
                            [self messageReceived:output];
                        }
                    }
                }

                NSLog(@"receieved data: %@", receivedData);
            }
        }


            break;

        case NSStreamEventHasSpaceAvailable:
        {
            //Trust object is available here
             NSLog(@"Stream has space available");

        }

            break;

        case NSStreamEventErrorOccurred:
        {
            NSLog(@"has error occured: %@",[theStream streamError].localizedDescription);
        }

            break;

        case NSStreamEventEndEncountered:
        {
            [self close];

            NSLog(@"end encounter");
        }

            break;
        default:
            NSLog(@"Unknown event");
            break;
    }

}

我希望看到一个标识握手字符串返回。

但是我得到了下面的输出。服务器响应\^B,不确定这是什么,或者我没有正确解析它。

代码语言:javascript
复制
2019-07-15 17:01:06.180575-0700 ProxyTest[3222:881204] Opening streams.
2019-07-15 17:01:06.186495-0700 ProxyTest[3222:881204] connected
2019-07-15 17:01:06.194703-0700 ProxyTest[3222:881204] stream event 1
2019-07-15 17:01:06.194795-0700 ProxyTest[3222:881204] Stream opened
2019-07-15 17:01:06.194822-0700 ProxyTest[3222:881204] setting SSL
2019-07-15 17:01:06.195147-0700 ProxyTest[3222:881204] stream event 1
2019-07-15 17:01:06.195197-0700 ProxyTest[3222:881204] Stream opened
2019-07-15 17:01:06.195218-0700 ProxyTest[3222:881204] setting SSL
2019-07-15 17:01:06.265101-0700 ProxyTest[3222:881204] stream event 4
2019-07-15 17:01:06.265194-0700 ProxyTest[3222:881204] Stream has space available
2019-07-15 17:01:06.266564-0700 ProxyTest[3222:881204] stream event 2
2019-07-15 17:01:06.266639-0700 ProxyTest[3222:881204] has byte available
2019-07-15 17:01:06.266703-0700 ProxyTest[3222:881204] server said: \^B
2019-07-15 17:01:06.266801-0700 ProxyTest[3222:881204] message got it: \^B
2019-07-15 17:01:06.266841-0700 ProxyTest[3222:881204] \^B
2019-07-15 17:01:06.266948-0700 ProxyTest[3222:881204] receieved data: \^B
2019-07-15 17:01:11.331533-0700 ProxyTest[3222:881204] stream event 2
2019-07-15 17:01:11.331686-0700 ProxyTest[3222:881204] has byte available
2019-07-15 17:01:11.331799-0700 ProxyTest[3222:881204] receieved data:
2019-07-15 17:01:11.331912-0700 ProxyTest[3222:881204] stream event 16
2019-07-15 17:01:11.331973-0700 ProxyTest[3222:881204] Closing streams.
2019-07-15 17:01:11.332337-0700 ProxyTest[3222:881204] Disconnected
2019-07-15 17:01:11.332390-0700 ProxyTest[3222:881204] end encounter
EN

回答 1

Stack Overflow用户

发布于 2019-07-17 07:40:03

我自己找到了答案。我只需要将它们存储到NSMutableData中,然后将NSMutableData转换为十六进制,并将十六进制转换回可读的字符串。我能够看到标识字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57048567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档