Packages
nerves_hub_link
2.3.0
2.12.0
2.11.1
2.11.0
retired
2.10.2
2.10.1
2.10.0
2.9.0
2.9.0-rc.3
2.9.0-rc.2
2.9.0-rc.1
2.8.1
2.8.0
2.7.3
2.7.2
2.7.0
retired
2.6.0
2.5.2
2.5.1
2.5.0
2.4.0
2.3.0
2.2.1
2.2.0
2.1.1
2.1.0
2.0.0
1.4.1
1.4.0
1.3.0
1.2.0
1.1.0
1.0.1
1.0.0
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.10.2
0.10.1
retired
0.10.0
retired
0.10.0-rc.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.6
Manage your Nerves fleet by connecting it to NervesHub
Current section
Files
Jump to
Current section
Files
lib/nerves_hub_link/certificate.ex
defmodule NervesHubLink.Certificate do
require Logger
def key_pem_to_der(nil), do: <<>>
def key_pem_to_der(pem) do
case X509.PrivateKey.from_pem(pem) do
{:error, :not_found} -> <<>>
{:ok, decoded} -> X509.PrivateKey.to_der(decoded)
end
end
def pem_to_der(nil), do: <<>>
def pem_to_der(cert) do
case X509.Certificate.from_pem(cert) do
{:error, :not_found} -> <<>>
{:ok, decoded} -> X509.Certificate.to_der(decoded)
end
end
@doc "Returns a list of der encoded CA certs"
@spec ca_certs() :: [binary()]
def ca_certs do
ssl = Application.get_env(:nerves_hub_link, :ssl, [])
ca_store = Application.get_env(:nerves_hub_link, :ca_store)
cond do
# prefer explicit SSL setting if available
is_list(ssl[:cacerts]) ->
ssl[:cacerts]
Code.ensure_loaded?(ca_store) ->
ca_store.ca_certs()
Code.ensure_loaded?(CAStore) ->
Logger.debug(
"[NervesHubLink] Using CAStore dependency. Requests may fail if the NervesHub server certificate is not signed by a globally trusted CA."
)
CAStore.file_path()
|> File.read!()
|> X509.from_pem()
|> Enum.map(&X509.Certificate.to_der/1)
true ->
Logger.debug(
"[NervesHubLink] Using default system certificates. Requests may fail if the NervesHub server certificate is not signed by a globally trusted CA, or the installed system certificates are old."
)
:public_key.cacerts_get()
end
end
def fwup_public_keys() do
Application.get_env(:nerves_hub_link, :fwup_public_keys)
end
end