【问题标题】:Understanding SSL for consuming .Net webservice from Android了解 SSL 以从 Android 使用 .Net Web 服务
【发布时间】:2011-08-26 17:05:38
【问题描述】:

我正在开发一个 Android 应用程序,该应用程序需要通过 SSL 使用 .Net 网络服务,但我没有这方面的经验。现在我正在寻找有关 SSL 握手和证书的一些指导和解释。

注意:服务器使用的是IP地址而不是域名。它是一个 Intranet 应用程序。

到目前为止,我已经从 IIS 7 在 Web 服务器中创建了一个证书(称为自签名?)。 要从 Android 应用程序中使用它,我发现了两种方法:

1)。在应用程序中嵌入证书(哪个证书?我如何获得它?)

2)。信任所有证书(有人说这种方法存在安全问题,你能详细说明一下吗?它仍然会握手吗?)

证书:

握手中有多少种证书,它们是什么?

自签名证书有根证书吗?如果是,我怎样才能得到它们?

是否可以将自签名证书从一台服务器移动/复制到另一台服务器?

握手:

首先,这个过程是否正确?

SSL 握手过程(从网站复制)描述如下:

  1. 客户端通过发送 URL 发起 SSL 握手过程 从以下内容开始:https:// 到服务器。

  2. 客户端最初向 Web 服务器发送每个加密的列表 它支持的算法。 SSL 支持的算法包括 RC4 和数据加密标准 (DES)。客户端也发送服务器 它的随机挑战字符串将在后面使用 过程。

    嵌入的证书会发到这里吗?

  3. Web 服务器接下来执行以下任务:

    从加密列表中选择一种加密算法 客户端支持并从客户端接收的算法。

    向客户端发送其服务器证书的副本。

    向客户端发送随机挑战字符串

  4. 客户端使用从服务器接收到的证书副本 服务器来验证服务器的身份。

  5. 客户端从服务端获取服务端的公钥 证书。

  6. 客户端接下来会生成一个 premaster secret。这是一个不同的 随机字符串将被用来生成会话 SSL 会话的密钥。然后客户端加密不同的值 使用服务器的公钥调用 premaster secret,并且 将此加密值返回给服务器。这伴随着 握手消息的键控散列和主密钥。哈希 用于保护握手过程中交换的消息。 哈希是由前两个传输的随机字符串生成的 在服务器和客户端之间。

    什么是主密钥?

  7. 服务器向客户端发送所有握手的键控哈希 到目前为止,两方之间交换的消息。

    这个键控哈希是由什么制成的?

  8. 然后服务器和客户端从 不同的随机值和键,并通过应用数学 计算。

  9. 会话密钥用作共享密钥来加密和 解密服务器和客户端之间交换的数据。

当 SSL 会话超时或终止时,会话密钥将被丢弃。

【问题讨论】:

  • 不幸的是,我们的问题对于一个好的 SO 答案来说太大了。首先,您应该阅读RFC 2246。此外,这是一个协议问题,而不是编程问题。根据我对 SO 规则的理解,这是题外话。

标签: android ssl https ssl-certificate x509certificate


【解决方案1】:

我会在这里尽我所能回答

  • 在应用程序中嵌入了证书(哪个证书?如何获取?) 这是标识客户端/应用程序身份的证书。您可以通过 CA 或自签名获得它。服务器将使用此证书来验证客户端/应用程序的身份

  • 信任所有证书(有人说这种方法存在安全问题,您能详细说明一下吗?它仍然会握手吗?) 它仍然会握手,但不会进行证书验证,这很危险,除非您在内部进行连接(您似乎是这样)。信任所有证书意味着实体可以声称自己不是某个人,从而可以从用户那里获取机密信息。

  • 握手中有多少种类型的证书,它们是什么?在握手中,您有服务器的证书和可选的客户端证书(用于两因素身份验证)

  • 自签名证书有根证书吗?如果是,我怎样才能获得它们? 据我所知,根证书是指由 CA 本身识别的证书,因此它没有其他签名。由于您的身份仍然可以验证并需要 CA 签名,因此您的身份不会被归类为根证书

  • 是否可以将自签名证书从一台服务器移动/复制到另一台服务器? 简短的回答是肯定的,尽管从一个平台到其他平台的过程不同。检查[此链接)(http://www.sslshopper.com/how-to-move-or-copy-an-ssl-certificate-from-one-server-to-another.html),它有复制说明少数平台的证书

  • 会在此处发送嵌入式证书吗?不,嵌入式(客户端)证书是在服务器身份验证完成后发送的

  • 什么是主密钥? 主密钥是用于派生会话密钥以供以后通信的密钥。它还用于对消息进行哈希处理并在下一组阶段验证消息的真实性

  • 这个键控哈希是由什么制成的?它是由客户端发送的主密钥制成的。为了验证所有消息,服务器发送所有已传递的消息并使用主密钥对其进行哈希处理。客户端也将使用相同的密钥对其消息进行哈希处理,然后与服务器发送的数据进行比较。只有当哈希匹配时,我们才能确定我们仍在与同一台服务器通信

【讨论】:

  • 非常感谢您的完整回答。正如我所提到的,我使用的是 IP 地址。对这两种方法(Embedded 和 Trust all)有影响吗
猜你喜欢
  • 2011-09-15
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多