Generate CA with openssl and sign a certificate for qmail
source: http://www.flatmtn.com/article/setting-openssl-create-certificates
dir=/pathtosomedir
cd $dir
mkdir sslcert
chmod 0700 sslcert
cd sslcert
dir=/pathtosomedir/sslcert
mkdir certs private
echo '100001' >serial
touch certindex.txt
vi openssl.cnf
openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -days (( 3 * 365 )) -config ./openssl.cnf
cd /var/qmail/ssl
openssl req -new -nodes -keyout key -out req -days 365 -config $dir/openssl.cnf
openssl ca -out cert -config $dir/openssl.cnf -infiles req
rm req
cat /var/qmail/ssl/{key,cert} > /etc/qmail/servercert.pem
ln -sf /var/qmail/ssl/cert /etc/ssl/certs/dovecot.pem
ln -sf /var/qmail/ssl/key /etc/ssl/private/dovecot.pem
qmailctl reload
systemctl restart dovecot
cacert.pem is the Certificate of the CA to import into Clients.
Import in Archlinux:
scp server:$dir/cacert.pem /etc/ca-certificates/trust-source/anchors/ trust extract-compat
The file openssl.cnf looks like this:
# # OpenSSL configuration file.
# # Establish working directory.
dir = $dir
[ ca ]
default_ca = CA_default
[ CA_default ]
serial = $dir/serial
database = $dir/certindex.txt
new_certs_dir = $dir/certs
certificate = $dir/cacert.pem
private_key = $dir/private/cakey.pem
default_days = 365
default_md = md5
preserve = no
email_in_dn = no
nameopt = default_ca
certopt = default_ca
policy = policy_match
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req ]
default_bits = 1024
# Size of keys
default_keyfile = key.pem
# name of genera ted keys
default_md = md5
# messag e digest algorithm
string_mask = nombstr
# permitted char acters
distinguished_name = req_distinguished_name
req_extensions = v3_req
[ req_distinguished_name ]
# Variable name Prompt string
#------------------------- ----------------------------------
organizationName = organizationName
organizationalUnitName = Server Type
emailAddress = postmaster@adke.org
emailAddress_max = 40
localityName = City
stateOrProvinceName = State
countryName = DE
countryName_min = 2
countryName_max = 2
commonName = commonName
commonName_max = 64
# Default values for the above, for consistency and less typing.
# Variable name Value
#------------------------ ------------------------------
organizationName_default = adke.org
localityName_default = Muc
stateOrProvinceName_default = Bavaria
countryName_default = DE
emailAddress_default = postmaster@adke.org
[ v3_ca ]
basicConstraints = CA:TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
[ v3_req ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash