【问题标题】:Valid android certificate using IP使用 IP 的有效 android 证书
【发布时间】:2014-07-08 12:18:34
【问题描述】:

在我的工作中,我们使用内部 CA 运行私有 PKI 来签署我们的服务器证书。在开发通过 https 与 REST api 通信的 Android 应用程序时,我使用 192.168.x.x IP 设置了一个开发服务器并为其颁发了证书。所以我有:

  • CN 为“自定义 CA”的 CA 证书
  • CN 192.168.0.3 的服务器证书

然后我关注Android docs on setting up a TrustStore 并让应用程序在 Android 4.0.4 设备中通过 https 进行通信。 当我在运行 Android 4.4 (KitKat) 的设备上测试该应用程序时,无法验证服务器。

有什么想法吗?

【问题讨论】:

  • 另一种方法是在您的开发环境中设置主机名。 (即使是全局可见的 DNS 服务器也可以返回私有 IP 地址,因此您可以将“test1.mycompany.com”设置为 192.168.0.3。)
  • 您应该将主机名放在Common Names (CN) 中。 IETF 和 CA/浏览器论坛都反对这种做法。而是将 DNS 名称放在 Subject Alternate Names (SAN) 中。将CN 用作“Example Widgets”之类的友好名称(我个人不使用“Example Widgets, LLC”之类的合法名称,因为它通常是向用户显示的友好名称)。

标签: java android ssl https x509certificate


【解决方案1】:

所以在深入了解RFC2818RFC6125 之后,我发现APIv14 (4.0.4) 中的 DefaultHostnameVerifier 实现会根据 CN 部分检查主机,如果不匹配,它将查找 DNS 类型,但不是 IP 类型。 APIv19 (4.4.4) 将根据 SAN IP 条目检查 IP 主机。

所以我在服务器证书中添加了一个 IP SAN 条目 192.168.0.3 并针对 CA 进行了签名,并让 4.4 设备通过 HTTPS 进行通信。

【讨论】:

  • 啊,我看到你想通了...顺便说一下,我们最常在野外遇到的网站和相关服务的公共 CA遵循 RFC ,如 5280 和 6125。它们遵循在 CA/浏览器论坛上开发的自己的标准。看看 CA/B 的 Baseline Requirements DocumentsEV Guide。如果您在网络上工作,那么这些是您应该遵循的标准(而不是涵盖所有过去和未来最糟糕做法的包罗万象的 RFC)。
  • “所以我在服务器证书中添加了一个 IP SAN 条目 192.168.0.3 并针对 CA 进行了签名,并让 4.4 设备通过 HTTPS 进行通信” - 这是一个不同的问题。根据 CA/B 的基线要求文档,在使用 IP(与 FQDN 相对)时有一些特殊处理。我认为 IP 需要在两个 CASAN 中。但是使用 RFC 1918 私有地址违反了最佳实践。不应使用私有地址。
  • @jww 感谢 CA/浏览器论坛上的指点。关于 IP 案例,RFC 声明它必须在 SAN 中才有效。我不知道 CA/B 对此有何评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 2019-07-02
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
相关资源
最近更新 更多