Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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
使用CocoaAsyncSockets和Java套接字的SSL/TSL_Ssl_Ssl Certificate_Asyncsocket_Cocoaasyncsocket - Fatal编程技术网

使用CocoaAsyncSockets和Java套接字的SSL/TSL

使用CocoaAsyncSockets和Java套接字的SSL/TSL,ssl,ssl-certificate,asyncsocket,cocoaasyncsocket,Ssl,Ssl Certificate,Asyncsocket,Cocoaasyncsocket,我想在cocoa中创建一个套接字服务器,使用AsyncSockets并与Java连接。如果Java是服务器,而cocoa是客户端,那么启用SSL是可行的,但我需要另一种方法来实现。我想我只是缺少cocoa中的一些设置,下面是我的java代码: 我通过传递以下命令启动客户端: -Djavax.net.ssl.trustStore=${project_loc}/myKeystore -Djavax.net.ssl.trustStorePassword=myPass -Djavax.net.debu

我想在cocoa中创建一个套接字服务器,使用AsyncSockets并与Java连接。如果Java是服务器,而cocoa是客户端,那么启用SSL是可行的,但我需要另一种方法来实现。我想我只是缺少cocoa中的一些设置,下面是我的java代码: 我通过传递以下命令启动客户端:

-Djavax.net.ssl.trustStore=${project_loc}/myKeystore 
-Djavax.net.ssl.trustStorePassword=myPass
-Djavax.net.debug=all
_

还有我的可可代码:

- (void)socket:(GCDAsyncSocket *)socket didAcceptNewSocket:(GCDAsyncSocket *)newSocket
{
    NSLog(@"new conn");
    // read again for further messages with undefined timeout

    NSMutableDictionary *settings = [NSMutableDictionary dictionaryWithCapacity:3];


    [settings setObject:[NSNumber numberWithBool:NO]
                 forKey:(NSString *)kCFStreamSSLValidatesCertificateChain];

    [settings setObject:(NSString*)kCFStreamPropertySocketSecurityLevel
                 forKey:(NSString*)kCFStreamSocketSecurityLevelNegotiatedSSL];


    DDLogVerbose(@"Starting TLS with settings:\n%@", settings);

    [newSocket startTLS:settings];

    [newSocket readDataToData:[GCDAsyncSocket CRLFData] withTimeout:-1 tag:0];
}
一旦我从java客户端向cocoa服务器发送消息,就会出现以下错误:

main, READ: TLSv1 Handshake, length = 117
main, handling exception: javax.net.ssl.SSLProtocolException: Illegal client handshake msg, 1
main, SEND TLSv1 ALERT:  fatal, description = unexpected_message
main, WRITE: TLSv1 Alert, length = 2
[Raw write]: length = 7
0000: 15 03 01 00 02 02 0A                               .......
main, called closeSocket()
javax.net.ssl.SSLProtocolException: Illegal client handshake msg, 1

有人知道如何正确使用它吗?

在“设置”中,您必须指出您的服务器带有KCFStreamsLisServer标志,并且您必须提供证书,如:谢谢您的建议。我放弃了该项目,所以现在无法尝试,但可能其他面临相同问题的人会觉得它很有用。@80leaves Yes,就在这里:D@Kametrixom我不知道,但Alexey发布的内容似乎是合法的。。
main, READ: TLSv1 Handshake, length = 117
main, handling exception: javax.net.ssl.SSLProtocolException: Illegal client handshake msg, 1
main, SEND TLSv1 ALERT:  fatal, description = unexpected_message
main, WRITE: TLSv1 Alert, length = 2
[Raw write]: length = 7
0000: 15 03 01 00 02 02 0A                               .......
main, called closeSocket()
javax.net.ssl.SSLProtocolException: Illegal client handshake msg, 1