2015-05-05 49 views
1

目前,我正在使用Spray I/O與Scala一起實施Web服務。希望使用SSL來保護我的請求。但是,我很難配置SSL。如果HTTPS發起呼叫時有錯誤時,拋出有關創建使用此Spray HTTPS在接收對方的close_notify之前關閉入口

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

一個證書握手

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? 

創建的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) 
    } 

回答

1

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

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

我試過了你的代碼,稍作改動,它在我的筆記本電腦上工作。 我刪除了整個 implicit def sslEngineProvider 並使用默認的一個 IO(Http) ! Http.Bind(service, interface = "0.0.0.0", port = 8080)。 你是否把你的keystore文件放在項目的資源文件夾(project/src/main/resources)中?

+0

這是資源中的application.conf文件嗎? – user2524908

+0

是的,它在application.conf中。 – sanfann

+1

您可以添加'-Djavax.net.debug = ssl,handshake'來獲取更多日誌 – sanfann

0

該問題可能與安裝的java版本有關。 我在linux機器上安裝java的開放JDK版本時遇到了這個問題,當我將java版本更改爲Oracle JDK時,問題消失了。

引發此異常的確切應用程序是Information Workbench(流體操作產品)和java版本是8 流體操作人員未在系統預先準則中提到java的哪個版本。

相關問題