OpenSSL
What is OpenSSL ?
OpenSSL is an OpenSource implementation of the TLS and SSL protocols. It is used as a base for securitizing the communications (authenticating, cyphering, signing) of the rest of the OpenSource server software. However, following a record of security issues, the security and quality of the software appears more uncertain. In 2013, WikiLeaks published documents obtained by Edward Snowden, which revealed that since 2010, the NSA had effectively broken/bypassed SSL/TLS by possibly exploiting vulnerabilities such as HeartBleed.
Since OpenSSL 1.0.1g, members of the OpenBSD project forked OpenSSL to create a project named LibreSSL that can be used as a plugin replacement for OpenSSL.
To make things a bit less worrying, OpenSSL is part of the base Slackware distribution and so benefits from the Slackware security advisories. The official documentation can be found on the official http site openssl.org but is somewhat cryptic. man openssl is a better option.
From an historic point of view, the SSL suite of protocols was created by Netscape to securitize communications made over TCP/IP. SSL affords encrypting the data and authenticating the parties on the wire using various methods and algorithms. SSL was the base layer to ensure confidentiality of essential TCP protocols such as smtp http pop3 nntp imap ldap. SSL encapsulates these services (and others…) using alternate protocol names and port numbers. BUT the SSL protocols were superseded by TLS and are now deprecated due to security weaknesses. SSL should not be used any longer. Instead, use TLS. Current version is TLS v1.2.
Protocol | Port # | Secure Protocol | Secure Port # | Service |
---|---|---|---|---|
SMTP | 25 | SMTPS | 465 | Mail exchange |
HTTP | 80 | HTTPS | 443 | Web browsing |
POP3 | 110 | POP3S | 995 | Mail retrieval |
NTTP | 119 | NTTPS | 563 | News exchange |
IMAP | 143 | IMAPS | 993 | Mail retrieval |
LDAP | 389 | LDAPS | 636 | Ldap Directory |
Use only TLS
Please note : the SSL protocols were superseded by TLS and are now deprecated due to security weaknesses. SSL should not be used any longer. Instead, use TLS. Current version is v1.2
Compiling OpenSSL
OpenSSL is part of the base Slackware distribution and so benefits from the Slackware security advisories, which makes it very easy to upgrade to the most secure version at any time. If for some reason you'd nevertheless like to compile it from source, here's how to do it :
Beware : to avoid breaking other software in the distribution, openssl-x.y.z can be replaced only by a minor fix update. Be sure to check the current version number using ls /usr/lib/*ssl* first.
Installing OpenSSL is otherwise quite straigthforward :
# tar -C /usr/local -xvf openssl-x.y.z.tar.gz # cd /usr/local # chown -R root openssl-x.y.z # chgrp -R root openssl-x.y.z # cd openssl-x.y.z # vi README # vi INSTALL # make clean # ./config --prefix=/usr/local --openssldir=/etc/ssl shared # make # make test # cd /var/log/packages # removepkg openssl-x.y.z-X86_64-2 # removepkg openssl-solibs-x.y.z-X86_64-2 # cd /usr/local/openssl-x.y.z # make install # make clean # cd ../lib # mv libssl* ../lib64 # mv libcrypto* ../lib64 # cd pkgconfig # mv *ssl.pc ../../lib64/pkgconfig # mv *crypto.pc ../../lib64/pkgconfig # cd /usr/lib64 # ln -sf /usr/local/lib64/libssl.so.1.0.0 libssl.so.1 # ln -sf /usr/local/lib64/libcrypto.so.1.0.0 libcrypto.so.1 # ldconfig # cd /etc/ssl # cp -r man /usr/local # rm -r man # reboot
reboot affords making sure that nothing was missed by the install and that the system is able to boot normally. If anything went wrong be ready to manually fix your system, for example by reinstalling the default Slackware OpenSSL package using installpkg.
Using OpenSSL
Except for managing certificates (see the next paragraph) OpenSSL is not used directly but thru libraries to encapsulate other protocols such as smtp http pop3 nntp imap ldap.
Using Certificates
Using a server certificate will afford remote smtp http pop3 nntp imap ldap clients to make sure that they are connected to the right site. The server certificate contains the full domain name and other information, signed by a Certificate Authority.
To effect the real checking the clients need to get copies of the server and Certificate Authority certificates. The server certificate comes as part of the TLS protocol. The Certificate Authority certificate however must be present on the client.
This is the case for most commercial Certificate Authority certificates, that are preinstalled. Being your own Certificate Authority will save the cost of purchasing a server certificate and renewing it yearly, but it will be necessary to install the Certificate Authority certificate on every client using your services.
The home of the OpenSSL configuration is /etc/ssl. It initially include directories certs misc private to store the certificates, and a configuration file openssl.cnf, that must be edited first. You might want to change dir and certificate to these values :
dir = /etc/ssl # Where everything is kept certificate = $dir/certs/cacert.pem # The CA certificate
To create a self-signed certification authority certificate :
Beware : for the certification to work, it is not possible to create a certification authority certificate and a server certificate with the same DN (X500 Directory Name).
# cd /etc/ssl # openssl req -new -x509 -days 3650 -keyout private/cakey.pem -out certs/cacert.pem -config openssl.cnf Generating a 1024 bit RSA private key .........++++++ .............++++++ writing new private key to 'private/cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- 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]:FR State or Province Name (full name) [Some-State]:. Locality Name (eg, city) []:Rennes Organization Name (eg, company) [Internet Widgits Pty Ltd]:Studioware Organizational Unit Name (eg, section) []:CA Common Name (eg, YOUR name) []:Studioware.com Email Address []:nospam@studioware.com
To create a server certificate request :
Beware : for a server certificate, the common name must be the fully qualified domain name. A reverse DNS entry should also exist.
# cd /etc/ssl # mkdir newcerts # openssl req -new -keyout newcerts/mtakey.pem -out newcerts/mtareq.pem -days 365 -config openssl.cnf Generating a 1024 bit RSA private key ................................++++++ ..................++++++ writing new private key to 'newkey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- 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]:FR State or Province Name (full name) [Some-State]:. Locality Name (eg, city) []:Rennes Organization Name (eg, company) [Internet Widgits Pty Ltd]:Studioware Organizational Unit Name (eg, section) []:MTA Common Name (eg, YOUR name) []:inner.studioware.com Email Address []:nospam@studioware.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
To sign the server certificate request :
# cd /etc/ssl # cat </dev/null >index.txt # cat >serial 01 <ctrl>d # cat newcerts/mtareq.pem newcerts/mtakey.pem > newcerts/mta.pem # openssl ca -policy policy_anything -out newcerts/mtacert.pem -config openssl.cnf -infiles newcerts/mta.pem Using configuration from openssl.cnf Enter pass phrase for /etc/ssl/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Jan 2 13:40:43 2007 GMT Not After : Jan 2 13:40:43 2008 GMT Subject: countryName = FR localityName = Rennes organizationName = Studioware organizationalUnitName = MTA commonName = Jean-Pierre Menicucci emailAddress = nospam@studioware.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 06:08:16:E7:C0:A3:D3:9A:D1:92:4A:6F:B8:6E:E8:28:47:79:BD:12 X509v3 Authority Key Identifier: keyid:92:59:DF:C2:26:D6:54:46:46:A8:10:4E:56:CB:09:A2:E9:B4:86:93 Certificate is to be certified until Jan 2 13:40:43 2008 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
To remove the pass phrase from the server private key :
Beware : it is necessary to remove this pass phrase so that sendmail could start without any human intervention.
# openssl rsa -in newcerts/mtakey.pem -out newcerts/mtakey.pem.unsecure Enter pass phrase for newcerts/mtakey.pem: writing RSA key
To move the files to the right directories with the right rights and clean up :
# cd newcerts # ls 01.pem mta.pem mtacert.pem mtakey.pem mtakey.pem.unsecure mtareq.pem # mv mtacert.pem ../certs # mv mtakey* ../private # rm 01.pem mta.pem mtareq.pem # cd ../certs # chmod go+r * # cd ../private # chmod go-r *
When renewing an existing certificate mtakey.pem, the following commands afford making the required copies :
# cp mtakey.pem.unsecure apache.mtakey.pem.unsecure # cp mtakey.pem.unsecure asterisk.mtakey.pem.unsecure # cp mtakey.pem.unsecure ldap.mtakey.pem.unsecure # cp mtakey.pem.unsecure news.mtakey.pem.unsecure # cp mtakey.pem.unsecure smmsp.mtakey.pem.unsecure # chown apache:apache apache.mtakey.pem.unsecure # chown asterisk:asterisk asterisk.mtakey.pem.unsecure # chown ldap:ldap ldap.mtakey.pem.unsecure # chown smmsp:smmsp smmsp.mtakey.pem.unsecure # chown news:news news.mtakey.pem.unsecure # cd ../certs # vi mtacert.pem d59d :$ :r ../private/mtakey.pem.unsecure :w server.pem :x # chown cyrus:mail server.pem # chmod 600 server.pem
To check an external certificate
For OpenSSL to use an external certification authority certificate, you need to place in your /etc/ssl/certs directory a copy of it and a symbolic link to this copy. The name of this link must be based on the certificate hash code (see http://www.sendmail.org/~ca/email/starttls.html). This can be done in this way :
# C=CertificateFileName # ln -s $C `openssl x509 -noout -hash < $C`.0
Creating VMs | Main Page | OpenLDAP |