AsyncSockets を使用して cocoa でソケット サーバーを作成し、Java に接続したいと考えています。Java がサーバーで cocoa がクライアントの場合、SSL を有効にすることはできますが、私はその逆が必要です。私はココア内のいくつかの設定が欠けていると思うので、私のJavaコードをここに示します: 私は渡すことによってクライアントを開始しています:
-Djavax.net.ssl.trustStore=${project_loc}/myKeystore
-Djavax.net.ssl.trustStorePassword=myPass
-Djavax.net.debug=all
_
public class Client {
public static void main(String[] arstring) {
try {
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory
.getDefault();
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(
"localhost", 9999);
InputStream inputstream = System.in;
InputStreamReader inputstreamreader = new InputStreamReader(
inputstream);
BufferedReader bufferedreader = new BufferedReader(
inputstreamreader);
OutputStream outputstream = sslsocket.getOutputStream();
OutputStreamWriter outputstreamwriter = new OutputStreamWriter(
outputstream);
BufferedWriter bufferedwriter = new BufferedWriter(
outputstreamwriter);
String string = null;
while ((string = bufferedreader.readLine()) != null) {
bufferedwriter.write(string + "\r\n");
bufferedwriter.flush();
}
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
そして私のココアコードのビット:
- (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 クライアントからココア サーバーにメッセージを送信するとすぐに、次のエラーが表示されます。
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
誰かがそれを適切に使用する方法のヒントを持っていますか?