禁用主机名检查SSL连接?

时间:2010-09-09 09:36:45

标签: java http ssl https clojure

我正在使用clojure-http进行以下POST:

(clojure-http.resourcefully/post "https://android.apis.google.com/c2dm/send"
  {"Authorization" (str "GoogleLogin auth=" auth-token)}
  {"registration_id" registration-id
   "data.msg" "blah"
   "collapse_key" "blah"})

得到这个例外:

java.security.cert.CertificateException: No subject alternative DNS name matching android.apis.google.com found.
[Thrown class javax.net.ssl.SSLHandshakeException]

出于一些奇怪的原因,大约有10%的时间我获得异常并且请求通过。

我认为这是Java主机名检查SSL连接*的问题,所以我的问题是,如何从Clojure中禁用它? (或者这是一个安全方面的坏主意吗?)

谢谢, 卫

*从这篇文章和其他类似文章中推断出来:http://www.jroller.com/hasant/entry/no_subject_alternative_names_matching

1 个答案:

答案 0 :(得分:2)

这不是你的代码的问题,它是android的网站的问题。

在现代浏览器中打开此链接 - https://android.apis.google.com/。您将看到SSL证书属于*.google.com,但您正在访问*.apis.google.com下的域。您应该在Android论坛上搜索此问题的解决方案。

禁用主机名检查是一个坏主意,你正在开放自己的中间人攻击。如果你真的不关心安全性,你也可以使用http,这比禁用主机名检查更容易。