我正在尝试使用内置浏览器从 Android 2.3.4 访问受 SSL 保护的 Web 应用程序。
服务器证书是我使用创建的自签名证书MAKECERT并安装在服务器上。
当我尝试访问该页面时,我从浏览器收到一条错误消息,指出The name of the site does not match name on the certificate
.
我已经验证,服务器地址与我的证书的公用名完全匹配(它实际上只是一个 IP 地址)。
当我尝试在 Android 设备上访问使用非自签名证书保护的其他网站时,不会弹出该消息。
如果我在桌面上使用 IE 或 Chrome 访问同一页面(除了签名机构消息),我不会收到任何警告,并且一旦我在受信任的根 CA 中安装了证书,浏览器就会顺利接受该证书。
我是否应该认为该消息实际上是 Android 拒绝自签名证书?
对此我有些疑惑。
我尝试在凭证存储中安装证书,但这并不能改善情况。现在我不知道下一步我会尝试什么。
问题是:创建 Android 可接受的自签名证书时是否应该遵循任何特定事项?有没有人设法让 Android 接受自签名证书而没有此警告?
我还能尝试什么?
-UPDATE-Bruno的回复引导我走向正确的方向,所以我成功地向前迈出了一步:我重新制作了证书,添加了SAN(不得不放弃MAKECERT
for OpenSSL
,跟随那里安迪·阿里斯门迪的指示).
现在消息已经消失,但我被阻止了已经讨论过的“证书颁发机构不可信”问题在这个帖子中,所以我仍在努力寻找问题的最终解决方案 - Android 浏览器上不会弹出任何警告。
我已验证,服务器地址与通用地址完全匹配
我的证书名称(实际上只是一个 IP 地址)。
Android的主机名验证器更严格符合RFC 2818比某些浏览器。根据规范,如果使用 IP 地址,则它必须位于主题备用名称条目中IP地址类型:不在 DNS 类型的 SAN 条目上或在 CN 中:
如果存在 dNSName 类型的 subjectAltName 扩展,则必须将其用作身份。否则,(最具体的)常见
必须使用证书主题字段中的名称字段。
尽管使用通用名称是现有做法,但
已弃用并鼓励认证机构使用
改为 dNSName。
[...]
在某些情况下,URI 被指定为 IP 地址而不是主机名。在这种情况下,iPAddress subjectAltName 必须存在
且必须与 URI 中的 IP 完全匹配。
最简单的方法是使用主机名。 (在证书中使用 IP 地址从来都不太实际。)或者,生成带有 SAN IP 地址条目的证书。 (您可能感兴趣this.)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)