Introduction To OpenSSL
Introduction To OpenSSL
Introduction To OpenSSL
OPENSSL
OVERVIEW
What is OpenSSL
SSL Protocol
Command-Line Interface
Application Programming Interface
Problems with OpenSSL
Summary
WHAT IS OPENSSL
OpenSSL is based on the excellent SSLeay library developed by Eric A. Young and
Tim J. Hudson.
The current versions is 1.0.1o . Current version installed on your system can be
checked by
typing openssl version v on command line.
WHAT IS OPENSSL CONT.
Features:
Open Source
Fully Functional Implementation
Cross-Platform (Unix & Windows)
Command-Line Interface (openssl command)
Application Programming Interface (C/C++, Perl, PHP & Python)
INSTALLATION
The primary goal of the SSL (Secure Sockets Layer) Protocol and its successor - TLS
(Transport Layer Security) Protocol is to provide privacy and reliability between two
communicating applications.
SSL PROTOCOL CONT.
Handshake
Negotiate the cipher suite
Authenticate the server
Authenticate the client (Optional)
Generate the session keys
Establish a secure connection
QUESTION
In public key cryptography we can also use session keys which are symmetric. How do
the sender (say a server) provides this session key information to its clients?
If the sender (here server) provides the session key by encrypting using its private
key, all the clients (including a malicious one) can decrypt (using available public key)
and see that session key , right? The server can't use public key to encrypt the
session key since none of the clients have private key to decrypt it.
ANSWER
Normally, the client sends the session key. This means that clients cannot decrypt
other session keys.
Although this approach ensures each session is safe from information gathered in
other sessions, it doesn't guard the session against an attacker later acquiring the
server's key and retrospectively decoding all recorded sessions.
To guard against that threat is termedPerfect Forward Privacy. This can be achieved
using ephemeral Diffie-Hellman (EDH,DHE) key exchange.
There is an excellent blog explaining recent improvements inPerfect Forward Secrecy
which is well worth reading.
SSL PROTOCOL CONT.
Functionality
Creation of RSA, DSA & DH key pairs
Creation of X.509 Certificates, CSRs & CRLs
Calculation of Message Digests(hashes)
Encryption & Decryption with Ciphers
SSL/TLS Client & Server Tests
Handling of S/MIME signed and/or encrypted mails
Note: S/MIME: Secure/Multi Purpose Internet Mail extensions
Command Line help: Type openssl command -- help
COMMAND-LINE INTERFACE CONT.
Example 1: Generating your self signed X.509 certificate for your digital signatures
Example 2 Secure Apache Web Server with mod_ssl & OpenSSL
Example 3 S/MIME
GENERATING CERTIFICATE SIGNING
REQUEST
openssl req x509 days 365 newkey rsa:2048 -keyout my-key.pem out my-
cert.pem
PUTTING BOTH KEY AND CERT IN PFX FILE
Now We can use private key to sign document and public key to verify signature
EXPORTING PUBLIC KEY TO HANDOUT
CLIENT
openssl req -x509 -days 2922 -newkey rsa:1024 -md5 -out ca.crt -keyout ca.key
-config .\openssl.cnf
GENERATE THE CSR
openssl req -newkey rsa:1024 -out mec.csr -keyout mec.key -config .\openssl.cnf -reqexts
v3_req
SIGN THE CSR
openssl x509 -req -in mec.csr -extfile .\openssl.cnf -extensions usr_cert -CA ca.crt -CAkey
ca.key -CAcreateserial -sha1 -days 1461 -out mec.crt
GENERATE THE PKCS12
openssl pkcs12 -export -out mec.p12 -in mec.crt -inkey mec.key -certfile ca.crt
MODIFY THE APACHE CONFIGURATION FILE
The Apache Configuration File httpd.conf
SSLEngine off
SSLSessionCache dbm:logs/ssl_cache
SSLSessionCacheTimeout 300
Listen 80
Listen 443
MODIFY THE APACHE CONFIGURATION FILE
CONT.
<VirtualHost _default_:80>
<Location /admin>
Deny from all
</Location>
</VirtualHost>
<VirtualHost _default_:443>
SSLEngine on
SSLCertificateFile conf/ssl.crt/mec.crt
SSLCertificateKeyFile conf/ssl.key/mec.key
SSLCACertificateFile conf/ssl.crt/ca.crt
MODIFY THE APACHE CONFIGURATION FILE
CONT.
<Location /admin>
SSLVerifyClient require
SSLRequire %{SSL_CLIENT_S_DN_CN} eq Administrator
</Location>
</VirtualHost>
S/MIME
Sign
openssl smime -sign -in m.txt -out sign_clear.eml -signer jingli.pem
Verify
openssl smime -verify -in sign_clear.eml -signer jingli.pem -CAfile ca.crt
S/MIME CONT.
Encrypt
openssl smime -encrypt -des3 -in m.txt -out encrypt.eml jingli.crt
Decrypt
openssl smime -decrypt -in encrypt.eml -recip jingli.pem
Sign & Encrypt
openssl smime -sign -in m.txt -text -signer jingli.pem | openssl smime -encrypt -des3 -out
sign_encrypt.eml jingli.pem
APPLICATION PROGRAMMING
INTERFACE
libssl.a or libssl.so
Implementation of SSL_v2/3 & TLS_v1
libcrypto.a or libcrypto.so
Ciphers (AES, DES, RC2/4, Blowfish, IDEA)
Digests (MD5, SHA-1, MDC2)
Public Keys (RSA, DSA, DH)
X509s (ASN.1 DER & PEM)
Others (BIO, BASE64)
APPLICATION PROGRAMMING
INTERFACE CONT.
OpenSSLs libraries are also used by other tools, such as OpenCA, OpenSSH, to
implement secure transmission of data
Using SSL Proxy, arbitrary socket connections can be secured by SSL
PROBLEMS WITH OPENSSL
OpenSSL http://www.openssl.org
SSL http://www.netscape.com/eng/ssl3/draft302.txt
TLS http://www.ietf.org/rfc/rfc2246.txt
Apache http://www.apache.org
mod_ssl http://www.modssl.org
Network Security with OpenSSL by Pravir Chandra, Matt Messier & John Viega
Applied Cryptography by Bruce Schneier
http://www.cisco.com/web/about/ac123/ac147/archived_issues/ipj_1-
1/ssl.html