错误:Android上的自签名SSL证书的名称未加工

我试图使用内置浏览器从Android 2.3.4访问受SSL保护的Web应用程序.

服务器证书是我使用MAKECERT创建并安装在服务器上的自签名证书.
当我尝试访问该页面时,我从浏览器收到一条错误消息,指出该站点的名称与证书上的名称不匹配.

我已经验证了,服务器地址正好是我的证书的通用名称(它实际上只是一个IP地址).

当我尝试在Android设备*问使用非自签名证书保护的其他网站时,不会弹出该消息.

如果我在桌面上使用IE或Chrome访问同一页面 – 除签名授权消息外 – 我没有收到任何警告,一旦我在受信任的根CA中安装了证书,浏览器就可以顺利接受证书.

我是否应该认为该消息实际上是Android拒绝自签名证书?

我对此感到有点困惑.

我试图在Credential Storage中安装证书,但这并没有改善这种情况.现在我不知道接下来会尝试什么.

问题是:我是否应该遵循创建Android可接受的自签名证书?有没有人设法在没有此警告的情况下获得Android接受的自签名证书?

我还能尝试什么?

-UPDATE-
布鲁诺的回答引导我朝着正确的方向前进,所以我设法向前迈进了一步:我重新制作了添加SAN的证书(不得不放弃MAKECERT for OpenSSL,继instructions from Andy Arismendi之后).

现在消息已经消失,但我已经在in this SO post已经讨论过的’认证autority不信任’问题中被阻止了,所以我仍在努力寻找我的问题的最终解决方案 – 没有在Android浏览器上弹出任何警告.

解决方法:

I have verified and the server address is exactly maching the Common
Name of my certificate (it is actually just an IP address).

Android的主机名验证程序比某些浏览器更严格地符合RFC 2818.根据规范,如果使用IP地址,则它必须位于IP地址类型的主题备用名称条目中:不在DNS类型的SAN条目或CN中:

If a subjectAltName extension of type dNSName is present, that MUST be used as the identity. Otherwise, the (most specific) Common
Name field in the Subject field of the certificate MUST be used.
Although the use of the Common Name is existing practice, it is
deprecated and Certification Authorities are encouraged to use the
dNSName instead.

[…]

In some cases, the URI is specified as an IP address rather than a hostname. In this case, the iPAddress subjectAltName must be present
in the certificate and must exactly match the IP in the URI.

最简单的方法是使用主机名. (在证书中使用IP地址实际上并不实用.)或者,生成带有SAN IP地址条目的证书. (你可能感兴趣的是this.)

上一篇:java-具有X.509证书的Spring Security


下一篇:X.509安全Web服务的Java客户端