【发布时间】:2011-08-26 17:05:38
【问题描述】:
我正在开发一个 Android 应用程序,该应用程序需要通过 SSL 使用 .Net 网络服务,但我没有这方面的经验。现在我正在寻找有关 SSL 握手和证书的一些指导和解释。
注意:服务器使用的是IP地址而不是域名。它是一个 Intranet 应用程序。
到目前为止,我已经从 IIS 7 在 Web 服务器中创建了一个证书(称为自签名?)。 要从 Android 应用程序中使用它,我发现了两种方法:
1)。在应用程序中嵌入证书(哪个证书?我如何获得它?)
2)。信任所有证书(有人说这种方法存在安全问题,你能详细说明一下吗?它仍然会握手吗?)
证书:
握手中有多少种证书,它们是什么?
自签名证书有根证书吗?如果是,我怎样才能得到它们?
是否可以将自签名证书从一台服务器移动/复制到另一台服务器?
握手:
首先,这个过程是否正确?
SSL 握手过程(从网站复制)描述如下:
客户端通过发送 URL 发起 SSL 握手过程 从以下内容开始:https:// 到服务器。
-
客户端最初向 Web 服务器发送每个加密的列表 它支持的算法。 SSL 支持的算法包括 RC4 和数据加密标准 (DES)。客户端也发送服务器 它的随机挑战字符串将在后面使用 过程。
嵌入的证书会发到这里吗?
-
Web 服务器接下来执行以下任务:
从加密列表中选择一种加密算法 客户端支持并从客户端接收的算法。
向客户端发送其服务器证书的副本。
向客户端发送随机挑战字符串
客户端使用从服务器接收到的证书副本 服务器来验证服务器的身份。
客户端从服务端获取服务端的公钥 证书。
-
客户端接下来会生成一个 premaster secret。这是一个不同的 随机字符串将被用来生成会话 SSL 会话的密钥。然后客户端加密不同的值 使用服务器的公钥调用 premaster secret,并且 将此加密值返回给服务器。这伴随着 握手消息的键控散列和主密钥。哈希 用于保护握手过程中交换的消息。 哈希是由前两个传输的随机字符串生成的 在服务器和客户端之间。
什么是主密钥?
-
服务器向客户端发送所有握手的键控哈希 到目前为止,两方之间交换的消息。
这个键控哈希是由什么制成的?
然后服务器和客户端从 不同的随机值和键,并通过应用数学 计算。
会话密钥用作共享密钥来加密和 解密服务器和客户端之间交换的数据。
当 SSL 会话超时或终止时,会话密钥将被丢弃。
【问题讨论】:
-
不幸的是,我们的问题对于一个好的 SO 答案来说太大了。首先,您应该阅读RFC 2246。此外,这是一个协议问题,而不是编程问题。根据我对 SO 规则的理解,这是题外话。
标签: android ssl https ssl-certificate x509certificate