日期:2014-05-20  浏览次数:20746 次

socket服务器与客户端通讯的问题
1.我的服务器是TCP/IP的,使用SOCKET通讯,为了保证数据的安全性,所以想在验证数据包的时候将证书,数字签名机制增加进去,这样可以保证服务器和客户端都能互相信任。
不过后来发现如果有人截获了一方的共有密钥,并将自己生成的共有密钥发给接收方,那么就可以获得接受方的数据,从而使用自己的私有密钥进行解密来获得数据。我想知道如果不通过CA认证,是否也有方法能知道客户端和服务器的密钥都是安全的?

如果将共有密钥也通过加密算法加密在发送,是否能解决这个问题,但我个人觉得虽然能更安全点,但也无法彻底解决。

2.如果A是服务器,B是客户端,通过SOCKET连接之后,B会接受不是A传递过来的数据么?还是任何可以伪造成A的数据包B都接收呢?如果截获者需要伪造A发送的数据包,发送给B,而B却只跟A有连接,截获者是如何获得这个链接的呢?

3.还有一个问题,服务器目前是用一个3000个长度的线程池来保存客户端连接的,然后对这些连接发送的数据进行处理,虽然在处理过程中,服务器不会因为生成和销毁对象而占用时间,但是现成实在是太多了,导致服务器很卡,我听别人说有一种方法是用一个线程处理这个客户端,但我的客户端是长连接,而且需要实时处理,我想了很多方法都没办法提高效率,甚至于所有的数据结构我都用数组去代替,以麻烦换时间了,可还是超级卡。。。。。

希望哪位大拿帮回答下,而且我写服务器时间不长,所以尽可能说的简单点哈,我会加分的。

------解决方案--------------------
用多线程实现。

 ServerSocket 中有一个 accept()方法
返回 的是Socket 然后把 Socket 交给 Thread处理
可以提高效率的
------解决方案--------------------
好久没有用了。
------解决方案--------------------
LZ提的这几个问题,我好像就接触过第三个
你所说的用一个线程处理这个客户端
是不是非阻塞的nio啊
它的机制就是用几个线程来处理n多个线程
我还看过一个基于它的MINA框架,
网上评论还可以,不过即时性上可能没有那么好

关注,学习
呵呵
------解决方案--------------------
关注一下,做过socket,但是没有这么复杂
------解决方案--------------------
关注
------解决方案--------------------
关注第二个问题,个人觉得需要用UDP协议然后改写数据包的头文件去欺骗.具体实施会不会是在A本机上截取的数据包然后转发截取信息到其他机器上?
------解决方案--------------------
学习,顶一个
------解决方案--------------------
有关安全方面的看看安全SOCKET吧
SS
------解决方案--------------------
建议楼主看一下《JAVA虚拟机(原书第二版)》Bill Venners著
------解决方案--------------------
关于第一个问题,我以为应当这样:
每次交互时生成随机的对称密钥,用对称加密方法加密内容(速度快)
然后用私钥加密上述随机生成的对称密钥,保证安全性

只要一开始公私钥是保密的话,这个一次一密从理论上是不可破解的(个人理解)
------解决方案--------------------
每次交互时生成随机的对称密钥,用对称加密方法加密内容(速度快) 
然后用对方公钥 加密上述随机生成的对称密钥,保证只有对方才可以接收

红色的部分写错了,不好意思。
也可以用自身私钥加密内容摘录值,这样就起到让对方鉴别消息源的作用和保障完整性

整体上建议采用kdc的策略,kdc是密钥分配管理中心,用户一开始只需要保存和kdc通信的密钥(通过非网络并且可信的手段),然后由kdc记录和提供公钥并生成每次的随机密钥
这样的话,你只要保证kdc和用户之间的通信安全就可以了(所有安全问题的源头)。

------解决方案--------------------
安全方面的问题比较晕啊
------解决方案--------------------
CA是解决办法,可以简化,Key 都有接口函数

可以调用的
------解决方案--------------------
只传密文,不传密钥,服务器接到到密文解析觉得不对,扔掉,断开连接。
socket可接受任何连接,可加ip限制。
用一个线程检查每一个socket连接。