Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 使用GCDAsyncSocket的(弱保护)安全服务器_Cocoa_Ssl_Ssl Certificate_Gcdasyncsocket - Fatal编程技术网

Cocoa 使用GCDAsyncSocket的(弱保护)安全服务器

Cocoa 使用GCDAsyncSocket的(弱保护)安全服务器,cocoa,ssl,ssl-certificate,gcdasyncsocket,Cocoa,Ssl,Ssl Certificate,Gcdasyncsocket,我正在尝试使用GCDAsyncSocket编写一个弱保护服务器(即,我可以使用anon密码连接到的服务器)。我目前正在做的是: 绑定到端口并开始侦听 ... BOOL result = [serverSocket acceptOnPort:port error:&error]; ... 然后,当指定端口上的连接到达时,我在-(void)套接字:(GCDAsyncSocket*)发送方didAcceptNewSocket:(GCDAsyncSocket*)newSocket回调中接收它

我正在尝试使用GCDAsyncSocket编写一个弱保护服务器(即,我可以使用anon密码连接到的服务器)。我目前正在做的是:

  • 绑定到端口并开始侦听

    ...
    BOOL result = [serverSocket acceptOnPort:port error:&error];
    ...
    
  • 然后,当指定端口上的连接到达时,我在
    -(void)套接字:(GCDAsyncSocket*)发送方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)

  • 问题:我做错了什么/没有做什么?


    我的猜测是,这与我没有具体说明的证书有关。但是,如果我在使用anon密码,是否需要指定证书?

    看起来我终于找到了答案。上面的代码是绝对正确的。问题是,我使用的是基于OpenSSL的客户端进行连接,默认情况下使用的是SSLv2。事实证明,SSLv2在OpenSSL中有一个错误的实现,因此与同一协议的其他实现(例如Apple的实现)不完全兼容,即使它与使用OpenSSL的其他组件通信良好。通过强制客户端使用正确实现的TLSv1(即使它可能是SSLv3)解决了这个问题。

    我不认为
    SSL\u NULL\u WITH\u NULL\u NULL
    是一个真正的密码,尽管它确实有一个由IANA分配的点(
    {0x00,0x00}
    )。这是状态机的初始状态。是的,没错。我的错。但问题依然存在。