NSStream SSL接続に問題
-
19-09-2019 - |
質問
私は、ソケット接続のためのSSLプロパティを使用してNSStreamを使用しています。私は、このような192.168.1.77などのローカルIPアドレスを使用する場合には正常に動作します。しかし、私は(それがSecurityLevelTLSv1を持っている)www.xyz.comのような任意のサーバを使用している場合、それはエラーを示してい エラーコード:-9843、メッセージ:操作を完了できませんでした。 (NSUnknownErrorDomainエラー-9843。)
ここに私のコードは次のとおりです。
-(void) startSocket{
NSURL *website = [NSURL URLWithString:@"www.xyz.com"];
NSHost *host = [NSHost hostWithName:[website host]];
if(host) {
NSLog(@"Valid host");
[NSStream getStreamsToHost:host port:443 inputStream:&iStream outputStream:&oStream] ;
[self openStream];
}.
-(void)openStream{
NSMutableDictionary *settings = [NSMutableDictionary dictionaryWithCapacity:1];
[settings setObject:(NSString *)NSStreamSocketSecurityLevelTLSv1 forKey:(NSString *)kCFStreamSSLLevel];
[settings setObject:[NSNumber numberWithBool:YES] forKey:(NSString *)kCFStreamSSLAllowsAnyRoot];
[iStream retain];
[iStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
CFReadStreamSetProperty((CFReadStreamRef)iStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);
//[iStream setProperty:NSStreamSocketSecurityLevelTLSv1 forKey:NSStreamSocketSecurityLevelKey];
[iStream open];
[oStream retain];
[oStream setDelegate:self];
[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
CFWriteStreamSetProperty((CFWriteStreamRef)oStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);
//[oStream setProperty:NSStreamSocketSecurityLevelTLSv1 forKey:NSStreamSocketSecurityLevelKey];
[oStream open];
}
私はNSStreamとCFStreamの両方を使用してみました。私はどちらの場合も同じエラーを取得しています。
NSStreamEventOpenCompletedとNSStreamEventErrorOccurredイベントが呼び出されます。
この中で私を助けてくださいます。
事前に感謝します。
Ramesh.P
解決
私はこの問題を解決しました。 次のコード行はすべてをした。
[settings setObject:@"www.xyz.com" forKey:(NSString *)kCFStreamSSLPeerName];
おかげで、 Ramesh.P
所属していません StackOverflow