android - 了解用于从 Android 使用 .Net Web 服务的 SSL

标签 android ssl https ssl-certificate x509certificate

我正在开发一个 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. 客户端接下来生成一个预主 key 。这是一个不同的 随机字符串将依次用于生成 session SSL session 的 key 。然后客户端加密一个不同的值 使用服务器的公钥调用 premaster secret,并且 将此加密值返回给服务器。这是伴随着 握手消息的 key 散列和主 key 。散列 用于保护握手过程中交换的消息。 散列由前两个随机字符串生成 在服务器和客户端之间。

    什么是主 key ?

  7. 服务器向客户端发送所有握手的 key 散列 到目前为止,双方之间交换的消息。

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

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

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

当 SSL session 超时或终止时, session key 将被丢弃。

最佳答案

我会尽我所知回答

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

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

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

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

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

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

  • 什么是主 key ? 主 key 是用于导出 session key 以供以后通信使用的 key 。它还用于对消息进行哈希处理并在下一组阶段验证消息的真实性

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

关于android - 了解用于从 Android 使用 .Net Web 服务的 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7208174/

相关文章:

java - 在 Tomcat 8 上配置 SSL 并连接超时

python - 如何通过fiddler2捕获python SSL(HTTPS)连接

node.js - 为 HTTPS 设置超时的正确方法

firebase - 通过 GET 方法将 Cloud Functions 用于 Firebase HTTPS

android - Android 库的 gradle withJavadocJar() 和 withSourcesJar()

android - 为什么 Android JUnit 测试系统不运行我的 ActivityTestCase

php - 为几个页面设置 SSL

安卓 : Wireless access point session timeout and HostnameValidation errors

android - 如何实现android zoomview?

java - 膨胀类 android.support.design.widget.NavigationView 时出错