了解SSL以从Android使用.Net webservice

时间:2011-08-26 17:05:38

标签: android ssl https ssl-certificate x509certificate

我正在开发一个Android应用,需要通过SSL使用.Net webservices,我没有经验。现在我正在寻找有关SSL握手和证书的一些指导和解释。

注意:服务器正在使用 IP地址而非域名。这是一个内部网应用程序。

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

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

2)。信任所有证书(ppl说这种方法存在安全问题,你能详细说明吗?它还能做握手吗?)

证书:

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

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

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

HANDSHAKE:

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

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

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

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

    嵌入式证书是否会在此处发送?

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

    从加密列表中选择加密算法 客户支持和接收的算法。

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

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

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

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

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

    什么是主密钥?

  7. 服务器向客户端发送所有握手的密钥哈希值 到目前为止双方之间交换的信息。

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

  8. 然后,服务器和客户端从中生成会话密钥 不同的随机值和键,以及应用数学 计算

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

  10. 当SSL会话超时或终止时,会丢弃会话密钥。

1 个答案:

答案 0 :(得分:2)

我会尽力回答我的知识

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

  • 信任所有证书(ppl说这种方法存在安全问题,你能详细说明一下吗?它还能做握手吗?) 它仍然进行握手,但它不会进行证书验证,除非你在内部连接(看起来你是这样),否则它是危险的。信任所有证书意味着实体可以声称他们不是,因此可以从用户那里获得机密信息。

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

  • 自签名证书是否有根证书?如果是的话,我怎么能得到它们呢?据我所知,根证书意味着CA本身识别的那些,因此它没有其他签名。由于您的身份仍然可以通过CA验证并且需要由CA签名,因此您的身份不会被归类为根证书

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

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

  • 什么是主密钥?主密钥是用于派生会话密钥以供以后通信的密钥。它还用于散列消息并验证下一组阶段中消息的真实性

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