2016-01-25 4 views
5

Ich versuche ein selbstsigniertes Zertifikat zu meiner Konfiguration hinzuzufügen, damit mein Web-Service Inhalte über SSL bereitstellen kann, aber ich hatte kein Glück.Akka HTTP 2.0 zur Verwendung von SSL (HTTPS)

Hier ist meine aktuelle Konfiguration

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

Irgendwelche Ideen auf, was ich misisng der Lage sein, eine HTTPS-Server spin up?

Mein Projekt wird mit akka 2.0 und scala

+1

Es gibt einen Abschnitt über Server-Größe HTTPS in der Dokumentation: [Server-Side HTTPS Support] (http://doc.akka.io/docs/akka- stream-and-http-experimental/2.0.2/scala/http/low-level-server-side-api.html # serverseite-https-support) – planetenkiller

+1

Ich empfehle, Apache oder Nginx als https-Proxy-Server zu verwenden. Es ist schneller (wegen der C++ - Implementierung) und oft aktualisiert (aufgrund der Popularität) – mgosk

Antwort

8

Es gibt einige Tests im akka Codebasis, die die HTTPS-Funktionalität zu testen. Sie verwenden die vordefinierten http-Kontexte, die in ExampleHttpContexts definiert sind.

Ich habe ein kleines Repo erstellt, das die Schlüssel aus dem akka-Repository verwendet (ich hoffe, es macht ihnen nichts aus) und erstellt einen minimalen https-Server mit einem selbstsignierten Zertifikat here. Fertig als ein Repo statt als ein Kern, so können Sie es einfach klonen, um zu beginnen. Hier

ist der scala Code:

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

Das ist großartig, es ist schade, dass es kein offizielles Beispiel in der akka-http-Dokumentation gibt. –

+1

Die Dokumente von akka-http lassen viel zu wünschen übrig. Ich hoffe, dies wird sich verbessern, sobald akka-http in akka 2.4 integriert wird. –

+0

Haben Sie eine Idee, wann das passieren wird? (irgendwelche offiziellen Worte dazu) –

Verwandte Themen