GCDAsyncSocket を使用して、保護が弱いサーバー (つまり、anon 暗号を使用して接続できるもの) を作成しようとしています。私が現在行っていることは次のとおりです。
ポートにバインドしてリッスンを開始する
... BOOL result = [serverSocket acceptOnPort:port error:&error]; ...
次に、指定したポートに接続が到着すると、
- (void)socket:(GCDAsyncSocket *)sender didAcceptNewSocket:(GCDAsyncSocket *)newSocket
コールバックで受信します。ここでは、SSL/TLS 設定で辞書を作成します。NSMutableDictionary *settings = [[NSMutableDictionary alloc] init]; NSArray* ciphers = [[NSArray alloc] initWithObjects: [NSNumber numberWithUnsignedInt:TLS_DH_anon_WITH_AES_256_CBC_SHA256], [NSNumber numberWithUnsignedInt:TLS_DH_anon_WITH_AES_256_CBC_SHA], [NSNumber numberWithUnsignedInt:SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA] , [NSNumber numberWithUnsignedInt:SSL_DH_anon_EXPORT_WITH_RC4_40_MD5] , [NSNumber numberWithUnsignedInt:SSL_DH_anon_WITH_DES_CBC_SHA], [NSNumber numberWithUnsignedInt:SSL_DH_anon_WITH_RC4_128_MD5], [NSNumber numberWithUnsignedInt:SSL_NULL_WITH_NULL_NULL], [NSNumber numberWithUnsignedInt:TLS_DH_anon_WITH_3DES_EDE_CBC_SHA], [NSNumber numberWithUnsignedInt:TLS_DH_anon_WITH_AES_128_CBC_SHA], [NSNumber numberWithUnsignedInt:TLS_DH_anon_WITH_AES_128_CBC_SHA256], [NSNumber numberWithUnsignedInt:TLS_DH_anon_WITH_AES_128_GCM_SHA256], [NSNumber numberWithUnsignedInt:TLS_DH_anon_WITH_AES_256_GCM_SHA384], [NSNumber numberWithUnsignedInt:TLS_DH_anon_WITH_RC4_128_MD5], nil]; //all anon ciphers [settings setObject:ciphers forKey:GCDAsyncSocketSSLCipherSuites]; //this is a server [settings setObject:[NSNumber numberWithBool:YES] forKey:(NSString*)kCFStreamSSLIsServer]; [newSocket startTLS:settings]; //apply the settings to new connection
を呼び出して設定を適用した後
startTLS
、 がnewSocket
切断され- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)error
、 が呼び出されます。エラー コードは 9800 (errSSLProtocol) です。
質問: 私が間違っている/していないことは何ですか?
私の推測では、私が指定していない証明書と関係があると思います。しかし、匿名暗号を行っている場合、証明書を指定する必要がありますか?