Nano Hash - криптовалюты, майнинг, программирование

Конфигурация Akka Http HTTPS, из-за которой Chrome возвращает ERR_SSL_VERSION_OR_CIPHER_MISMATCH

Я пытаюсь установить безопасное соединение для работы на моем сервере akka-http (localhost), используя самозаверяющий сертификат. Я не добился успеха.

Документы Akka-http по ssl немного расплывчаты. Я пытался собрать кусочки информации со всего мира, но до сих пор не могу заставить это работать.

Я создал черту ssl, как показано ниже:

 trait MySslConfiguration {

  def serverContext: HttpsContext = {
    val password = "password".toCharArray
    val context = SSLContext.getInstance("TLSv1.2")
    val keyStore = KeyStore.getInstance("jks")
    val keyStoreResource = "/scruples_keystore.jks"
    val keyManagerFactory = KeyManagerFactory.getInstance("SunX509")
    val trustManagerFactory = TrustManagerFactory.getInstance("SunX509")
    keyStore.load(getClass.getClassLoader.getResourceAsStream(keyStoreResource), password)
    keyManagerFactory.init(keyStore, password)
    trustManagerFactory.init(keyStore)
    context.init(keyManagerFactory.getKeyManagers, trustManagerFactory.getManagers, new SecureRandom())
    val sslParams = context.getDefaultSSLParameters
    sslParams.setEndpointIdentificationAlgorithm("HTTPS")
    HttpsContext(sslContext = context
    sslParameters = Some(sslParams),
     enabledProtocols = Some(List("TLSv1.2", "TLSv1.1", "TLSv1")))
  }

}

Я добавляю черту при запуске моего сервера следующим образом:

object Main extends App with Core with RestInterface with MySslConfiguration {
  val metricRegistry = new com.codahale.metrics.MetricRegistry()
  override implicit val injector = GlobalInjector.getInjector
  override implicit val system: ActorSystem = injector.instance[ActorSystem]

  override def config: Config = injector.instance[Config]

  override implicit def executor: ExecutionContextExecutor = system.dispatcher

  override val logger: LoggingAdapter = Logging(system, getClass)
  override implicit val materializer: Materializer = ActorMaterializer()


  val routes = allRoutes

  Http().bindAndHandle(routes, config.getString("http.host"), config.getInt("http.port"), httpsContext = Some(serverContext))

Самоподписанное хранилище ключей jks было создано, как показано ниже:

keytool -genkey -keyalg RSA -keysize 2048 -keystore scruples_keystore.jks -alias myalias

Может кто-нибудь помочь?

Что я делаю неправильно? Я уверен, что есть проблема с конфигурацией, но не могу понять.

Другой вопрос, что изменилось бы, если бы я использовал правильный сертификат от ЦС?

Большое спасибо


  • Akka Http использует библиотеку ssl-config, которая имеет собственную обширную документацию: typesafehub.github.io/ssl- config (он был взят из Play-WS и извлечен как отдельная библиотека и теперь также используется Akka-Http). Также см. проект github.com/typesafehub/ssl-config. 26.03.2016
  • Спасибо, что указали мне правильное направление. Я добавил конфигурацию, как описано в документах, которые вы разместили выше, однако я все еще не могу заставить ее работать. Не могли бы вы опубликовать пример кода/конфигурации для самозаверяющего сертификата. Нужно ли мне создавать конфигурацию и вызывать SSLContext.getDefault, чтобы настроить HTTPContext в методе привязки при запуске сервера? Я даже пытался установить ssl-config-ssl.default = true и все еще не заставил сервер отвечать на запросы https 26.03.2016

Ответы:


1

Выяснилось, что проблема заключалась в указании местоположения хранилища ключей как val keyStoreResource = "/scruples_keystore.jks". Указание местоположения хранилища ключей как val keyStoreResource = "scruples_keystore" сделало свое дело, и с миром снова все в порядке...

26.03.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..