Ошибка рукопожатия TLS в эликсире / эрланге с использованием Oauth2 - PullRequest
0 голосов
/ 26 апреля 2020

Я получаю сообщение об ошибке при попытке использовать OAuth2 для связи со службой Google OpenID Connect. Ошибка выглядит следующим образом:

no case clause matching: {:error, %OAuth2.Error{reason: {:tls_alert, {:handshake_failure, 'TLS client: In state hello received SERVER ALERT: Fatal - Handshake Failure\n '}}}}

Я получаю эту ошибку из библиотеки Эрланга Хакни (или просто SSL в OTP). Я нашел несколько источников, которые, кажется, видят похожие проблемы:

https://elixirforum.com/t/oauth2-bad-cert-invalid-key-usage/14457/10

https://github.com/benoitc/hackney/pull/619

I Я использую Let's Encrypt, чтобы получить сертификат. Найти его с помощью Kubernetes Cluster Issuer. Мой файл yaml выглядит следующим образом:

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
 name: letsencrypt-production
 namespace: cert-manager
spec:
 acme:
   server: https://acme-v02.api.letsencrypt.org/directory
   email: fake@email.com
   privateKeySecretRef:
     name: letsencrypt-production
   solvers:
   - http01:
       ingress:
         class: "public" 

Мой mix.exs выглядит следующим образом:

defmodule ProviderApi.Mixfile do
  use Mix.Project

  def project do
    [
      app: :provider_api,
      version: "0.0.1",
      elixir: "~> 1.9.0",
      elixirc_paths: elixirc_paths(Mix.env()),
      compilers: [:phoenix, :gettext] ++ Mix.compilers(),
      build_embedded: Mix.env() == :prod,
      start_permanent: Mix.env() == :prod,
      # aliases: aliases(),
      deps: deps(),
      preferred_cli_env: [
        coveralls: :test,
        "coveralls.html": :test,
        "coveralls.json": :test
      ],
      test_coverage: [tool: ExCoveralls]
    ]
  end

  # Configuration for the OTP application.
  #
  # Type `mix help compile.app` for more information.
  def application do
    [
      mod: {ProviderApi, []},
      applications: [
        :phoenix,
        :phoenix_pubsub,
        :cowboy,
        :logger,
        :gettext,
        :phoenix_ecto,
        :postgrex,
        :ueberauth,
        :oauth,
        :ueberauth_google,
        :ecto_sql,
      ]
    ]
  end

  # Specifies which paths to compile per environment.
  defp elixirc_paths(:test), do: ["lib", "web", "test/support"]
  defp elixirc_paths(_), do: ["lib", "web"]

  # Specifies your project dependencies.
  #
  # Type `mix help deps` for examples and options.
  defp deps do
    [
      {:phoenix, "~> 1.4.0"},
      {:phoenix_pubsub, "~> 1.1"},
      {:phoenix_ecto, "~> 4.0"},
      {:postgrex, "~> 0.15.3"},
      {:gettext, "~> 0.13.1"},
      {:plug_cowboy, "~> 2.0"},
      {:plug, "~> 1.7"},
      {:cors_plug, "~> 1.3"},
      {:ecto_sql, "~> 3.4.1"},
      {:excoveralls, "~> 0.7.2", only: :test},
      # TODO remove when hooks are disossaciated
      {:neuron, "~> 0.7.0"},
      {:oauth, "~> 1.6", github: "tim/erlang-oauth"},
      {:ueberauth, "~> 0.6.0"},
      {:ueberauth_google, "~> 0.9"},
      {:ja_serializer, "~> 0.12.0"},
      {:guardian, "~> 1.2.1"},
      {:database_url, "~> 0.1"},
      {:hackney, github: "benoitc/hackney", override: true}
    ]
  end
end

Примечание. Я использую последнюю версию hackney с {:hackney, github: "benoitc/hackney", override: true}.

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ. Я только что обнаружил, что у меня возникла та же проблема при попытке локально подключиться к Google через localhost: 4000, когда я обновил некоторые зависимости в моем mix.lock. Поэтому начинаю думать, что это может быть не проблема TLS, это может быть связано с соединением с ueberauth или ueberauth_google.

...