OpenSSL is an open-source implementation of the SSL and TLS protocols. The core library,
written in the C programming language, implements basic cryptographic functions and provides
various utility functions. Wrappers allowing the use of the OpenSSL library in a variety
of computer languages are available. Versions are available for most Unix-like
operating systems, OpenVMS and Microsoft Windows. IBM provides a port for the System i. OpenSSL
is based on SSLeay by Eric Andrew Young and Tim Hudson, development of which unofficially
ended on December 17, 1998, when Young and Hudson both started to work for RSA Security.
Project history The OpenSSL project was founded in 1998 to
invent a free set of encryption tools for the code used on the Internet. As of 2014
two thirds of all webservers use it. The OpenSSL project management team consists of four Europeans.
The entire development group consists of 11 members, out of which 10 are volunteers; there
is only one full-time employee, Stephen Henson, the lead developer.
The project has a budget of less than $1 million a year and relies in part on donations. Steve
Marquess, a former military consultant in Maryland started the foundation for donations
and consultancy contracts and garnered sponsorship from the United States Department of Homeland
Security and the United States Department of Defense.
Major version releases Algorithms
OpenSSL supports a number of different cryptographic algorithms:
Ciphers AES, Blowfish, Camellia, SEED, CAST-128, DES,
IDEA, RC2, RC4, RC5, Triple DES, GOST 28147-89 Cryptographic hash functions
MD5, MD4, MD2, SHA-1, SHA-2, RIPEMD-160, MDC-2, GOST R 34.11-94
Public-key cryptography RSA, DSA, Diffie–Hellman key exchange, Elliptic
curve, GOST R 34.10-2001 (Perfect forward secrecy is supported using
elliptic curve Diffie–Hellman since version 1.0.)
FIPS 140-2 compliance As of December 2012, OpenSSL is one of two
open source programs to be involved with validation under the FIPS 140-2 computer security standard
by the National Institute of Standards and Technology's Cryptographic Module Validation
Program.. A certificate was first awarded in January
2006 but revoked in July 2006 "when questions were raised about the validated module’s
interaction with outside software." The certification was reinstated in February 2007.
Licensing OpenSSL is "dual licensed" under the OpenSSL
License and the SSLeay License. The OpenSSL License is Apache License 1.0 and SSLeay License
bears some similarity to a 4-clause BSD License. The common usage of the term dual-license
is that the user may pick which license they wish to use. However, OpenSSL documentation
uses the term dual-license to mean that both licenses apply.
As the OpenSSL License is Apache License 1.0, but not Apache License 2.0, it requires the
phrase This product includes software developed by the OpenSSL Project for use in the OpenSSL
Toolkit. to appear in advertising material and any redistributions. Due to this restriction,
the OpenSSL License and the Apache License 1.0 are incompatible with the GPL. Some GPL
developers have added an OpenSSL exception to their licenses specifically allowing OpenSSL
to be used with their system. GNU Wget and climm both use such exceptions. Some packages
explicitly modify the GPL license by adding an extra section at the beginning of the license
documenting the exception. Other packages use the LGPL-licensed GnuTLS and MPL-licensed
NSS, both of which perform the same task. Notable vulnerabilities
Timing attacks on RSA Keys On March 14, 2003, a timing attack on RSA
keys were discovered, which meant a vulnerability within OpenSSL versions 0.9.7a and 0.9.6.
This vulnerability was assigned CAN-2003-0147 by the Common Vulnerabilities and Exposures
project. RSA blinding was not turned on by default by OpenSSL, since it is not easily
possible to when providing SSL or TLS using OpenSSL. Almost all SSL enabled Apaches were
affected, along with many other applications of OpenSSL. Timing differences on the number
of extra reductions along and use of Karatsuba and normal integer multiplication algorithms
meant that it was possible for local and remote attackers to obtain the private key of the
server. Denial of Service ASN.1 parsing
OpenSSL 0.9.6k had a bug where certain ASN.1 sequences triggered a large amount of recursions
on Windows machines, discovered on November 4, 2003. Windows could not handle large recursions
correctly, so OpenSSL would crash as a result. Being able to send arbitrary large amounts
of ASN.1 sequences would cause OpenSSL to crash as a result. A client certificate to
a SSL/TLS enabled server could accept ASN.1 sequences and crash.
OCSP stapling vulnerability When creating a handshake, the client could
send an incorrectly formatted ClientHello message, leading to OpenSSL parsing more than
the end of the message. Titled CVE-2011-0014, this affected all OpenSSL versions 0.9.8h
to 0.9.8q and OpenSSL 1.0.0 to 1.0.0c. Since the parsing could lead to a read on an incorrect
memory address, it was possible for the attacker to cause a DDOS. It was also possible that
some applications expose the contents of parsed OCSP extensions, leading to an attacker being
able to read the contents of memory that came after the ClientHello.
ASN1 Bio vulnerability When using BIO or FILE based functions to
read untrusted DER format data, OpenSSL is vulnerable. The CVE assigned this CVE-2012-2110,
as this was discovered on April 19, 2012. While not directly affecting the SSL/TLS code
of OpenSSL, any application that was using ANS1 functions were also not affected.
SSL, TLS and DTLS Plaintext Recovery Attack In handling CBC cipher-suites in SSL, TLS,
and DTLS, OpenSSL was found to be vulnerable to a timing attack which arises during the
MAC processing. This was found by Nadhem Alfardan and Kenny Paterson, who published their findings
on February 5, 2013, given the name CVE-2013-0169. All versions of OpenSSL were affected, and
it was only partially mitigated by the use of the OpenSSL FIPS Object Module and the
FIPS mode of operation is enabled. Predictable keys
In order to keep a warning from being issued by the Valgrind analysis tool, a maintainer
of the Debian distribution applied a patch to the Debian implementation of the OpenSSL
suite, which inadvertently broke its random number generator in the process. The broken
version was included in the Debian release of September 17, 2006. Any key generated with
the broken random number generator, as well as data encrypted with such a key, was compromised.
The error was reported by Debian on May 13, 2008.
On the Debian 4.0 distribution, these problems were fixed in version 0.9.8c-4etch3 and for
the Debian 5.0 distribution, these problems were fixed in version 0.9.8g-9.
Heartbleed
OpenSSL versions 1.0.1 through 1.0.1f had a severe memory handling bug in their implementation
of the TLS Heartbeat Extension that could be used to reveal up to 64 kilobytes of the
application's memory with every heartbeat. By reading the memory of the web server, attackers
could access sensitive data, including the server's private key. This could allow attackers
to decode earlier eavesdropped communications if the encryption protocol used does not ensure
Perfect Forward Secrecy. Knowledge of the private key could also allow an attacker to
mount a man-in-the-middle attack against any future communications. The vulnerability might
also reveal unencrypted parts of other users' sensitive requests and responses, including
session cookies and passwords, which might allow attackers to hijack the identity of
another user of the service. At its disclosure, some 17% or half a million
of the Internet's secure web servers certified by trusted authorities were believed to have
been vulnerable to the attack. However, Heartbleed can affect both the server and client.
CCS Injection Vulnerability CCS Injection Vulnerability is a security
bypass vulnerability that exists in OpenSSL. The vulnerability is due to a weakness in
OpenSSL methods used for keying material. This vulnerability can be exploited through
the use of a man in the middle attack, where an attacker may be able to decrypt and modify
traffic in transit. A remote unauthenticated attacker could exploit this vulnerability
by using a specially crafted handshake to force the use of weak keying material. Successful
exploitation could lead to a security bypass condition where an attacker could gain access
to potentially sensitive information. The attack can only be performed between a vulnerable
client and server. OpenSSL clients are vulnerable in all versions
of OpenSSL. Servers are only known to be vulnerable in OpenSSL 1.0.1 and 1.0.2-beta1. Users of
OpenSSL servers earlier than 1.0.1 are advised to upgrade as a precaution.
Forks LibreSSL
In the wake of Heartbleed, members of the OpenBSD project forked OpenSSL starting with
the 1.0.1g branch, to create a project named LibreSSL. In the first week of pruning the
OpenSSL's codebase, more than 90,000 lines of C code had been removed from the fork.
BoringSSL In June 2014, Google announced its own fork
of OpenSSL dubbed BoringSSL. Google plans to co-operate with OpenSSL and LibreSSL developers.
See also
Comparison of TLS implementations POSSE project
References
External links