Generating SSL certificates for differentpla.net

roger's picture

Because I keep forgetting how to.

Preamble

$ mkdir SSL
$ cd SSL
$ cp /usr/lib/ssl/misc/CA.pl .

Setting up a certificate authority

$ ./CA.pl -newca
CA certificate filename (or enter to create)Press Enter

Making CA certificate ...
Generating a 1024 bit RSA private key
.......................++++++
.....................................................++++++
writing new private key to './demoCA/private/cakey.pem'
Enter PEM pass phrase:Enter a passphrase to use for the CA
Verifying - Enter PEM pass phrase:Enter the same passphrase
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:UK
State or Province Name (full name) [Some-State]:England
Locality Name (eg, city) []:London
Organization Name (eg, company) [Internet Widgits Pty Ltd]:differentpla.net
Organizational Unit Name (eg, section) []:Certificate Authority
Common Name (eg, YOUR name) []:ca.differentpla.net
Email Address []:Enter a valid email address

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:Press Enter
An optional company name []:Press Enter
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:Enter the passphrase from above
Check that the request matches the signature
Signature ok
Certificate Details:

(snip)

Certificate is to be certified until May 17 06:21:04 2011 GMT (1095 days)

Write out database with 1 new entries
Data Base Updated

Stashing the CA certificate

# cp /path/to/SSL/demoCA/cacert.pem /etc/ssl/certs/ca-differentpla-net.cer

Generating and signing a certificate

$ ./CA.pl -newreq
Generating a 1024 bit RSA private key
...............++++++
..........++++++
writing new private key to 'newkey.pem'
Enter PEM pass phrase:Enter a passphrase
Verifying - Enter PEM pass phrase:Enter the same passphrase
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:UK
State or Province Name (full name) [Some-State]:England
Locality Name (eg, city) []:London
Organization Name (eg, company) [Internet Widgits Pty Ltd]:differentpla.net
Organizational Unit Name (eg, section) []:Press Enter
Common Name (eg, YOUR name) []:smtp.differentpla.net
Email Address []:Enter a valid email address

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:Press Enter
An optional company name []:Press Enter
Request is in newreq.pem, private key is in newkey.pem
$ ./CA.pl -sign
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:Enter the CA passphrase
Check that the request matches the signature
Signature ok
Certificate Details:

(snip)

Certificate is to be certified until May 17 06:28:15 2009 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Signed certificate is in newcert.pem

Stripping the passphrase

$ cp newkey.pem newkey.pem.org
$ openssl rsa -in newkey.pem.org -out newkey.pem
Enter pass phrase for newkey.pem.org:Enter the passphrase that you provided when generating the key
writing RSA key

Don't need these files any more

$ rm newreq.pem newkey.pem.org

Storing the certificate and key files

# cp /path/to/SSL/newcert.pem /etc/ssl/certs/smtp-differentpla-net.cer
# chmod a+r /etc/ssl/certs/smtp-differentpla-net.cer
# cp /path/to/SSL/newkey.pem /etc/ssl/private/smtp-differentpla-net.key
# chmod 400 /etc/ssl/private/smtp-differentpla-net.key

Using that certificate for qmail

qmail needs a /var/qmail/control/servercert.pem file containing the key (no passphrase) followed by the certificate.

# cat /etc/ssl/private/smtp-differentpla-net.key /etc/ssl/certs/smtp-differentpla-net.cer > /var/qmail/control/servercert.pem
# chmod 400 /var/qmail/control/servercert.pem
# chown vpopmail.vchkpw /var/qmail/control/servercert.pem

Using a certificate for BincIMAP

# cat /etc/ssl/private/imap-differentpla-net.key /etc/ssl/certs/imap-differentpla-net.cer > /usr/local/etc/bincimap.pem
# chown root.staff /usr/local/etc/bincimap.pem
# chmod 400 /usr/local/etc/bincimap.pem

Making the certificates available to anyone that wants them

# mkdir /path/to/www/certs
# cp /etc/ssl/certs/*.cer /path/to/www/certs
# chmod a+r /path/to/www/certs/*

Comments

See also

There is more on this subject and a different technique at http://www.debian-administration.org/articles/284

Re: See also

I don't know about you, but I find that write-up to be significantly more complicated than what I've done. And what I've done was complicated enough.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.