0
我試圖在IPhone應用程序與Java SSLServerSocket之間建立SSL連接。 我的Java服務器看起來就像是:IPhone應用程序與Java ServerSocket之間的SSL連接
SSLServerSocketFactory ssf = null;
try {
// set up key manager to do server authentication
SSLContext ctx;
KeyManagerFactory kmf;
KeyStore ks;
char[] passphrase = "passphrase".toCharArray();
ctx = SSLContext.getInstance("TLS");
kmf = KeyManagerFactory.getInstance("SunX509");
ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("fsKeystore"), passphrase);
kmf.init(ks, passphrase);
ctx.init(kmf.getKeyManagers(), null, null);
ssf = ctx.getServerSocketFactory();
System.out.println("Waiting for Connection");
SSLServerSocket sslsocketServer = (SSLServerSocket) ssf.createServerSocket(9999);
SSLSocket sslsocket = (SSLSocket) sslsocketServer.accept();
sslsocket.addHandshakeCompletedListener(new HandshakeCompletedListener() {
@Override
public void handshakeCompleted(HandshakeCompletedEvent arg0) {
System.out.println("Handshake finished");
}
});
InputStream inputstream = sslsocket.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader;
bufferedreader = new BufferedReader(inputstreamreader);
String string = "";
while ((string = bufferedreader.readLine()) != null) {
string = bufferedreader.readLine();
System.out.println(System.currentTimeMillis());
System.out.println(string);
System.out.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
在Objective-C我已經實現這個解決方案:
-(id) initWithUrl: (NSString*) host onPort: (NSInteger) port withDelegate:(id<TCPDelegate>) delegate{
self = [super init];
if(self){
//initTimer
sendBuffer=[[NSMutableArray alloc]init];
NSTimer *timer =[NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(timerTick:) userInfo:nil repeats:YES];
NSRunLoop *runloop = [NSRunLoop currentRunLoop];
[runloop addTimer:timer forMode:NSDefaultRunLoopMode];
del=delegate;
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL,(__bridge CFStringRef)host, port,&readStream,&writeStream);
iStream = (__bridge_transfer NSInputStream *)readStream;
oStream = (__bridge_transfer NSOutputStream *)writeStream;
[iStream setDelegate:self];
[oStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[iStream open];
[oStream open];
[iStream setProperty:NSStreamSocketSecurityLevelNegotiatedSSL
forKey:NSStreamSocketSecurityLevelKey];
[oStream setProperty:NSStreamSocketSecurityLevelNegotiatedSSL
forKey:NSStreamSocketSecurityLevelKey];
line = @"";
}
return self;
}
在iPhone App我得到
CFNetwork的SSLHandshake失敗(-9807 )
任何想法問題可能是什麼?
加密是你永遠不應該做的事情之一;兩端使用標準庫。 – chrylis 2014-09-01 07:59:17
你能否更清楚地描述一下?我使用哪些不屬於標準庫的部分? – user2071938 2014-09-01 08:00:22
你在這個SSL套接字上運行什麼?現在,它幾乎總是HTTP,並且我認爲iOS HTTP客戶端庫可以像Java中的「HttpURLConnection」一樣處理SSL。 – chrylis 2014-09-01 08:18:53