Comparison_of_TLS_implementations

Comparison of TLS implementations

Comparison of TLS implementations

Add article description


The Transport Layer Security (TLS) protocol provides the ability to secure communications across or inside networks. This comparison of TLS implementations compares several of the most notable libraries. There are several TLS implementations which are free software and open source.

All comparison categories use the stable version of each implementation listed in the overview section. The comparison is limited to features that directly relate to the TLS protocol.

Overview

More information Implementation, Developed by ...
  1. Apache-2.0 for OpenSSL 3.0 and later releases. OpenSSL-SSLeay dual-license for any release before OpenSSL 3.0.

TLS/SSL protocol version support

Several versions of the TLS protocol exist. SSL 2.0 is a deprecated[24] protocol version with significant weaknesses. SSL 3.0 (1996) and TLS 1.0 (1999) are successors with two weaknesses in CBC-padding that were explained in 2001 by Serge Vaudenay.[25] TLS 1.1 (2006) fixed only one of the problems, by switching to random initialization vectors (IV) for CBC block ciphers, whereas the more problematic use of mac-pad-encrypt instead of the secure pad-mac-encrypt was addressed with RFC 7366.[26] A workaround for SSL 3.0 and TLS 1.0, roughly equivalent to random IVs from TLS 1.1, was widely adopted by many implementations in late 2011.[27] In 2014, the POODLE vulnerability of SSL 3.0 was discovered, which takes advantage of the known vulnerabilities in CBC, and an insecure fallback negotiation used in browsers.[28]

TLS 1.2 (2008) introduced a means to identify the hash used for digital signatures. While permitting the use of stronger hash functions for digital signatures in the future (rsa,sha256/sha384/sha512) over the SSL 3.0 conservative choice (rsa,sha1+md5), the TLS 1.2 protocol change inadvertently and substantially weakened the default digital signatures and provides (rsa,sha1) and even (rsa,md5).[29]

Datagram Transport Layer Security (DTLS or Datagram TLS) 1.0 is a modification of TLS 1.1 for a packet-oriented transport layer, where packet loss and packet reordering have to be tolerated. The revision DTLS 1.2 based on TLS 1.2 was published in January 2012.[30]

TLS 1.3 (2018) specified in RFC 8446 includes major optimizations and security improvements. QUIC (2021) specified in RFC 9000 and DTLS 1.3 (2022) specified in RFC 9147 builds on TLS 1.3. The publishing of TLS 1.3 and DTLS 1.3 obsoleted TLS 1.2 and DTLS 1.2.

Note that there are known vulnerabilities in SSL 2.0 and SSL 3.0. In 2021, IETF published RFC 8996 also forbidding negotiation of TLS 1.0, TLS 1.1, and DTLS 1.0 due to known vulnerabilities. NIST SP 800-52 requires support of TLS 1.3 by January 2024. Support of TLS 1.3 means that two compliant nodes will never negotiate TLS 1.2.

More information Implementation, SSL 2.0 (insecure) ...
  1. As of SSL-J 7.0, support for TLS 1.0 and 1.1 has been removed
  2. SSL 2.0 client hello is supported for backward compatibility reasons even though SSL 2.0 is not supported.
  3. Server-side implementation of the SSL/TLS protocol still supports processing of received v2-compatible client hello messages."NSS 3.24 release notes". Mozilla Developer Network. Mozilla. Archived from the original on 2016-08-26. Retrieved 2016-06-19.
  4. Secure Transport: SSL 2.0 was discontinued in OS X 10.8. SSL 3.0 was discontinued in OS X 10.11 and iOS 9.TLS 1.1, 1.2 and DTLS are available on iOS 5.0 and later, and OS X 10.9 and later."Technical Note TN2287: iOS 5 and TLS 1.2 Interoperability Issues". iOS Developer Library. Apple Inc. Retrieved 2012-05-03.
  5. Since OTP 22
  6. Since OTP 23

NSA Suite B Cryptography

Required components for NSA Suite B Cryptography (RFC 6460) are:

Per CNSSP-15, the 256-bit elliptic curve (specified in FIPS 186-2), SHA-256, and AES with 128-bit keys are sufficient for protecting classified information up to the Secret level, while the 384-bit elliptic curve (specified in FIPS 186-2), SHA-384, and AES with 256-bit keys are necessary for the protection of Top Secret information.

More information Implementation, TLS 1.2 Suite B ...

Certifications

Note that certain certifications have received serious negative criticism from people who are actually involved in them.[71]

More information Implementation, Embedded FIPS Solution ...
  1. with Sun Sparc 5 w/ Sun Solaris v 2.4SE (ITSEC-rated)
  2. with Sun Ultra-5 w/ Sun Trusted Solaris version 2.5.1 (ITSEC-rated)
  3. with Solaris v8.0 with AdminSuite 3.0.1 as specified in UK IT SEC CC Report No. P148 EAL4 on a SUN SPARC Ultra-1
  4. with these platforms; Red Hat Enterprise Linux Version 4 Update 1 AS on IBM xSeries 336 with Intel Xeon CPU, Trusted Solaris 8 4/01 on Sun Blade 2500 Workstation with UltraSPARC IIIi CPU
  5. with these platforms; Red Hat Enterprise Linux v5 running on an IBM System x3550, Red Hat Enterprise Linux v5 running on an HP ProLiant DL145, Sun Solaris 10 5/08 running on a Sun SunBlade 2000 workstation, Sun Solaris 10 5/08 running on a Sun W2100z workstation

Key exchange algorithms (certificate-only)

This section lists the certificate verification functionality available in the various implementations.

More information Implementation, RSA ...

Key exchange algorithms (alternative key-exchanges)

More information Implementation, SRP ...

Certificate verification methods

More information Implementation, Application-defined ...

Encryption algorithms

More information Implementation, Block cipher with mode of operation ...
Notes
  1. This algorithm is not defined yet as TLS cipher suites in RFCs, is proposed in drafts.
  2. authentication only, no encryption
  3. This algorithm is implemented in an NSS fork used by Pale Moon.

Obsolete algorithms

More information Implementation, Block cipher with mode of operation ...
Notes
  1. IDEA and DES have been removed from TLS 1.2.[146]
  2. 40 bits strength of cipher suites were designed to operate at reduced key lengths in order to comply with US regulations about the export of cryptographic software containing certain strong encryption algorithms (see Export of cryptography from the United States). These weak suites are forbidden in TLS 1.1 and later.
  3. The RC4 attacks weaken or break RC4 used in SSL/TLS. Use of RC4 is prohibited by RFC 7465.
  4. The RC4 attacks weaken or break RC4 used in SSL/TLS.

Supported elliptic curves

This section lists the supported elliptic curves by each implementation.

Defined curves in RFC 8446 (for TLS 1.3) and RFC 8422, 7027 (for TLS 1.2 and earlier)

More information applicable TLS version, TLS 1.3 and earlier ...

Proposed curves

More information Implementation, M221Curve2213 ...

Deprecated curves in RFC 8422

More information Implementation, sect163k1NIST K-163 (1) ...
More information Implementation, secp160k1 (15) ...
Notes
  1. These elliptic curves were "Disabled by Default" in current JDK families as part of JDK-8236730.[178]
  2. These elliptic curves were subsequently removed in JDK 16+ as part of JDK-8252601.[179]

Data integrity

More information Implementation, HMAC-MD5 ...

Compression

Note the CRIME security exploit takes advantage of TLS compression, so conservative implementations do not enable compression at the TLS level. HTTP compression is unrelated and unaffected by this exploit, but is exploited by the related BREACH attack.

More information Implementation, DEFLATE (insecure) ...

Extensions

In this section the extensions each implementation supports are listed. Note that the Secure Renegotiation extension is critical for HTTPS client security [citation needed]. TLS clients not implementing it are vulnerable to attacks, irrespective of whether the client implements TLS renegotiation.

More information Implementation, Secure Renegotiation ...

Assisted cryptography

This section lists the known ability of an implementation to take advantage of CPU instruction sets that optimize encryption, or utilize system specific devices that allow access to underlying cryptographic hardware for acceleration or for data separation.

More information Implementation, PKCS #11 device ...
  1. Pure Java implementations relies on JVM processor optimization capabilities, such as OpenJDK support for AES-NI[221]
  2. BSAFE SSL-J can be configured to run in native mode, using BSAFE Crypto-C Micro Edition to benefit from processor optimization.[222]

System-specific backends

This section lists the ability of an implementation to take advantage of the available operating system specific backends, or even the backends provided by another implementation.

More information Implementation, /dev/crypto ...

Cryptographic module/token support

More information Implementation, TPM support ...

Code dependencies

More information Implementation, Dependencies ...

Development environment

More information Implementation, Namespace ...
  1. ^
    ASN.1 manipulation classes
  2. ^
    Cert-J proprietary API
  3. ^
    Certificate Path manipulation classes
  4. ^
    Crypto-J proprietary API, JCE, CMS and PKI
  5. API
  6. ^
    SSLJ proprietary API
  7. ^
    JSSE API

Portability concerns

More information Implementation, Platform requirements ...

See also

  • SCTP — with DTLS support
  • DCCP — with DTLS support
  • SRTP — with DTLS support (DTLS-SRTP) and Secure Real-Time Transport Control Protocol (SRTCP)

References

  1. "Botan: Release Notes". Retrieved 2023-10-09.
  2. "Release Notes - bouncycastle.org". 2023-11-13. Retrieved 2023-11-18.
  3. "Java LTS Resources - bouncycastle.org". 2024-03-01. Retrieved 2024-03-31.
  4. "Java FIPS Resources - bouncycastle.org". 2023-09-28. Retrieved 2022-09-29.
  5. "C# .NET FIPS Resources - bouncycastle.org". 2023-02-28. Retrieved 2023-02-28.
  6. Gutmann, Peter (2019). "Downloading". cryptlib. University of Auckland School of Computer Science. Retrieved 2019-08-07.
  7. "JDK Releases". Oracle Corporation. Retrieved 2022-12-09.
  8. "JDK Releases". Oracle Corporation. Retrieved 2024-01-17.
  9. Brent Cook (28 March 2024). "LibreSSL 3.8.4 and 3.9.1 released". Retrieved 28 March 2024.
  10. The features listed are for the closed source version
  11. "MatrixSSL 4.2.2 Open release". 2019-09-11. Retrieved 2020-03-20.
  12. "Release 3.6.0". 28 March 2024. Retrieved 23 April 2024.
  13. "NSS:Release versions". Mozilla Wiki. Retrieved 7 November 2022.
  14. "OpenSSL version 3.3.0 published". 9 April 2024. Retrieved 11 April 2024.
  15. "wolfSSL product description". Retrieved 2016-05-03.
  16. "wolfSSL Embedded SSL/TLS". Retrieved 2016-05-03.
  17. "wolfSSL ChangeLog". 2023-10-31. Retrieved 2023-10-31.
  18. Möller, Bodo; Duong, Thai; Kotowicz, Krzysztof (September 2014). "This POODLE Bites: Exploiting The SSL 3.0 Fallback" (PDF). Retrieved 15 October 2014.
  19. Elgamal, Taher; Hickman, Kipp E. B. (19 April 1995). The SSL Protocol. I-D draft-hickman-netscape-ssl-00.
  20. "Version 1.11.13, 2015-01-11 — Botan". 2015-01-11. Archived from the original on 2015-01-09. Retrieved 2015-01-16.
  21. "RSA BSAFE Technical Specification Comparison Tables" (PDF). Archived from the original (PDF) on 2015-09-24. Retrieved 2015-01-09.
  22. "[gnutls-devel] GnuTLS 3.4.0 released". 2015-04-08. Retrieved 2015-04-16.
  23. "[gnutls-devel] GnuTLS 3.6.3". 2018-07-16. Retrieved 2018-09-16.
  24. "OpenBSD 5.6 Released". 2014-11-01. Retrieved 2015-01-20.
  25. "LibreSSL 2.3.0 Released". 2015-09-23. Retrieved 2015-09-24.
  26. "LibreSSL 3.3.3 Released". 2021-05-04. Retrieved 2021-05-04.
  27. "MatrixSSL - News". Archived from the original on 2015-02-14. Retrieved 2014-11-09.
  28. "Mbed TLS 3.0.0 branch released". GitHub. 2021-07-07. Retrieved 2021-08-13.
  29. "mbed TLS 2.0.0 released". 2015-07-10. Retrieved 2015-07-14.
  30. "NSS 3.19 release notes". Mozilla Developer Network. Mozilla. Archived from the original on 2015-06-05. Retrieved 2015-05-06.
  31. "NSS 3.14 release notes". Mozilla Developer Network. Mozilla. Archived from the original on 2013-01-17. Retrieved 2012-10-27.
  32. "NSS 3.15.1 release notes". Mozilla Developer Network. Mozilla. Retrieved 2013-08-10.
  33. "NSS 3.39 release notes". Mozilla Developer Network. Mozilla. 2018-08-31. Archived from the original on 2021-12-07. Retrieved 2018-09-15.
  34. "NSS 3.16.2 release notes". Mozilla Developer Network. Mozilla. 2014-06-30. Archived from the original on 2021-12-07. Retrieved 2014-06-30.
  35. "OpenSSL 1.1.0 Series Release Notes". www.openssl.org. Archived from the original on 2018-03-17. Retrieved 2016-09-03.
  36. "Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.1 [14 Mar 2012]". 2012-03-14. Archived from the original on December 5, 2014. Retrieved 2015-01-20.
  37. "Major changes between OpenSSL 1.0.1l and OpenSSL 1.0.2 [22 Jan 2015]". Archived from the original on September 4, 2014. Retrieved 2015-01-22.
  38. "S2N Readme". GitHub. 2019-12-21.
  39. "TLS Cipher Suites (Windows)". msdn.microsoft.com. 14 July 2023.
  40. "TLS Cipher Suites in Windows Vista (Windows)". msdn.microsoft.com. 25 October 2021.
  41. "Protocols in TLS/SSL (Schannel SSP)". Microsoft. 2022-05-25. Retrieved 2023-11-18.
  42. "Protocols in TLS/SSL (Schannel SSP)". 25 May 2022. Retrieved 6 November 2022.
  43. "[wolfssl] wolfSSL 3.6.6 Released". 2015-08-20. Retrieved 2015-08-24.
  44. "[wolfssl] wolfSSL 3.13.0 Released". 2017-12-21. Retrieved 2022-01-17.
  45. "Search - Cryptographic Module Validation Program - CSRC". csrc.nist.gov. Archived from the original on 2014-12-26. Retrieved 2014-03-18.
  46. "cryptlib". 11 October 2013. Archived from the original on 11 October 2013.
  47. "B.5 Certification". GnuTLS 3.7.7. Retrieved 26 September 2022.
  48. "OpenSSL and FIPS 140-2". Archived from the original on 2013-05-28. Retrieved 2014-11-15.
  49. "LibreSSL 2.1.2 released". 2014-12-09. Retrieved 2015-01-20.
  50. "NSS 3.20 release notes". Mozilla. 2015-08-19. Archived from the original on 2021-12-07. Retrieved 2015-08-20.
  51. "OpenSSL: CVS Web Interface". Archived from the original on 2013-04-15. Retrieved 2014-11-12.
  52. Extensions to support GOST in Schannel might be available.[citation needed]
  53. "Microsoft Security Bulletin MS14-066 - Critical (Section Update FAQ)". Microsoft. November 11, 2014. Retrieved 11 November 2014.
  54. Thomlinson, Matt (November 11, 2014). "Hundreds of Millions of Microsoft Customers Now Benefit from Best-in-Class Encryption". Microsoft Security. Retrieved 11 November 2014.
  55. "RSA BSAFE SSL-J 6.2.4 Release Notes". 2018-09-05. Archived from the original on 2018-09-10.
  56. "LibreSSL 2.0.4 released". Retrieved 2014-08-04.
  57. Laurie, B.; Langley, A.; Kasper, E. (June 2013). Certificate Transparency. IETF. doi:10.17487/RFC6962. ISSN 2070-1721. RFC 6962. Retrieved 2020-08-31.
  58. "MatrixSSL 3.8.3". Archived from the original on 2017-01-19. Retrieved 2017-01-18.
  59. "How Certificate Revocation Works". Microsoft TechNet. Microsoft. March 16, 2012. Retrieved July 10, 2013.
  60. "Version 1.11.12, 2015-01-02 — Botan". 2015-01-02. Retrieved 2015-01-09.
  61. "gnutls 3.6.0". 2017-09-21. Retrieved 2018-01-07.
  62. "gnutls 3.4.12". 2016-05-20. Archived from the original on 2016-10-13. Retrieved 2016-05-29.
  63. "JDK 12 Release Notes". Retrieved 2024-01-14.
  64. "NSS 3.25 release notes". Mozilla Developer Network. Mozilla. Archived from the original on 2021-12-07. Retrieved 2016-07-01.
  65. "NSS 3.12 is released". Retrieved 2013-11-19.
  66. "NSS 3.12.3 Release Notes". Mozilla Developer Network. Mozilla. Archived from the original on 2023-04-02. Retrieved 2023-04-01.
  67. "NSS 3.23 release notes". Mozilla Developer Network. Mozilla. Archived from the original on 2021-04-14. Retrieved 2016-03-09.
  68. "Version 1.11.15, 2015-03-08 — Botan". 2015-03-08. Retrieved 2015-03-11.
  69. "NSS 3.15.3 release notes". Mozilla Developer Network. Mozilla. Archived from the original on 2014-06-05. Retrieved 2014-07-13.
  70. "Version 1.11.5, 2013-11-10 — Botan". 2013-11-10. Retrieved 2015-01-23.
  71. "gnutls 3.6.12". 2020-02-01. Retrieved 2021-08-31.
  72. "JDK 13 Early-Access Release Notes". Archived from the original on 2020-04-01. Retrieved 2019-06-20.
  73. "LibreSSL 2.5.1 release notes". OpenBSD. 2017-01-31. Retrieved 2017-02-23.
  74. "MatrixSSL 4.0 changelog". GitHub. Retrieved 2018-09-18.
  75. "PolarSSL 1.3.3 released". 2013-12-31. Archived from the original on 2014-01-07. Retrieved 2015-01-23.
  76. "PolarSSL 1.3.1 released". 2013-10-15. Archived from the original on 2015-01-23. Retrieved 2015-01-23.
  77. "Bug 1305243 - Support for X448". Mozilla. Retrieved 2022-08-04.
  78. "OpenSSL 1.1.0x Release Notes". 25 August 2016. Archived from the original on 18 May 2018. Retrieved 18 May 2018.
  79. "OpenSSL  GitHub Issue #487 Tracker". GitHub. 2 December 2015. Retrieved 18 May 2018.
  80. "OpenSSL 1.1.1x Release Notes". 1 May 2018. Retrieved 18 May 2018.
  81. "OpenSSL  GitHub Issue #5049 Tracker". GitHub. 9 January 2018. Retrieved 18 May 2018.
  82. "wolfSSL Release 4.4.0 (04/22/2020)". 2020-04-22. Retrieved 2022-10-18.
  83. Simon, Josefsson; Manuel, Pégourié-Gonnard. Additional Elliptic Curves for Transport Layer Security (TLS) Key Agreement. I-D draft-josefsson-tls-additional-curves.
  84. "Release Note: Removal of Legacy Elliptic Curves (Java 16)". JDK Bug System (JBS). Retrieved 6 January 2022.
  85. Negotiation of arbitrary curves has been shown to be insecure for certain curve sizes Mavrogiannopoulos, Nikos and Vercautern, Frederik and Velichkov, Vesselin and Preneel, Bart (2012). "A cross-protocol attack on the TLS protocol" (PDF). Proceedings of the 2012 ACM conference on Computer and communications security. Association for Computing Machinery. pp. 62–72. doi:10.1145/2382196.2382206. ISBN 978-1-4503-1651-4.{{cite conference}}: CS1 maint: multiple names: authors list (link)
  86. "SHA2 and Windows". Retrieved 2014-09-08.
  87. "Version 1.11.16, 2015-03-29 — Botan". 2016-03-29. Retrieved 2016-09-08.
  88. "Version 1.11.10, 2014-12-10 — Botan". 2014-12-10. Retrieved 2014-12-14.
  89. "Version 1.11.26, 2016-01-04 — Botan". 2016-01-04. Retrieved 2016-02-25.
  90. Present, but disabled by default due to lack of use by any implementation.
  91. "gnutls 3.2.0". Archived from the original on 2016-01-31. Retrieved 2015-01-26.
  92. Mavrogiannopoulos, Nikos (August 21, 2017). "[gnutls-help] GnuTLS 3.6.0 released".
  93. "gnutls 3.4.4". Archived from the original on 2017-07-17. Retrieved 2015-08-25.
  94. "%DUMBFW priority keyword". Retrieved 2017-04-30.
  95. "gnutls 3.6.6". 2019-01-25. Retrieved 2019-09-01.
  96. "LibreSSL 2.1.3 released". 2015-01-22. Retrieved 2015-01-22.
  97. "LibreSSL 2.1.4 released". 2015-03-04. Retrieved 2015-03-04.
  98. "MatrixSSL - News". 2014-12-04. Archived from the original on 2015-02-14. Retrieved 2015-01-26.
  99. "Download overview - PolarSSL". 2014-04-11. Archived from the original on 2015-02-09. Retrieved 2015-01-26.
  100. "mbed TLS 1.3.10 released". 2015-02-08. Archived from the original on 2015-02-09. Retrieved 2015-02-09.
  101. "NSS 3.15.5 release notes". Mozilla Developer Network. Mozilla. Archived from the original on January 26, 2015. Retrieved 2015-01-26.
  102. "NSS 3.17.1 release notes". Archived from the original on 2019-04-19. Retrieved 2014-10-17.
  103. "NSS 3.21 release notes". Archived from the original on 2021-12-07. Retrieved 2015-11-14.
  104. "Major changes between OpenSSL 1.0.1f and OpenSSL 1.0.1g [7 Apr 2014]". 2014-04-07. Archived from the original on 2015-01-20. Retrieved 2015-02-10.
  105. "wolfSSL Version 4.2.0 is Now Available!". 22 October 2019. Retrieved 2021-08-13.
  106. "Version 1.11.31, 2015-08-30 — Botan". 2016-08-30. Retrieved 2016-09-08.
  107. Mavrogiannopoulos, Nikos (October 9, 2016). "[gnutls-devel] gnutls 3.5.5".
  108. "PolarSSL 1.3.3 released". 2013-12-31. Archived from the original on 2014-01-07. Retrieved 2014-01-07. We've incorporated support for AES-NI in our AES and GCM modules.
  109. Normally NSS's libssl performs all operations via the PKCS#11 interface, either to hardware or software tokens
  110. "LibreSSL 2.2.1 Released". 2015-07-08. Retrieved 2016-01-30.
  111. "wolfProvider". 2021-11-10. Retrieved 2022-01-17.
  112. "libp11: PKCS#11 wrapper library". 19 January 2018 via GitHub.
  113. On the fly replaceable/augmentable.
  114. "NSPR". Mozilla Developer Network.
  115. For Unix/Linux it uses /dev/urandom if available, for Windows it uses CAPI. For other platforms it gets data from clock, and tries to open system files. NSS has a set of platform dependent functions it uses to determine randomness.

Share this article:

This article uses material from the Wikipedia article Comparison_of_TLS_implementations, and is written by contributors. Text is available under a CC BY-SA 4.0 International License; additional terms may apply. Images, videos and audio are available under their respective licenses.