Akka HTTP 2.0 使用 SSL (HTTPS)

Akka HTTP 2.0 to use SSL (HTTPS)

我正在尝试将自签名证书添加到我的配置中,以使我的 Web 服务能够通过 SSL 提供内容,但我没有成功。

这是我当前的配置

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

关于我想启动 HTTPS 服务器的任何想法?

我的项目正在使用 akka 2.0 和 scala

akka 代码库中有一些测试 https 功能的测试。他们使用 ExampleHttpContexts.

中定义的预定义 http 上下文

我创建了一个使用 akka 存储库中的密钥的小型存储库(我希望他们不会介意)并使用 self-signed 证书 here 创建了一个最小的 https 服务器。作为回购而不是作为要点完成,因此您只需克隆它即可开始。

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