2015-05-05 2 views
1

В настоящее время я реализую веб-сервис с помощью Scala с использованием Spray i/o. Глядя на использование SSL для защиты моих запросов. Однако мне сложно настроить SSL. Когда HTTPS вызов инициируется там ошибка брошена связана с рукопожатиемSpray HTTPS Входящие закрыты перед получением close_notify партнера

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) 
    } 

ответ

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)?

+0

Это файл application.conf в ресурсах? – user2524908

+0

Да, это в application.conf. – sanfann

+1

Вы можете добавить '-Djavax.net.debug = ssl, handshake', чтобы получить больше журналов – sanfann

0

Проблема может быть связана с установленной версией Java. Я столкнулся с этой проблемой, когда я устанавливал открытую JDK-версию java на Linux-машине, когда я изменил версию Java на Oracle JDK, проблема исчезла.

Точное приложение, которое выбрасывает это исключение, - это Information Workbench (продукт с жидкостью ops), а версия java - 8 . Использование какой версии java не упоминалось в системных предварительных условиях жидкостями.