安全的服务器-客户端握手方法
Secure server-client handshake method
我的客户端-服务器程序使用OpenSSL来处理数据交换,并且正在运行,但我需要确保我的客户端连接的服务器是正确的服务器,而不是伪造的服务器。
问题是我的程序生成了一个自签名证书,而客户端无法通过它进行验证。如果我嵌入一个证书,任何人都可以提取它,制作一个假的客户端服务器,并试图窃取信息。OpenPGP密钥也是如此。
那么,我能实现一些方法来验证服务器吗?即使服务器二进制文件对每个人都可用,因为它也是客户端?
在这种情况下,安全身份验证不依赖于实际的证书,而是所覆盖的密钥对。
非对称加密依赖于私钥和公钥。私钥必须保密(因此将其保存在必须经过身份验证的服务器上,即您所描述的正确服务器)。公钥可以任意传播,某人唯一能做的就是为私钥持有者加密信息,或者验证他签发的签名。
实际身份验证过程背后的(非常)基本思想是,身份验证客户端发送加密的随机数,只有正确的服务器才能解密并返回,或者让服务器对客户端定义的内容进行签名。为防止中间人攻击,实现身份验证的真实过程稍微复杂一点,但远远超出了这个答案的范围。
那么,我能实现一些方法来验证服务器吗?即使服务器二进制文件对每个人都可用,因为它也是客户端?
依赖已经存在的东西,不要自己实现加密代码。如果您已经在分发密钥,那么无论如何都可以考虑使用TLS进行加密通信,身份验证将在握手阶段完成。
相关文章:
- GRPC C++ TLS 客户端 grpc::SslCredentials() 方法不返回
- 使用 c++ 的 http 客户端的默认方法
- 服务器进程等待客户端输入/消息的最佳方法是什么?
- libmosquittopp-示例客户端挂在loop_stop()方法上
- 在C++winsock中处理多个客户端的方法
- 在客户端和远程服务器中比较文件列表的有效方法是什么?
- 在客户端的函数声明头文件中使用类头文件时C++消除包含类头文件的方法
- CORBA客户端是否有访问服务器IOR文件的方法
- 处理客户端连接的最有效方法(套接字编程)
- 在Windows下处理多个客户端连接的最佳方法(不使用线程)
- 如何在 C 或 C++ 中仅使用 GET 和 POST 方法编写 http 协议客户端
- 有没有可靠的方法可以在没有电子邮件客户端的情况下实现电子邮件功能
- 管理客户端在 C 套接字中突然断开连接的好方法
- 向我的 TCP 客户端/服务器应用添加加密层的最直接方法是什么?
- 客户端 API 的make_unique、工厂方法或不同设计
- 安全的服务器-客户端握手方法
- 如何实现一个好的客户端-服务器方法
- Windows消息传递-获取非客户端区域的设备上下文的各种方法
- 如何在客户端实现在DLL中声明的方法
- 当客户端连接越来越少的时候(在linux上使用套接字编程),服务器监听的明智方法是什么?