Akka HTTP 2.0 to use SSL (HTTPS)

后端 未结 1 1699
别跟我提以往
别跟我提以往 2020-12-16 05:33

I am trying to add a self signed certificate to my configuration in order to make my web service to serve content over SSL but I had no luck.

Here is my current conf

相关标签:
1条回答
  • 2020-12-16 06:08

    There are some tests in the akka code base that test the https functionality. They use the predefined http contexts defined in ExampleHttpContexts.

    I have created a small repo that uses the keys from the akka repository (I hope they won't mind) and creates a minimal https server using a self-signed certificate here. Done as a repo instead of as a gist so you can just clone it to get started.

    Here is the 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))
    }
    
    0 讨论(0)
提交回复
热议问题