<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.0.22 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-tls-sslv3-diediedie-01" category="std" updates="5246">

  <front>
    <title abbrev="SSLv3 is not Secure">Deprecating Secure Sockets Layer Version 3.0</title>

    <author initials="R." surname="Barnes" fullname="Richard Barnes">
      <organization>Mozilla</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <author initials="M." surname="Thomson" fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>martin.thomson@gmail.com</email>
      </address>
    </author>
    <author initials="A." surname="Pironti" fullname="Alfredo Pironti">
      <organization>INRIA</organization>
      <address>
        <email>alfredo@pironti.eu</email>
      </address>
    </author>
    <author initials="A." surname="Langley" fullname="Adam Langley">
      <organization>Google</organization>
      <address>
        <email>agl@google.com</email>
      </address>
    </author>

    <date year="2015"/>

    
    
    

    <abstract>


<t>Secure Sockets Layer version 3.0 (SSLv3) <xref target="RFC6101"/> is no longer secure.  This
document requires that SSLv3 not be used.  The replacement versions, in
particular Transport Layer Security (TLS) 1.2 <xref target="RFC5246"/>, are considerably more
secure and capable protocols.</t>

<t>This document updates the backward compatibility sections of the TLS RFCs to
prohibit fallback to SSLv3.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>The SSLv3 protocol has been subject to a long series of attacks, both on its key
exchange mechanism and on the encryption schemes it supports since it was
released in 1996.  Despite being replaced by TLS 1.0 <xref target="RFC2246"/> in 1999, and
subsequently TLS 1.1 in 2002 <xref target="RFC4346"/> and 1.2 in 2006 <xref target="RFC5246"/>,
availability of these replacement versions has not been universal.  As a result,
many implementations of TLS have permitted the negotiation of SSLv3.</t>

<t>The predecessor of SSLv3, SSL version 2, is no longer considered secure
<xref target="RFC6176"/>.  SSLv3 now follows.</t>

</section>
<section anchor="do-not-use-ssl-version-30" title="Do Not Use SSL Version 3.0">

<t>SSLv3 MUST NOT be used <xref target="RFC2119"/>.  Negotiation of SSLv3 from any version of TLS
MUST NOT be permitted.</t>

<t>Any version of TLS is more secure than SSLv3, though the highest version
available is preferable.</t>

<t>Pragmatically, clients MUST NOT send a ClientHello with
ClientHello.client_version set to {03,00}.  Similarly, servers MUST NOT send a
ServerHello with ServerHello.server_version set to {03,00}.  Any party
receiving a Hello message with the protocol version set to {03,00} MUST
respond with a “protocol_version” alert message and close the connection.</t>

<t>Historically, TLS specifications were not clear on what the record layer version
number (TLSPlaintext.version) could contain when sending ClientHello.  Appendix
E of <xref target="RFC5246"/> notes that TLSPlaintext.version could be selected to maximize
interoperability, though no definitive value is identified as ideal.  That
guidance is still applicable; therefore, TLS servers MUST accept any value
{03,XX} (including {03,00}) as the record layer version number for ClientHello,
but they MUST NOT negotiate SSLv3.</t>

</section>
<section anchor="a-litany-of-attacks" title="A Litany of Attacks">

<section anchor="record-layer" title="Record Layer">

<t>The non-deterministic padding used in the CBC construction of SSLv3
trivially permits the recovery of plaintext <xref target="POODLE"/>. More generally,
the cipher block chaining (CBC) modes of SSLv3 use a flawed MAC-then-encrypt
construction that has subsequently been replaced in TLS versions <xref target="RFC7366"/>.
Unfortunately, the mechanism to correct this flaw relies on extensions: a
feature added in TLS 1.0.  SSLv3 cannot be updated to correct this flaw in the
same way.</t>

<t>The flaws in the CBC modes in SSLv3 are mirrored by the weakness of the stream
ciphers it defines.  Of those defined, only RC4 is currently in widespread use.
RC4, however, exhibits serious biases and is also no longer fit for use
<xref target="I-D.ietf-tls-prohibiting-rc4"/>.</t>

<t>This leaves SSLv3 with no suitable record protection mechanism.</t>

</section>
<section anchor="key-exchange" title="Key Exchange">

<t>The SSLv3 key exchange is vulnerable to man-in-the-middle attacks when
renegotiation <xref target="Ray09"/> or session resumption <xref target="TRIPLE-HS"/> are used.
Each flaw has been fixed in TLS by means of extensions. Again,
SSLv3 cannot be updated to correct these flaws.</t>

</section>
<section anchor="custom-cryptographic-primitives" title="Custom Cryptographic Primitives">

<t>SSLv3 defines custom constructions for PRF, HMAC and digital signature
primitives.  Such constructions lack the deep cryptographic scrutiny that
standard constructions used by TLS have received.  Furthermore, all SSLv3
primitives rely on SHA-1 <xref target="RFC3174"/> and MD5 <xref target="RFC1321"/>: these hash algorithms
are considered weak and are being systematically replaced with stronger hash
functions, such as SHA-256 <xref target="FIPS180-2"/>.</t>

</section>
</section>
<section anchor="limited-capabilities" title="Limited Capabilities">

<t>SSLv3 is unable to take advantage of the many features that have been added to
recent TLS versions.  This includes the features that are enabled by ClientHello
extensions, which SSLv3 does not support.</t>

<t>Though SSLv3 can benefit from new cipher suites, it cannot benefit from new
cryptographic modes and features.  Of these, the following are particularly
prominent:</t>

<t><list style="symbols">
  <t>Authenticated Encryption with Additional Data (AEAD) modes are added in
<xref target="RFC5246"/>.</t>
  <t>Elliptic Curve Diffie-Hellman (ECDH) and Digital Signature Algorithm (ECDSA)
are added in <xref target="RFC4492"/>.</t>
  <t>Stateless session tickets <xref target="RFC5077"/>.</t>
  <t>A datagram mode of operation, DTLS <xref target="RFC6347"/>.</t>
  <t>Application layer protocol negotiation <xref target="RFC7301"/>.</t>
</list></t>

</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>This document has no IANA actions.</t>

</section>
<section anchor="security-considerations" title="Security Considerations">

<t>This entire document aims to improve security by prohibiting the use of a
protocol that is not secure.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference anchor='RFC6101'>

<front>
<title>The Secure Sockets Layer (SSL) Protocol Version 3.0</title>
<author initials='A.' surname='Freier' fullname='A. Freier'>
<organization /></author>
<author initials='P.' surname='Karlton' fullname='P. Karlton'>
<organization /></author>
<author initials='P.' surname='Kocher' fullname='P. Kocher'>
<organization /></author>
<date year='2011' month='August' />
<abstract>
<t>This document is published as a historical record of the SSL 3.0 protocol. The original Abstract follows.&lt;/t>&lt;t> This document specifies version 3.0 of the Secure Sockets Layer (SSL 3.0) protocol, a security protocol that provides communications privacy over the Internet. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. This document defines a Historic Document for the Internet community.</t></abstract></front>

<seriesInfo name='RFC' value='6101' />
<format type='TXT' octets='142297' target='http://www.rfc-editor.org/rfc/rfc6101.txt' />
</reference>



<reference anchor='I-D.ietf-tls-prohibiting-rc4'>
<front>
<title>Prohibiting RC4 Cipher Suites</title>

<author initials='A' surname='Popov' fullname='Andrey Popov'>
    <organization />
</author>

<date month='October' day='1' year='2014' />

<abstract><t>This document requires that Transport Layer Security (TLS) clients and servers never negotiate the use of RC4 cipher suites when they establish connections.  This applies to all TLS versions, and updates [RFC5246], [RFC4346], and [RFC2246].</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tls-prohibiting-rc4-01' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tls-prohibiting-rc4-01.txt' />
</reference>



<reference anchor='RFC2119'>

<front>
<title abbrev='RFC Key Words'>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='Scott Bradner'>
<organization>Harvard University</organization>
<address>
<postal>
<street>1350 Mass. Ave.</street>
<street>Cambridge</street>
<street>MA 02138</street></postal>
<phone>- +1 617 495 3864</phone>
<email>sob@harvard.edu</email></address></author>
<date year='1997' month='March' />
<area>General</area>
<keyword>keyword</keyword>
<abstract>
<t>
   In many standards track documents several words are used to signify
   the requirements in the specification.  These words are often
   capitalized.  This document defines these words as they should be
   interpreted in IETF documents.  Authors who follow these guidelines
   should incorporate this phrase near the beginning of their document:

<list>
<t>
      The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
      NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED",  "MAY", and
      "OPTIONAL" in this document are to be interpreted as described in
      RFC 2119.
</t></list></t>
<t>
   Note that the force of these words is modified by the requirement
   level of the document in which they are used.
</t></abstract></front>

<seriesInfo name='BCP' value='14' />
<seriesInfo name='RFC' value='2119' />
<format type='TXT' octets='4723' target='http://www.rfc-editor.org/rfc/rfc2119.txt' />
<format type='HTML' octets='17970' target='http://xml.resource.org/public/rfc/html/rfc2119.html' />
<format type='XML' octets='5777' target='http://xml.resource.org/public/rfc/xml/rfc2119.xml' />
</reference>



<reference anchor='RFC2246'>

<front>
<title>The TLS Protocol Version 1.0</title>
<author initials='T.' surname='Dierks' fullname='Tim Dierks'>
<organization>Certicom</organization>
<address>
<email>tdierks@certicom.com</email></address></author>
<author initials='C.' surname='Allen' fullname='Christopher Allen'>
<organization>Certicom</organization>
<address>
<email>callen@certicom.com</email></address></author>
<date year='1999' month='January' />
<abstract>
<t>This document specifies Version 1.0 of the Transport Layer Security (TLS) protocol. The TLS protocol provides communications privacy over the Internet. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.</t></abstract></front>

<seriesInfo name='RFC' value='2246' />
<format type='TXT' octets='170401' target='http://www.rfc-editor.org/rfc/rfc2246.txt' />
</reference>



<reference anchor='RFC4346'>

<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.1</title>
<author initials='T.' surname='Dierks' fullname='T. Dierks'>
<organization /></author>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'>
<organization /></author>
<date year='2006' month='April' />
<abstract>
<t>This document specifies Version 1.1 of the Transport Layer Security (TLS) protocol.  The TLS protocol provides communications security over the Internet.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='4346' />
<format type='TXT' octets='187041' target='http://www.rfc-editor.org/rfc/rfc4346.txt' />
</reference>



<reference anchor='RFC4492'>

<front>
<title>Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS)</title>
<author initials='S.' surname='Blake-Wilson' fullname='S. Blake-Wilson'>
<organization /></author>
<author initials='N.' surname='Bolyard' fullname='N. Bolyard'>
<organization /></author>
<author initials='V.' surname='Gupta' fullname='V. Gupta'>
<organization /></author>
<author initials='C.' surname='Hawk' fullname='C. Hawk'>
<organization /></author>
<author initials='B.' surname='Moeller' fullname='B. Moeller'>
<organization /></author>
<date year='2006' month='May' />
<abstract>
<t>This document describes new key exchange algorithms based on Elliptic Curve Cryptography (ECC) for the Transport Layer Security (TLS) protocol.  In particular, it specifies the use of Elliptic Curve Diffie-Hellman (ECDH) key agreement in a TLS handshake and the use of Elliptic Curve Digital Signature Algorithm (ECDSA) as a new authentication mechanism.  This memo provides information for the Internet community.</t></abstract></front>

<seriesInfo name='RFC' value='4492' />
<format type='TXT' octets='72231' target='http://www.rfc-editor.org/rfc/rfc4492.txt' />
</reference>



<reference anchor='RFC5246'>

<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
<author initials='T.' surname='Dierks' fullname='T. Dierks'>
<organization /></author>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'>
<organization /></author>
<date year='2008' month='August' />
<abstract>
<t>This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol.  The TLS protocol provides communications security over the Internet.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='5246' />
<format type='TXT' octets='222395' target='http://www.rfc-editor.org/rfc/rfc5246.txt' />
</reference>



<reference anchor='RFC7366'>

<front>
<title>Encrypt-then-MAC for Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>
<author initials='P.' surname='Gutmann' fullname='P. Gutmann'>
<organization /></author>
<date year='2014' month='September' />
<abstract>
<t>This document describes a means of negotiating the use of the encrypt-then-MAC security mechanism in place of the existing MAC-then-encrypt mechanism in Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS).  The MAC-then-encrypt mechanism has been the subject of a number of security vulnerabilities over a period of many years.</t></abstract></front>

<seriesInfo name='RFC' value='7366' />
<format type='TXT' octets='15775' target='http://www.rfc-editor.org/rfc/rfc7366.txt' />
</reference>




    </references>

    <references title='Informative References'>





<reference anchor='RFC1321'>

<front>
<title abbrev='MD5 Message-Digest Algorithm'>The MD5 Message-Digest Algorithm</title>
<author initials='R.' surname='Rivest' fullname='Ronald L. Rivest'>
<organization>Massachusetts Institute of Technology, (MIT) Laboratory for Computer Science</organization>
<address>
<postal>
<street>545 Technology Square</street>
<street>NE43-324</street>
<city>Cambridge</city>
<region>MA</region>
<code>02139-1986</code>
<country>US</country></postal>
<phone>+1 617 253 5880</phone>
<email>rivest@theory.lcs.mit.edu</email></address></author>
<date year='1992' month='April' /></front>

<seriesInfo name='RFC' value='1321' />
<format type='TXT' octets='35222' target='http://www.rfc-editor.org/rfc/rfc1321.txt' />
</reference>



<reference anchor='RFC3174'>

<front>
<title>US Secure Hash Algorithm 1 (SHA1)</title>
<author initials='D.' surname='Eastlake' fullname='D. Eastlake'>
<organization /></author>
<author initials='P.' surname='Jones' fullname='P. Jones'>
<organization /></author>
<date year='2001' month='September' />
<abstract>
<t>The purpose of this document is to make the SHA-1 (Secure Hash Algorithm 1) hash algorithm conveniently available to the Internet community.  This memo provides information for the Internet community.</t></abstract></front>

<seriesInfo name='RFC' value='3174' />
<format type='TXT' octets='35525' target='http://www.rfc-editor.org/rfc/rfc3174.txt' />
</reference>



<reference anchor='RFC5077'>

<front>
<title>Transport Layer Security (TLS) Session Resumption without Server-Side State</title>
<author initials='J.' surname='Salowey' fullname='J. Salowey'>
<organization /></author>
<author initials='H.' surname='Zhou' fullname='H. Zhou'>
<organization /></author>
<author initials='P.' surname='Eronen' fullname='P. Eronen'>
<organization /></author>
<author initials='H.' surname='Tschofenig' fullname='H. Tschofenig'>
<organization /></author>
<date year='2008' month='January' />
<abstract>
<t>This document describes a mechanism that enables the Transport Layer Security (TLS) server to resume sessions and avoid keeping per-client session state.  The TLS server encapsulates the session state into a ticket and forwards it to the client.  The client can subsequently resume a session using the obtained ticket.  This document obsoletes RFC 4507. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='5077' />
<format type='TXT' octets='41989' target='http://www.rfc-editor.org/rfc/rfc5077.txt' />
</reference>



<reference anchor='RFC6176'>

<front>
<title>Prohibiting Secure Sockets Layer (SSL) Version 2.0</title>
<author initials='S.' surname='Turner' fullname='S. Turner'>
<organization /></author>
<author initials='T.' surname='Polk' fullname='T. Polk'>
<organization /></author>
<date year='2011' month='March' />
<abstract>
<t>This document requires that when Transport Layer Security (TLS) clients and servers establish connections, they never negotiate the use of Secure Sockets Layer (SSL) version 2.0.  This document updates the backward compatibility sections found in the Transport Layer Security (TLS). [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='6176' />
<format type='TXT' octets='7642' target='http://www.rfc-editor.org/rfc/rfc6176.txt' />
</reference>



<reference anchor='RFC6347'>

<front>
<title>Datagram Transport Layer Security Version 1.2</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'>
<organization /></author>
<author initials='N.' surname='Modadugu' fullname='N. Modadugu'>
<organization /></author>
<date year='2012' month='January' />
<abstract>
<t>This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol.  The DTLS protocol provides communications privacy for datagram protocols.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.  This document updates DTLS 1.0 to work with TLS version 1.2. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='6347' />
<format type='TXT' octets='73546' target='http://www.rfc-editor.org/rfc/rfc6347.txt' />
</reference>



<reference anchor='RFC7301'>

<front>
<title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
<author initials='S.' surname='Friedl' fullname='S. Friedl'>
<organization /></author>
<author initials='A.' surname='Popov' fullname='A. Popov'>
<organization /></author>
<author initials='A.' surname='Langley' fullname='A. Langley'>
<organization /></author>
<author initials='E.' surname='Stephan' fullname='E. Stephan'>
<organization /></author>
<date year='2014' month='July' />
<abstract>
<t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake.  For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t></abstract></front>

<seriesInfo name='RFC' value='7301' />
<format type='TXT' octets='17439' target='http://www.rfc-editor.org/rfc/rfc7301.txt' />
</reference>


<reference anchor="FIPS180-2" >
  <front>
    <title>NIST FIPS 180-2, Secure Hash Standard</title>
    <author initials="National Institute of Standards and Technology, U.S." surname="Department of Commerce" fullname="NIST">
      <organization></organization>
    </author>
    <date year="2002" month="August"/>
  </front>
</reference>
<reference anchor="POODLE" target="http://googleonlinesecurity.blogspot.com/2014/10/this-poodle-bites-exploiting-ssl-30.html">
  <front>
    <title>This POODLE bites: exploiting the SSL 3.0 fallback</title>
    <author initials="B." surname="Moeller" fullname="Bodo Moeller">
      <organization></organization>
    </author>
    <date year="2014" month="October" day="14"/>
  </front>
</reference>
<reference anchor="Ray09" >
  <front>
    <title>Authentication Gap in TLS Renegotiation</title>
    <author initials="M." surname="Ray" fullname="Marsh Ray">
      <organization></organization>
    </author>
    <date year="2009"/>
  </front>
</reference>
<reference anchor="TRIPLE-HS" >
  <front>
    <title>Triple Handshakes and Cookie Cutters: Breaking and Fixing Authentication over TLS</title>
    <author initials="K." surname="Bhargavan" fullname="Karthikeyan Bhargavan">
      <organization>INRIA</organization>
    </author>
    <author initials="A." surname="Delignat-Lavaud" fullname="Antoine Delignat-Lavaud">
      <organization>INRIA</organization>
    </author>
    <author initials="C." surname="Fournet" fullname="Cédric Fournet">
      <organization>Microsoft Research</organization>
    </author>
    <author initials="A." surname="Pironti" fullname="Alfredo Pironti">
      <organization>INRIA</organization>
    </author>
    <author initials="P-Y." surname="Strub" fullname="Pierre-Yves Strub">
      <organization>IMDEA</organization>
    </author>
    <date year="2014"/>
  </front>
  <seriesInfo name="IEEE" value="Symposium on Security and Privacy"/>
</reference>


    </references>



  </back>
</rfc>

