在Scala调度中忽略SSL证书

时间:2012-03-19 18:49:13

标签: scala ssl scala-dispatch

尝试使用配置不正确的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。

3 个答案:

答案 0 :(得分:5)

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

  1. 这种情况下的问题是客户端甚至没有提供一个。
  2. 如果你不想要安全性,为什么要使用SSL?
  3. 我毫不怀疑,许多(或许是大多数)这些涉嫌“发展”的变通方法已经“泄露”到生产中。如果构建不安全的系统,则存在部署不安全系统的重大风险。如果您没有构建不安全因素,则无法部署它,因此风险就会消失。

答案 1 :(得分:1)

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

 Http.postData(url, payload).options(HttpOptions.allowUnsafeSSL,
                                     HttpOptions.readTimeout(5000))

答案 2 :(得分: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请求......)

我在这里找到了这个:Why does dispatch throw "java.net.ConnectException: General SSLEngine ..." and "unexpected status" exceptions for a particular URL?

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