Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 发送客户端证书如何不使客户端暴露于模拟_Sockets_Authentication_Ssl_Mutual Authentication - Fatal编程技术网

Sockets 发送客户端证书如何不使客户端暴露于模拟

Sockets 发送客户端证书如何不使客户端暴露于模拟,sockets,authentication,ssl,mutual-authentication,Sockets,Authentication,Ssl,Mutual Authentication,好的,为了便于沟通,我将参考这张图片 好的,那么服务器发送一个公钥,客户机使用该公钥加密自己的证书信息,并将其发送回服务器。我不理解的是,为什么攻击者无法截获步骤4中的数据包,然后使用该数据包发送到服务器以模拟客户端。他们不必知道里面的信息或解密它。如果攻击者获得并保存了该数据包,则当服务器请求客户端证书时,他们可以将这些字节发送到服务器。我不知道这种加密方法如何防止这种类型的攻击。再说一次,当涉及到套接字级别的加密时,我是一个彻头彻尾的傻瓜,所以我可能遗漏了一些重要的东西。谢谢 事情比这更复杂

好的,为了便于沟通,我将参考这张图片


好的,那么服务器发送一个公钥,客户机使用该公钥加密自己的证书信息,并将其发送回服务器。我不理解的是,为什么攻击者无法截获步骤4中的数据包,然后使用该数据包发送到服务器以模拟客户端。他们不必知道里面的信息或解密它。如果攻击者获得并保存了该数据包,则当服务器请求客户端证书时,他们可以将这些字节发送到服务器。我不知道这种加密方法如何防止这种类型的攻击。再说一次,当涉及到套接字级别的加密时,我是一个彻头彻尾的傻瓜,所以我可能遗漏了一些重要的东西。谢谢

事情比这更复杂,这张图片有一些缺陷,将本地存储的东西和交换的东西混为一谈

请看一看“客户机验证的TLS握手”案例

总之:

  • 在某些情况下,服务器会要求客户端发送证书(这并不总是需要的,因此服务器会发送一条请求证书的特定消息,
    CertificateRequest
  • 然后,客户机回复一条
    证书
    消息,其中包含其证书
  • 在该阶段,服务器已经可以根据所提供的证书决定是否继续;在那个阶段,其他人也可以发送相同的证书,因为它是公共的。但下面的内容解释了为什么它在TLS握手中无法进一步发挥作用
  • 在服务器发出包含各种加密数据的
    ClientKeyExchange
    消息后,这些加密数据将在以后用于真正加密应用程序数据的交换
  • 客户端发送一条
    CertificateVerify
    消息,该消息是在握手过程中根据先前交换的TLS消息计算的签名,使用与客户端证书关联的私钥完成
  • 接收此消息的服务器可以再次检查它是否与真正的客户机对话,因为通过尝试使用客户机公钥(包含在证书中)验证签名,它将知道远程方是否确实拥有正确的关联私钥
因此,只要私钥仍然是私有的,攻击者就不能仅仅通过窃取证书来模拟客户端(在另一种情况下,存在相同的保护来验证服务器)。如果私钥被盗,上述所有操作都会失败

此时无需了解加密签名的所有细节,只需系统的设计方式确保由一个密钥加密的所有内容只能由另一个密钥解密:如果有人使用其私钥加密数据,则任何人都可以使用其公钥解密(根据定义,这是公开的;一般来说,你只是有传播它的问题,但这里没有,因为公钥包含在握手前交换的证书中);这对保密毫无用处(任何人都可以看到加密的内容)但这是身份验证的基础,因为如果解密有效,则意味着发送方拥有与您用于解密该内容的公钥相关联的私钥


请注意,对于刚刚作为新标准推出的TLS 1.3,TLS交换中消息的数量和性质略有变化,但上面的加密保证(使用私钥签名,以便远程方可以使用相关的公钥进行双重检查)仍然有效。

事情比这更复杂,这张图片有一些缺陷,将本地存储的内容和交换的内容混为一谈

请看一看“客户机验证的TLS握手”案例

总之:

  • 在某些情况下,服务器会要求客户端发送证书(这并不总是需要的,因此服务器会发送一条请求证书的特定消息,
    CertificateRequest
  • 然后,客户机回复一条
    证书
    消息,其中包含其证书
  • 在该阶段,服务器已经可以根据提供的证书决定是否要进一步操作;确实,在该阶段,其他人也可以发送相同的证书,因为它是公共的。但是下面的内容解释了为什么它在TLS握手中无法进一步工作
  • 在服务器发出包含各种加密数据的
    ClientKeyExchange
    消息后,这些加密数据将在以后用于真正加密应用程序数据的交换
  • 客户端发送一条
    CertificateVerify
    消息,该消息是在握手过程中根据先前交换的TLS消息计算的签名,使用与客户端证书关联的私钥完成
  • 接收此消息的服务器可以再次检查它是否与真正的客户机对话,因为通过尝试使用客户机公钥(包含在证书中)验证签名,它将知道远程方是否确实拥有正确的关联私钥
因此,只要私钥仍然是私钥,攻击者就不能仅仅通过窃取证书(在另一种情况下,存在相同的保护来认证服务器)来模拟客户端。如果私钥被窃取,上述所有操作都将失败

此时无需了解加密签名的所有细节,只需系统的设计方式确保由一个密钥加密的所有内容只能由另一个密钥解密:如果有人使用其私钥加密数据,则任何人都可以使用其公钥解密(从定义上讲,这是公开的;那么,一般来说,你只是有传播它的问题,但是