defmodule CA.CSR do def ca() do ca_key = X509.PrivateKey.new_ec(:sect571r1) {ca_key, X509.Certificate.self_signed(ca_key, "/C=UA/L=Kyiv/O=SYNRC/CN=CSR-CMP", template: :root_ca)} end def server(cn) do {ca_key, ca} = ca() server_key = X509.PrivateKey.new_ec(:sect571r1) X509.Certificate.new(X509.PublicKey.derive(server_key), "/C=UA/L=Kyiv/O=SYNRC/CN=" <> cn, ca, ca_key, extensions: [subject_alt_name: X509.Certificate.Extension.subject_alt_name(["n2o.dev", "erp.uno"]) ]) end def csr() do {ca_key, ca} = ca() priv = X509.PrivateKey.new_ec(:sect571r1) csr = X509.CSR.new(priv, "/C=UA/L=Kyiv/O=SYNRC", extension_request: [X509.Certificate.Extension.subject_alt_name(["n2o.dev"])]) true = X509.CSR.valid?(csr) subject = X509.CSR.subject(csr) :io.format '~p~n', [csr] X509.Certificate.new(X509.CSR.public_key(csr), subject, ca, ca_key, extensions: [subject_alt_name: X509.Certificate.Extension.subject_alt_name(["n2o.dev", "erp.uno"]) ]) end end