||This article's introduction section may not adequately summarize its contents. (April 2014)|
|Developer(s)||The OpenSSL Project|
|Stable release||) [±]|
|Written in||C, assembly|
|License||Apache License 1.0 and four-clause BSD License|
In computer networking, 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 (including Solaris, Linux, Mac OS X and the various open-source BSD operating systems), OpenVMS and Microsoft Windows. IBM provides a port for the System i (OS/400).
- 1 Project history
- 2 Major version releases
- 3 Algorithms
- 4 FIPS 140-2 compliance
- 5 Licensing
- 6 Notable vulnerabilities
- 7 Forks
- 8 See also
- 9 References
- 10 External links
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
|Version||Original release date||Comment||Last minor version|
|Old version, no longer supported: 0.9.1||December 23, 1998||
||0.9.1c (December 23, 1998)|
|Old version, no longer supported: 0.9.2||March 22, 1999||
||0.9.2b (April 6, 1999)|
|Old version, no longer supported: 0.9.3||May 25, 1999||
||0.9.3a (May 27, 1999)|
|Old version, no longer supported: 0.9.4||August 9, 1999||
||0.9.4 (August 9, 1999)|
|Old version, no longer supported: 0.9.5||February 28, 2000||
||0.9.5a (April 1, 2000)|
|Old version, no longer supported: 0.9.6||September 24, 2000||
||0.9.6m (March 17, 2004)|
|Old version, no longer supported: 0.9.7||December 31, 2002||
||0.9.7m (February 23, 2007)|
|Older version, yet still supported: 0.9.8||July 5, 2005||
||0.9.8zf (March 19, 2015)|
|Older version, yet still supported: 1.0.0||March 29, 2010||
||1.0.0r (March 19, 2015)|
|Older version, yet still supported: 1.0.1||March 14, 2012||
||1.0.1m (March 19, 2015)|
|Current stable version: 1.0.2||January 22, 2015||
||1.0.2a (March 19, 2015)|
|Future release: 1.1.0|
OpenSSL supports a number of different cryptographic algorithms:
- 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
FIPS 140-2 compliance
As of December 2012[update], 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 (NIST) Cryptographic Module Validation Program (CMVP). (OpenSSL itself is not validated, but a component called the OpenSSL FIPS Object Module, based on OpenSSL, was created to provide many of the same capabilities).
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.
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. (http://www.openssl.org/) to appear in advertising material and any redistributions (Sections 3 and 6 of the OpenSSL License). 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 (like Deluge) 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.
Timing attacks on RSA Keys
On March 14, 2003, a timing attack on RSA keys was 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 ASN1 functions (particularly d2i_X509 and d2i_PKCS12) 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 (Debian-specific)
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 (version 0.9.8c-1). 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 (etch), these problems were fixed in version 0.9.8c-4etch3 and for the Debian 5.0 distribution (lenny), these problems were fixed in version 0.9.8g-9.
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 on April 7, 2014, around 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 (CVE-2014-0224) 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 before the versions 0.9.8za, 1.0.0m and 1.0.1h. 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.
ClientHello sigalgs DoS
This vulnerability allows anyone to take a certificate, read it contents and accurately modify it to abuse to exploit causing it to crash a client or server. A client connects to a OpenSSL 1.0.2 server and renegotiates with an invalid signature algorithms extension a NULL pointer dereference will occur. This can cause a DoS attack against the server.
A Stanford Security researcher, David Ramos had a private exploit and presented it before the OpenSSL team where they patched the issue.
OpenSSL classified the bug as a high-severity issue, noting version 1.0.2 was found vulnerable.
In 2009, after frustrations with the original OpenSSL API, Marco Peereboom, an OpenBSD developer at the time, forked the original API by creating Agglomerated SSL (assl), which reuses OpenSSL API under the hood, but provides a much simpler external interface.
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.
- "OpenSSL: News, Project Newsflash". Retrieved March 20, 2015.
- "Critical crypto bug in OpenSSL opens two-thirds of the Web to eavesdropping".
- Yadron, Danny (11 April 2014). "Internet Security Relies on Very Few". WSJ.com. Retrieved 14 April 2014.
- "OpenSSL – Project Newsflash". OpenSSL Software Foundation. Retrieved 11 February 2013.
- "OpenSSL – News summary". OpenSSL Software Foundation. Retrieved 11 February 2013.
- "OpenSSL – Changelog". OpenSSL Software Foundation. Retrieved 29 October 2013.
- "OpenSSL: About, Release Strategy". OpenSSL Software Foundation. Retrieved 30 December 2014.
- "GOST engine OpenSSL 1.0.0 README". cvs.openssl.org.
- "Protecting data for the long term with forward secrecy". Retrieved 2012-11-05.
- Validated FIPS 140-1 and FIPS 140-2 Cryptographic Modules. NIST. Retrieved 2012-12-19.
- "Important Notes about OpenSSL and FIPS 140-2". openssl.org.
- "NIST recertifies open source encryption module". gcn.com.
- "OpenSSL: Source, License". openssl.org.
- "Licenses – Free Software Foundation". fsf.org.
- "WGET 1.10.2 for Windows (win32)". users.ugent.be.
- "Releases of source and binaries". climm.org. Retrieved 30 November 2010.
- "Deluge LICENSE file". deluge-torrent.org. Retrieved 24 January 2013.
- "OpenSSL Updates Fix Critical Security Vulnerabilities [09 Aug 2014]". Retrieved 25 Aug 2014.
- "ASN1 BIO vulnerability". OpenSSL.
- "DSA-1571-1 openssl – predictable random number generator". Debian. May 13, 2008.
- OpenSSL.org (7 April 2014). "OpenSSL Security Advisory [07 Apr 2014]". Retrieved 9 April 2014.
- OpenSSL (2014-04-07). "TSL heartbeat read overrun (CVE-2014-0160)". Retrieved 2014-04-08.
- Codenomicon Ltd (2014-04-08). "Heartbleed Bug". Retrieved 2014-04-08.
- "Man in Middle Attacks [04 Jun 2014]". Retrieved 25 Aug 2014.
- "Why Heartbleed is dangerous? Exploiting CVE-2014-0160". IPSec.pl. 2014.
- Mutton, Paul (8 April 2014). "Half a million widely trusted websites vulnerable to Heartbleed bug". Netcraft Ltd. Retrieved 8 April 2014.
- "OpenSSL continues to bleed out more flaws – more critical vulnerabilities found". Cyberoam Threat Research Labs. 2014.
- "CVE-2014-0224". CVE. 2014.
- "OpenSSL Security Advisory [05 Jun 2014]". OpenSSL. 2014.
- "OpenSSL Patches Severe Denial-of-Service Vulnerability [20 March 2015]". Brandon Stosh. 2015.
- "security/assl: assl-1.5.0p0v0 – hide awful SSL API in a sane interface". OpenBSD ports. 2014-05-22. Retrieved 2015-02-10.
- "OpenBSD has started a massive strip-down and cleanup of OpenSSL". OpenBSD journal. 2014-04-15.
- "OpenBSD forks, prunes, fixes OpenSSL". ZDNet. 21 April 2014. Retrieved 21 April 2014.
- "Google unveils independent 'fork' of OpenSSL called 'BoringSSL'". Ars Technica. 2014-06-21.
|Wikimedia Commons has media related to OpenSSL.|