在接收peer的close_notify之前,Spray HTTPS Inbound已关闭

时间:2015-05-05 16:32:25

标签: scala ssl spray

目前,我正在使用Spray i / o实现Scala的Web服务。希望使用SSL来保护我的请求。但是我在配置SSL时遇到了困难。当启动https调用时,会出现与握手相关的错误

 fatal error: 80: Inbound closed before receiving peer's close_notify: possible truncation attack?
javax.net.ssl.SSLException: Inbound closed before receiving peer's close_notify: possible truncation attack?

使用此

创建证书
keytool -genkey -keyalg RSA -alias mykey  -dname "CN=dev.site.com,OU=app" -keystore keystore.jks -storepass pas -validity 365

创建了像这样的ssl特征

trait SSLConfiguration {

  implicit def sslContext: SSLContext = {
    val keystore = keystore.jks
    val password = pas

    val keyStore = KeyStore.getInstance("jks")
    val in = getClass.getClassLoader.getResourceAsStream(keystore)
    require(in != null, "Bad java key storage file: " + keystore)
    keyStore.load(in, password.toCharArray)

    val keyManagerFactory = KeyManagerFactory.getInstance("SunX509")
    keyManagerFactory.init(keyStore, password.toCharArray)
    val trustManagerFactory = TrustManagerFactory.getInstance("SunX509")
    trustManagerFactory.init(keyStore)
    val context = SSLContext.getInstance("TLS")
    context.init(keyManagerFactory.getKeyManagers, trustManagerFactory.getTrustManagers, new SecureRandom)
    context
  }

  implicit def sslEngineProvider: ServerSSLEngineProvider = {
    ServerSSLEngineProvider { engine =>
      engine.setEnabledCipherSuites(Array("TLS_RSA_WITH_AES_256_CBC_SHA"))
  engine.setEnabledProtocols(Array("SSLv3", "TLSv1"))
      engine
    }
  }
}

设置我的启动以使用特征。

   object Boot extends App with SSLConfiguration 
//bind to io interface. set ssl engine providor
    IO(Http) ! Http.Bind(service, interface = interface, port)(sslEngineProvider)
    }

2 个答案:

答案 0 :(得分:1)

您是否在配置文件中启用了SSL?

spray.can {
  server {
    ssl-encryption = on
  }
}

我尝试了你的代码并稍微改了一下,它在我的笔记本电脑上运行了。 我删除了整个    implicit def sslEngineProvider 并使用默认值    IO(Http) ! Http.Bind(service, interface = "0.0.0.0", port = 8080)。 你把密钥库文件放在项目的资源文件夹(project / src / main / resources)中吗?

答案 1 :(得分:0)

该问题可能与安装的java版本有关。 当我在linux机器上安装打开JDK版本的Java时,我遇到了这个问题,当我将java版本更改为Oracle JDK时,问题就消失了。

抛出此异常的确切应用程序是Information Workbench(流体操作产品),java版本是8 在流动操作人员的系统预先报告中没有提到使用哪个版本的java。