我们可以检测是否安装了根CA证书吗


Can we detect if a root CA certificate is installed?

这在JavaScript或PHP中可能吗?我希望能够检测我的私人CA是否安装在用户的iOS或Android设备上。从那里我可以决定是否提供安装说明。我一直是"谷歌人",没有发现任何有用的东西。以前有人试过这个吗?我想知道我应该花时间学习什么。如果不可能,你能建议一个浏览器内的替代方案吗?

编辑:我别无选择,这不是我的决定。出于其他安全原因,将使用专用CA证书。

我怀疑是否会有任何类型的设备查询来测试这一点。

我实际上还没有这么做,但你可能会想出一个测试,JavaScript向使用你想要测试的证书的https服务器发出AJAX请求。如果请求成功,则证书正在工作。(这个问题似乎意味着,如果SSL证书没有验证,AJAX请求将(正确地)失败)

请注意,由于URL的方案(http或https)会有所不同(可能还有域,具体取决于您的设置方式),您的测试站点必须使用CORS Access-Control-Allow-Origin标头才能允许浏览器发出请求。请参阅:AJAX对不受信任(自签名)HTTPS的调用以静默方式失败

编辑:我花了一些时间,做了一个非常简单的例子。Gotohttp://ssl_test.gjp.cc。该页面将尝试向https://ssl_test2.gjp.cc,它使用自签名证书。在您信任ssl_test2之前,您会在ssl_test页面上看到"失败",但是,一旦您信任了ssl_test2的证书,您应该总是在ssl_test上看到"成功"。

请注意,这并不能证明您的用户已经安装了CA证书,它所证明的只是他们已经将浏览器配置为信任测试站点(ssl_test2)。如果你从不直接将用户指向测试站点,那么他们将永远不会只信任该站点,所以这应该运行得相当好。

也许这会有所帮助:

<img src="https://the_site/the_image" onerror="redirectToCertPage()" />