Naga SSL 问题

sandy_shell sandy_shell 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
使用Naga 库做tcp 的 TLS时遇到,Client端已显示握手已完成,但Server却未握手完成,Client 端往Server端发数据也发送不出去,但write 返回又是true。没有任何报错,不知道哪里问题了。目前是单向认证模式

Server段代码:
int tcpPort = Constants.BIND_TCP_PORT;
sslContext = TLSAuth.getSSLContext();
final NIOService service = new NIOService();
sslServerSocket = service.openSSLServerSocket(sslContext, tcpPort);
Log.i(TAG, "Server listenning port:"+tcpPort);
observer = new SSLServerSocketObserverAdapter();
sslObserver = new SSLSocketObserverAdapter();
sslServerSocket.listen(observer);
while(true){
service.selectBlocking();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


public class SSLServerSocketObserverAdapter implements ServerSocketObserver{

@Override
public void acceptFailed(IOException exception) {
// TODO Auto-generated method stub
System.out.println("acceptFailed:"+exception.getMessage());

}

@Override
public void serverSocketDied(Exception exception) {
// TODO Auto-generated method stub
Log.i(TAG, "serverSocketDied");

}

@Override
public void newConnection(NIOSocket nioSocket) {
// TODO Auto-generated method stub
Log.i(TAG,"newConnection");
nioSocket.listen(sslObserver);
}

}

/**
* SSLSocket
* @author huanghuan1
*
*/
public class SSLSocketObserverAdapter implements SSLSocketObserver{

@Override
public void connectionOpened(NIOSocket nioSocket) {
// TODO Auto-generated method stub
try {
((NIOSocketSSL)nioSocket).beginHandshake();
} catch (SSLException e) {
e.printStackTrace();
}
Log.i(TAG, "Client " + nioSocket.getIp()+":"+nioSocket.getPort()+ " begin handshake");

}

@Override
public void connectionBroken(NIOSocket nioSocket, Exception exception) {
// TODO Auto-generated method stub
System.out.println("Client " + nioSocket.getIp()
+ " disconnected. Exception: " + exception.getMessage());
}

@Override
public void packetReceived(NIOSocket socket, byte[] packet) {

// TODO Auto-generated method stub
String data = DataConvertUtil.byteArrayToHexString(packet);
Log.i(TAG, "Received from "+socket.getIp() + ":"+new String(data));
}

@Override
public void packetSent(NIOSocket socket, Object tag) {
// TODO Auto-generated method stub
Log.i(TAG, "packet sent to:"+socket.getIp()+":"+socket.getPort()+",len:"+socket.getBytesWritten());
}

@Override
public void handleFinished(NIOSocket nioSocket) {
// TODO Auto-generated method stub
Log.i(TAG, nioSocket.getIp()+":"+nioSocket.getPort()+" handshake finish");
nioSocket.write("This is an SSL Server".getBytes());
System.out.println("Server sent: " + "This is an SSL Server");
}

}


client段代码:

public void creatNIOSSLConnect() throws IOException, UnrecoverableKeyException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException, CertificateException {

NIOService service = new NIOService();
SSLEngine engine = getSSLContext().createSSLEngine();
if(null != engine){
SSLSocketChannelResponder socket = service.openSSLSocket(engine, SERVER_HOST, SERVER_PORT);
socket.listen(this);
while(true){
service.selectBlocking();
}
}
}

public static SSLContext getSSLContext() {
char[] password = "123456".toCharArray();
// char[]keypwd = "654321".toCharArray();
// try {
// KeyStore keyStore = KeyStore.getInstance("JKS");
// } catch (KeyStoreException e2) {
// // TODO Auto-generated catch block
// e2.printStackTrace();
// }
KeyStore trustStore = null;
try {
trustStore = KeyStore.getInstance("JKS");
} catch (KeyStoreException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}

// keyStore.load(new FileInputStream("./certificate/client.jks"), password);
try {
trustStore.load(new FileInputStream("certificate/clientTrust"), password);
} catch (NoSuchAlgorithmException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (CertificateException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (FileNotFoundException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}

// KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
// kmf.init(keyStore, keypwd);
TrustManagerFactory tmf = null;
try {
tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(trustStore);
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, tmf.getTrustManagers(), null);
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


return sslContext;
}

public static void sendMessage(NIOSocket socket) {
boolean ret = socket.write("hello word".getBytes());
if(ret){
Log.i(TAG, "*Client sent: hello word to:"+socket.getIp()+","+socket.getPort());
}else{
Log.i(TAG, "send failed");
}

}

public static void receivMessage(String string) {
// TODO Auto-generated method stub
System.out.println("receivMessage:"+string);
}

@Override
public void connectionOpened(NIOSocket nioSocket) {
// TODO Auto-generated method stub
try {

((NIOSocketSSL) nioSocket).beginHandshake();
} catch (SSLException e) {
e.printStackTrace();
}
Log.i(TAG, nioSocket.getIp()+" begin handshake");
}

@Override
public void connectionBroken(NIOSocket nioSocket, Exception exception) {
// TODO Auto-generated method stub
Log.i(TAG,"connection broken:"+exception.getLocalizedMessage());

}

@Override
public void packetReceived(NIOSocket socket, byte[] packet) {
// TODO Auto-generated method stub
receivMessage(new String(packet));
}

@Override
public void packetSent(NIOSocket socket, Object tag) {
// TODO Auto-generated method stub
Log.i(TAG,"sent");

}

@Override
public void handleFinished(NIOSocket nioSocket) {
// TODO Auto-generated method stub
Log.i(TAG, nioSocket.getIp()+":"+nioSocket.getPort()+" handshake finished");
//sendMessage(nioSocket);
}


Server端日志打印:
com.guogee.server.network.SSLTCPManager Server listenning port:8087
com.guogee.server.network.SSLTCPManager newConnection
com.guogee.server.network.SSLTCPManager Client 192.168.7.151:60945 begin ha
ndshake
com.guogee.server.network.SSLTCPManager packet sent to:192.168.7.151:60945,
len:1320
com.guogee.server.network.SSLTCPManager packet sent to:192.168.7.151:60945,
len:1411
com.guogee.server.network.SSLTCPManager packet sent to:192.168.7.151:60945,
len:1480
可以看到单次握手后发了3个包

Client 端日志打印:可以看到已经握手完成
SSL 192.168.7.151 begin handshake
SSL sent
SSL sent
SSL 192.168.7.151:8087 handshake finished

...全文

相关推荐

高校技术转移办公室人员如何高效开展技术需求挖掘工作?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

科技中介服务机构如何提升服务的专业性与用户粘性?.docx

科技中介服务机构如何提升服务的专业性与用户粘性?

BIZKEEN

高校技术转移办公室人员在组织科研成果展示时,如何提升推介材料的专业性与吸引力?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

三相并网逆变器无功功率扰动+孤岛检测控制算法仿真【参考文献+仿真】

内容概要:本文系统梳理了一套面向电力电子与新能源并网领域的仿真研究资源,聚焦三相并网逆变器的关键控制技术,涵盖无功功率扰动、孤岛检测算法、低电压穿越(LVRT)、中点电位平衡、虚拟同步发电机(VSG)、下垂控制、模型预测控制(MPC)、准PR控制及LCL滤波器设计等核心技术。资源包含多种逆变器拓扑结构(如T型三电平、Z源、ANPC、四桥臂等)的Simulink仿真模型,并结合扫频法进行正负序阻抗建模与稳定性分析,强调通过复现经典科研案例提升实际科研能力,适用于电力系统稳定性、微电网运行与可再生能源并网等方向的研究与验证。; 适合人群:电力电子、电气工程及其自动化、新能源科学与工程等相关专业的高校研究生、科研人员及从事光伏、储能逆变器开发的工程技术人员,需具备MATLAB/Simulink仿真基础和一定的电力系统控制理论知识。; 使用场景及目标:① 掌握三相并网逆变器在孤岛检测、无功调节、不平衡电网等复杂工况下的先进控制策略设计与仿真方法;② 借助提供的仿真模型与参考文献快速搭建科研平台,用于论文复现、课题开发或项目验证;③ 深入理解VSG、MPC、阻抗建模与下垂控制等关键技术的实现机制与工程应用路径。; 阅读建议:建议结合文中提供的网盘链接与公众号“荔枝科研社”获取完整仿真模型与参考资料,按照目录顺序循序渐进学习,注重理论推导与仿真实践相结合,优先复现基础模型再进行参数优化与创新拓展。

程序辅导帮

香橙派5-uefi-edk2-spi-flash镜像

香橙派5-uefi-edk2-spi-flash镜像

星际海的蜗牛
评论
收藏 已收藏
分享
返回顶部
sandy_shell
Java 51,407 成员 86,130 内容