2016-01-25 15 views
5

Próbuję dodać samopodpisany certyfikat do mojej konfiguracji, aby mój serwis internetowy służył do obsługi treści przez SSL, ale nie miałem szczęścia.Akka HTTP 2.0 do korzystania z SSL (HTTPS)

Oto moja obecna konfiguracja

ssl { 
    jksKeystore = "localhost.p12" 
    password = "changeit" 
} 

Wszelkie pomysły na to, co mam misisng móc rozpędzają serwer HTTPS?

Mój projekt jest za pomocą Akka 2,0 i scala

+1

Jest to odcinek o rozmiarze serwer HTTPS w dokumentacji: [Server-Side HTTPS Wsparcie] (http://doc.akka.io/docs/akka- stream-and-http-experimental/2.0.2/scala/http/low-level-server-side-api.html # server-side-https-support) – planetenkiller

+1

Polecam używanie apache lub nginx jako serwera proxy https. Jest szybszy (z powodu implementacji C++) i często aktualizowany (ze względu na popularność). – mgosk

Odpowiedz

8

Istnieje kilka testów w bazie kodu Akka że test sprawności https. Korzystają z predefiniowanych kontekstów http zdefiniowanych w ExampleHttpContexts.

Utworzyłem małe repozytorium, które używa kluczy z repozytorium akka (mam nadzieję, że nie będą tego robić) i utworzy minimalny serwer https przy użyciu samopodpisanego certyfikatu here. Zrobione jako repozytorium zamiast jako istotę, więc możesz je sklonować, aby zacząć.

Oto kod scala:

package httpsserver 

import java.security.{SecureRandom, KeyStore} 
import javax.net.ssl.{KeyManagerFactory, SSLContext} 

import akka.actor.ActorSystem 
import akka.http.scaladsl.{HttpsContext, Http} 
import akka.http.scaladsl.server.Directives._ 
import akka.http.scaladsl.server.Route 
import akka.stream.ActorMaterializer 

object Server extends App { 

    val serverContext: HttpsContext = { 
    val password = "abcdef".toCharArray 
    val context = SSLContext.getInstance("TLS") 
    val ks = KeyStore.getInstance("PKCS12") 
    ks.load(getClass.getClassLoader.getResourceAsStream("keys/server.p12"), password) 
    val keyManagerFactory = KeyManagerFactory.getInstance("SunX509") 
    keyManagerFactory.init(ks, password) 
    context.init(keyManagerFactory.getKeyManagers, null, new SecureRandom) 
    // start up the web server 
    HttpsContext(context) 
    } 

    implicit val system = ActorSystem("server") 
    implicit val materializer = ActorMaterializer() 
    import system._ 

    val route = Route(complete("ok")) 

    Http().bindAndHandle(route, interface = "0.0.0.0", port = 8081, httpsContext = Some(serverContext)) 
} 
+1

To niesamowite, szkoda, że ​​nie ma oficjalnego przykładu w dokumentacji akka-http. –

+1

Dokumenty akka-http pozostawiają wiele do życzenia. Mam nadzieję, że poprawi się, gdy akka-http zostanie zintegrowany z akka 2.4. –

+0

Czy masz pojęcie, kiedy to się stanie? (wszelkie oficjalne słowa na ten temat) –