12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #!/bin/sh
- # Generate a CA with a self-signed root certificate that then signs the server certificate
- # Based on the OpenSSL Cookbook by Ivan Ristic:
- # https://www.feistyduck.com/library/openssl-cookbook/online/
- #
- # Especially, see chapter 1.5. Creating a private Certification Authority:
- # https://www.feistyduck.com/library/openssl-cookbook/online/openssl-command-line/private-ca.html
- export KEY_PATH=keys
- export CRT_PATH=certificates
- export CA_PATH=ca
- # Create environment.
- # $CA_PATH is deleted in the end.
- # If new certificates need to be issued, this needs to be done before the cleanup in the end.
- mkdir -p $KEY_PATH $CRT_PATH $CA_PATH/db $CA_PATH/private $CA_PATH/certificates
- touch $CA_PATH/db/index
- openssl rand -hex 16 > $CA_PATH/db/serial
- # Generate all private keys
- openssl genpkey -algorithm ed25519 -out $KEY_PATH/root-ca.key
- openssl genpkey -algorithm ed25519 -out $KEY_PATH/server.key
- openssl genpkey -algorithm ed25519 -out $KEY_PATH/client.key
- # For the server, we also need the public key
- openssl pkey -in $KEY_PATH/server.key -pubout -out $KEY_PATH/server.pub
- # Generate a Certificate Signing Request for the Root CA based on a config file
- openssl req -new \
- -config root-ca.cnf -out root-ca.csr \
- -key $KEY_PATH/root-ca.key
- # Self-sign the root certificate
- openssl ca -batch \
- -selfsign -config root-ca.cnf \
- -extensions ca_ext \
- -in root-ca.csr -out $CRT_PATH/root-ca.crt -notext
- # Create a Certificate Signing request for the server certificate
- openssl req -new \
- -config server.cnf -out server.csr \
- -key $KEY_PATH/server.key
- openssl req -text -in server.csr -noout
- # Issue the server certificate
- openssl ca -batch \
- -config root-ca.cnf \
- -extensions server_ext \
- -extfile server.cnf -extensions ext \
- -in server.csr -out $CRT_PATH/server.crt -notext \
- -days 1825
- # Create a Certificate Signing request for the client certificate
- openssl req -new \
- -config client.cnf -out client.csr \
- -key $KEY_PATH/client.key
- # Issue the client certificate
- openssl ca -batch \
- -config root-ca.cnf \
- -extensions client_ext \
- -in client.csr -out $CRT_PATH/client.crt -notext \
- -days 1825
- # Clean up
- # IMPORTANT: If new certificates should be issued, $CA_PATH and its files MUST NOT be deleted!
- # New certificates can be created in this script before cleaning up.
- rm -rf *.csr $CA_PATH
|