【问题标题】:How to use HTTPS for webservice and android app?如何将 HTTPS 用于 Web 服务和 Android 应用程序?
【发布时间】:2014-10-05 08:06:47
【问题描述】:

我正在开发一些应该与 Android 应用程序一起使用的基于 JSON 的 Web 服务。

我想加密客户端(android)和服务器(数据中心中的虚拟服务器)之间的数据传输。

我不必确保我的服务器就是我的服务器,只是数据加密。

我不知道如何使用 HTTPS。

我是否只是将我的 PHP 文件放入 private_html 并使用 https://example.com url?

【问题讨论】:

    标签: web-services security https


    【解决方案1】:

    要使用 HTTPS,您无需在 Web 服务的编码中做任何事情 - 这一切都在您的托管中。以下是您可以遵循的步骤。具体说明在您的托管(IIS、Apache、AWS/Azure 等)中有所不同,但您可以在 Google 上详细了解如何针对您决定的任何主机和应用程序框架完成这些步骤。

    1. 根据您需要的供应商、声誉和安全级别购买 SSL 证书(有许多不同的供应商,但预计证书价格在 75 至 200 美元之间)。

    2. 从您将托管的服务器生成证书签名请求 (CSR)。

    3. 将 CSR 上传给 SSL 供应商,他们将验证并提供证书供您使用。

    4. 将 SSL 证书导入您的应用程序服务器,并配置站点以使用该证书。例如,如果您托管的是 Microsoft IIS,您将导入 SSL 证书,然后将 443 上的 HTTPS 绑定添加到托管您的 Web 服务的特定网站。

    另一个安全点。由于您正在部署 SSL,因此您不必进行任何应用程序级别的加密(假设您没有将敏感信息放入查询字符串中 - 如果您认为需要,请使用 POST)。您可能希望实施一些安全措施来限制对 Web 服务的访问,以便只有您的应用程序可以访问它。最佳实践是某种级别的 OAuth,但至少在请求标头中使用某种类型的预共享密钥总比没有好。

    以下是一些其他网站以获取更多信息:

    【讨论】:

    • 所以... 数据加密适用于从服务器发送到设备的数据,但不适用于从设备发送到服务器的数据(通过 POST/GET 或其他方式)。对不起,也许是愚蠢的问题,英语不是我的第一语言,我担心我误解了一些东西。
    • 一点也不傻。数据加密使用 SSL 双向工作。对于任何 POST/GET 或使用 SSL 时的任何内容,您的请求和响应都已加密。我的第二点是确保没有其他人可以通过使用 OAuth 或只有您的应用程序知道的预共享标头值来访问您的 Web 服务端点,因此只有您的应用程序可以连接到您的 Web 服务。
    • 我知道这一点。我的问题只是关于“中间人”/嗅探保护。
    【解决方案2】:
    【解决方案3】:

    您可以限制用户在 apache、IIS 或您使用的任何工具中仅使用 HTTPS。如果您的客户端连接到您的服务器,他的通信可能会被加密,因为他已经在使用 HTTPS。而对于 HTTPS 响应,据我所知,您实际上无法发送 HTTPS 响应,除非另一方也不是网站(例如,如果您有自己的网站,您可以发送这样的响应,例如发送给 Google)。您应该可以发送诸如 http 状态代码(OK、NotModified、PageNotFound、...)之类的数据,或者如果您想要更多的东西,或者如果它是必需的,那么您仍然有 JSON,您也可以对其进行编码, 用一些编码算法,或者使用二进制 JSON 格式。

    【讨论】:

    • 所以...我无法使用 https 进行 apache->android 加密?我必须在代码中“手动”加密数据?
    • 不,我认为就您使用 HTTPS 而言它已经被加密了,而且我 99.9% 确信您可以只使用服务器响应部分的 JSON 数据,您可以加密,如果你坚持这样你可以选择 AES128 位熵编码,这对你的需要来说已经足够了
    • HTTPS 将加密您的整个流量。无需再加密。 HTTPS 的目标是确保任何数据都不会被嗅探器窃取。
    • 虽然是真的,但也许他会为了他的理智而这样做:D
    【解决方案4】:

    检查您的托管公司是否提供免费的公共共享 https 地址。他们中的大多数人都这样做。

    如果您想了解如何正确操作,请关注this thread

    警告:不要坚持使用以下解决方案进行生产。

    如果您打算使用没有证书的 https 端点,您必须确保禁用对等验证,请查看this answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      相关资源
      最近更新 更多