我正在开发一个应用程序,我们在其中使用自定义 CA 进行用户登录。这些 CA 需要安装在设备上,否则登录将失败。我遇到了 network security configuration在 Android 上可用。看来我可以将 CA 添加到 res/raw
中的配置文件中。除了系统提供的 CA 之外,我还可以信任这些 CA。以下是当前配置文件的完成方式:
<network-security-config>
<base-config>
<trust-anchors>
<!-- Trust preinstalled CAs -->
<certificates src="system" />
<!-- Additionally trust user added CAs -->
<certificates src="user" />
<certificates src="@raw/cert1" />
<certificates src="@raw/cert2" />
<certificates src="@raw/cert3" />
<certificates src="@raw/cert4" />
<certificates src="@raw/cert5" />
<certificates src="@raw/cert6" />
<certificates src="@raw/cert7" />
<certificates src="@raw/cert8" />
<certificates src="@raw/cert9" />
</trust-anchors>
</base-config>
</network-security-config>
我得到的 CA 文件有 .cer
扩展名。但是,有人告诉我它们是 PEM 编码的。因此,我继续将扩展名更改为 .pem
,因为这是 Android 文档中的说明。
但是,即使在我将这些 CA 文件包含到我的代码库中并将该应用程序全新安装到设备上(之前未安装该应用程序),登录仍然失败。此外,当我进入设备上的设置时,设备上没有安装或物理上找不到 CA。那这样做的目的是什么?我是否正确实现了这一点?或者这是为了别的什么?
我可以在我的网络安全 XML 中指定 CA,还是需要 programatically install the CAs ?一如既往,我们将不胜感激任何对此的帮助。
最佳答案
These CAs need to be installed on the device, otherwise login will fail
用户需要通过“设置”应用手动安装这些证书。
In addition, when I go under the settings on the device, the CAs aren't installed or physically found on the device
正确。它们是您应用的网络安全配置的一部分。它们不会作为设备范围的证书安装在设备上。
What's the purpose of this then?
它们用于允许您的应用与某些服务器通信。
如果您的目标是仅您的应用程序与使用这些 CA 的服务器通信,那么您的设置就没问题,假设实际文件没问题(我遇到了这个问题 a while back ).
如果您的目标是让设备上的任何应用程序与使用这些 CA 的服务器通信,则需要手动安装证书,并且相关应用程序需要选择允许用户-提供的证书(即,他们的网络安全配置需要 <certificates src="user" />
)。
关于android - 为自定义 CA 使用网络安全配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53889050/