安全的服务器 - 客户端握手方法

时间:2014-10-31 03:54:36

标签: c++ sockets openssl gnupg openpgp

我的客户端 - 服务器程序使用OpenSSL来处理数据交换并且正在运行,但我需要确保我的客户端连接的服务器是正确的服务器而不是假的服务器。

问题是我的程序生成了自签名证书,客户端无法通过该证书进行验证。如果我嵌入证书,任何人都可以提取它,制作一个虚假的客户端服务器并试图窃取信息。 OpenPGP密钥也是如此。

那么,即使服务器二进制文件对所有人都可用,我是否可以实现一些验证服务器的方法,因为它也是客户端?

1 个答案:

答案 0 :(得分:0)

在这种情况下,安全身份验证不依赖于实际证书,而是覆盖密钥对。

非对称加密依赖于私钥和公钥。私钥必须保密(因此请将其保留在必须进行身份验证的服务器上,即您描述为正确的服务器的服务器)。公钥可以任意传播,有人可以做的唯一事情是加密私钥持有者的信息,或验证他签发的签名。

实际身份验证过程背后的(非常)基本思想是通过身份验证客户端发送加密的随机数,只有正确的服务器可以解密和返回,或者让服务器签署客户端定义的内容。实现身份验证的真实流程对于防止中间人攻击有点复杂,但远远超出了这个答案的范围。

  

那么,即使服务器二进制文件对所有人都可用,我是否可以实现一些验证服务器的方法,因为它也是客户端?

依靠已有的东西,不要自己实现加密代码。如果您已经在分发​​密钥,也可以考虑using TLS for encrypted communication,在握手阶段进行身份验证。