Я получаю сообщение об ошибке при попытке использовать 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.