Android 在截击中签名HTTP请求

Android 在截击中签名HTTP请求,android,ssl,https,Android,Ssl,Https,有没有办法在截击中对http请求进行签名 据我所知,SSL连接 客户端打开连接 服务器使用包含公钥的证书进行响应 客户端存储服务器的公钥 客户端创建请求并使用服务器的公钥对其进行签名 服务器使用自己的私钥验证请求 如果服务器发送响应,客户端将使用服务器的公钥验证响应 ssl pinning如何适应这个过程?据我所知,您已经了解了它的要点。SSL固定只是验证服务器响应提供的CA证书 我认为这个网址是对的。也许对你有帮助 据我所知,我想你已经掌握了要点。SSL固定只是验证服务器响应提供的CA证书

有没有办法在截击中对http请求进行签名

据我所知,SSL连接

  • 客户端打开连接
  • 服务器使用包含公钥的证书进行响应
  • 客户端存储服务器的公钥
  • 客户端创建请求并使用服务器的公钥对其进行签名
  • 服务器使用自己的私钥验证请求
如果服务器发送响应,客户端将使用服务器的公钥验证响应


ssl pinning
如何适应这个过程?

据我所知,您已经了解了它的要点。SSL固定只是验证服务器响应提供的CA证书

我认为这个网址是对的。也许对你有帮助


据我所知,我想你已经掌握了要点。SSL固定只是验证服务器响应提供的CA证书

我认为这个网址是对的。也许对你有帮助


不,它不是这样工作的。HTTP请求没有签名。简言之:

  • 客户端建立到服务器的TLS连接,该连接涉及
    • 服务器正在向客户端发送证书
    • 验证此证书(即它是否受信任)的客户端与服务器名称匹配,并且服务器拥有属于该证书的私钥。在此步骤中也将检查证书固定,即证书(或其公钥)是否与预期值匹配
    • 然后进行密钥交换,从而产生用于加密和消息保护的密钥
  • 从那时起,所有交换的数据都被加密并防止修改

TLS本身不知道HTTP,即不知道HTTP请求和响应是什么。它只看到它所保护的数据流。HTTP请求和响应是此流的一部分,因此受到保护,但HTTP请求或响应没有特定的签名。

不,它不以这种方式工作。HTTP请求没有签名。简言之:

  • 客户端建立到服务器的TLS连接,该连接涉及
    • 服务器正在向客户端发送证书
    • 验证此证书(即它是否受信任)的客户端与服务器名称匹配,并且服务器拥有属于该证书的私钥。在此步骤中也将检查证书固定,即证书(或其公钥)是否与预期值匹配
    • 然后进行密钥交换,从而产生用于加密和消息保护的密钥
  • 从那时起,所有交换的数据都被加密并防止修改

TLS本身不知道HTTP,即不知道HTTP请求和响应是什么。它只看到它所保护的数据流。HTTP请求和响应是此流的一部分,因此受到保护,但HTTP请求或响应没有特定的签名。

但如果服务器最终向我发送响应,我如何验证?他应该用公钥签名,客户端应该用私钥验证。我不知道客户机的私钥来自何处。从更一般的意义上说,受信任的CA必须预先存在于密钥存储中。当响应到达时,客户机通过在trustmanager的帮助下检查该密钥库来检查收到的CA是否真实。您不需要知道客户机密钥来自何处,它应该满足某些条件来证明身份验证,并且只需最后一点。作为客户机,我是使用(某些)私钥还是服务器的公钥对请求进行签名?是的,它应该发送一个对称响应密钥(使用服务器密钥),服务器可以解密并使用该密钥对客户机进行身份验证。以下是一些可能有帮助的链接。。。。但若服务器最终向我发送响应,我该如何验证呢?他应该用公钥签名,客户端应该用私钥验证。我不知道客户机的私钥来自何处。从更一般的意义上说,受信任的CA必须预先存在于密钥存储中。当响应到达时,客户机通过在trustmanager的帮助下检查该密钥库来检查收到的CA是否真实。您不需要知道客户机密钥来自何处,它应该满足某些条件来证明身份验证,并且只需最后一点。作为客户机,我是使用(某些)私钥还是服务器的公钥对请求进行签名?是的,它应该发送一个对称响应密钥(使用服务器密钥),服务器可以解密并使用该密钥对客户机进行身份验证。以下是一些可能有帮助的链接@JakubGruber:密钥交换的结果是一个预主密钥,它被转换为一个主密钥,然后用于导出用于加密和HMAC的密钥。确切的细节并不重要,但是如果你有兴趣的话,可以去看看。所以。。流受到保护,因为我验证了服务器的密钥并且信任它。(因为我锁定了它的公钥,并且它匹配)。稍后,我发送请求,不需要签名。但是,如果我愿意,我可以吗?@JakubGruber:没有为HTTP定义签名HTTP请求的机制,如果在TLS(即HTTPS)之上使用HTTP,这也是不可能的。但是HTTPS应该不需要这样做,因为由于TLS,请求就像所有其他数据一样受到保护,不受操纵。@JakubGruber:密钥交换的结果是一个预主密钥,它被转换为一个主密钥,然后用于导出加密和HMAC的密钥。确切的细节并不重要,但是如果你有兴趣的话,可以去看看。所以。。流受到保护,因为我验证了服务器的密钥并且信任它。(因为我锁定了它的公钥,并且它匹配)。稍后,我发送请求,不需要签名。但是,如果我愿意,我可以吗?@JakubGruber:没有为HTTP定义签名HTTP请求的机制,如果在TLS(即HTTPS)之上使用HTTP,这也是不可能的。但是那里