【发布时间】:2013-04-06 21:05:42
【问题描述】:
回答:我正在使用相互 SSL 身份验证。现在没有任何问题:)
我正在开发一个服务器项目。我尝试使用 XOR encrypt-decypt 方法对客户端进行身份验证,但这还不够安全。我决定在我的套接字上使用 SSL,但我做不到。我有一个基于 System.Net.Sockets.Socket 的连接。即我想要这个:如果传入 Tcp 连接,则验证它是我们客户端的套接字连接。 (每个套接字都无法从我们的端口连接我们的服务器套接字)。谁能给我一个起点或一些例子? (这是我服务器的死角,做不到就取消!)
EDIT1:我的系统目前是这样工作的:
客户端连接到服务器。
服务器创建 16 字节长的随机密钥,并用 serverKey (XOR) 加密,发送给客户端
客户端用serverKey解密数据,用clientKey加密后发回
服务器解密后的数据和检查的是否一样
(当客户端连接时,会启动一个用于验证超时的计时器)
EDIT2:现在我正在使用另一种密码学。当客户端连接时,它将被发送,客户端将解密并发回。密码学是这样工作的:
用特殊方法加密字节[](不专业)。之后,得到一个 byte[] 的哈希码。这个散列算法是我写的,如果有人不知道,永远不要理解我们的加密字节[]。 (已经哈希输出不能回来)。最后它结合了散列和加密(就像 XOR,一种特殊的方法)。
使用这种方法,没有人会得到解密/破解的数据。否则有非对称加密/解密方法 (http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange)。我可以稍后使用(硬)非对称密码学升级我的身份验证系统(如果还不够的话)。
【问题讨论】:
-
所以,简而言之,您要确保只有您的客户端可以连接到您的服务器,而没有其他使用相同协议的客户端?
-
在此处查看答案以了解一些注意事项:stackoverflow.com/questions/12356785
-
@PaulSasik 这不适合我。我想要一个类似 dtb 的系统。
-
简短回答:你不能。如果您的客户端可以连接到服务器,那么任何其他客户端也可以。见gamedev.stackexchange.com/q/33922gamedev.stackexchange.com/q/1520
-
@dtb SmartFox 服务器可以做到。如果您想从 TCP 客户端之类的 telnet 连接 SmartFoxServer,它会丢弃它,但如果您想连接 SmartFox 的客户端库,则可以连接。有认证。所以,我不能做这样的系统,对吧?
标签: c# sockets authentication ssl client