Being a CA is not as cumbersome as you may think. This explanation shows how to do it, with only openssl installed.
echo '01' > demoCA/serial; touch demoCA/index.txt
openssl req -config ca.cnf -extensions ca_cert -sha256 -new -x509 -newkey rsa:2048 -days 3660 -keyout ca-key.pem -out ca-crt.pem
openssl x509 -x509toreq -in ca-crt.pem -signkey ca-key.pem -out ca-crt.req
mv ca-crt.pem ca-crt.pem.old
openssl x509 -req -extfile ca.cnf -extensions ca_cert -sha256 -signkey ca-key.pem -in ca-crt.req -days 3660 -set_serial 0 -out ca-crt.pem
openssl req -config ca.cnf -new -sha256 -noenc -out crt.req -keyout crt.key
openssl genpkey -algorithm ed25519 -out crt.key
and
openssl req -config ca.cnf -new -sha256 -noenc -out crt.req -key crt.key
openssl pkcs12 -export -in crt.pem -inkey key.pem -certfile ca-crt.pem -out crt.p12
openssl ca -config ca.cnf -extensions client_cert -in crt.req -days 732
openssl ca -config ca.cnf -extensions client_cert -spkac crt.req -days 732
SAN=DNS:value1,DNS:value2 openssl ca -config ca-sign.cnf -extensions server_cert -in crt.req -days 732
-extensions ocsp_cert
-extensions tsa_cert
openssl ca -config ca.cnf -crl_compromise -revoke 01.pem
openssl ca -config ca.cnf -crl_CA_compromise -revoke 01.pem
openssl ca -config ca.cnf -crl_reason superseded -revoke 01.pem
openssl ca -config ca.cnf -crl_reason [affiliationChanged,cessationOfOperation] -revoke 01.pem
openssl ca -config ca.cnf -gencrl -crldays 183 -out inoaca.crl -crlexts crl_ext