1

当尝试使用配置不正确的 SSL 证书访问环境时,我收到以下错误:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:390)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:562)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:776)
at dispatch.BlockingHttp$class.dispatch$BlockingHttp$$execute(Http.scala:45)
at dispatch.BlockingHttp$$anonfun$execute$1$$anonfun$apply$3.apply(Http.scala:58)
at dispatch.BlockingHttp$$anonfun$execute$1$$anonfun$apply$3.apply(Http.scala:58)
at scala.Option.getOrElse(Option.scala:108)
at dispatch.BlockingHttp$$anonfun$execute$1.apply(Http.scala:58)
at dispatch.Http.pack(Http.scala:25)
at dispatch.BlockingHttp$class.execute(Http.scala:53)
at dispatch.Http.execute(Http.scala:21)
at dispatch.HttpExecutor$class.x(executor.scala:36)
at dispatch.Http.x(Http.scala:21)
at dispatch.HttpExecutor$class.when(executor.scala:50)
at dispatch.Http.when(Http.scala:21)
at dispatch.HttpExecutor$class.apply(executor.scala:60)
at dispatch.Http.apply(Http.scala:21)
at com.secondmarket.cobra.lib.delegate.UsersBDTest.tdsGet(UsersBDTest.scala:130)
at com.secondmarket.cobra.lib.delegate.UsersBDTest.setup(UsersBDTest.scala:40)

我想完全忽略证书。

更新:我了解有关 SSL 证书配置不当的技术问题,问题不在于我们的盒子,而是我们正在使用的服务。它主要发生在测试盒而不是 prod/stg 上,所以我们正在调查,但需要一些东西来测试 API。

4

3 回答 3

5

由于以下原因,您不能“完全忽略证书”:

  1. 在这种情况下,问题是客户甚至没有提供一个。
  2. 如果您不想要安全性,为什么要使用 SSL?
  3. 我毫不怀疑,这些所谓的“用于开发”的解决方法中的许多,也许是大多数,已经“泄漏”到生产中。如果您构建不安全的系统,部署不安全系统的风险很大。如果您不构建不安全性,就无法部署它,因此风险就消失了。
于 2012-03-19T23:13:13.020 回答
2

以下能够允许不安全的 SSL 证书。

 Http.postData(url, payload).options(HttpOptions.allowUnsafeSSL,
                                     HttpOptions.readTimeout(5000))
于 2012-03-22T14:32:58.413 回答
1

对于最新版本的 Dispatch (0.13.2),您可以使用以下内容创建一个接受任何证书的 http 客户端:

val myHttp = Http.withConfiguration(config => config.setAcceptAnyCertificate(true))

然后你可以将它用于 GET 请求,如下所示:

myHttp(url("https://www.host.com/path").GET OK as.String)

(针对 POST 请求进行相应修改...)

我在这里发现了这一点:为什么 dispatch throw "java.net.ConnectException: General SSLEngine ..." and "unexpected status" exceptions for a specific URL?

为了创建一个验证证书的 Http 客户端,我在这里找到了一些示例代码:https ://kevinlocke.name/bits/2012/10/03/ssl-certificate-verification-in-dispatch-and-asynchttpclient/ 。

于 2017-09-19T23:03:09.920 回答