rfc:improved-tls-defaults
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:improved-tls-defaults [2014/02/16 17:31] – Renamed constants, general rewording/cleanup rdlowrey | rfc:improved-tls-defaults [2017/09/22 13:28] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Improved TLS Defaults ====== | ====== Improved TLS Defaults ====== | ||
- | * Version: 0.10 | + | * Version: 0.11 |
* Date: 2014-01-28 | * Date: 2014-01-28 | ||
* Author: Daniel Lowrey, rdlowrey@php.net | * Author: Daniel Lowrey, rdlowrey@php.net | ||
- | * Status: | + | * Status: |
* First Published at: http:// | * First Published at: http:// | ||
- | * Minor Revision (v0.1 → v0.2): 2014-01-28 | ||
- | * Major Revision (v0.2 → v0.3): 2014-01-29 | ||
- | * Minor Revision (v0.3 → v0.4): 2014-01-30 | ||
- | * Minor Revision (v0.4 → v0.5): 2014-01-30 | ||
- | * Major Revision (v0.5 → v0.6): 2014-02-01 | ||
- | * Minor Revision (v0.6 → v0.7): 2014-02-02 | ||
- | * Minor Revision (v0.7 → v0.8): 2014-02-03 | ||
- | * Minor Revision (v0.8 → v0.9): 2014-02-06 | ||
- | * Minor Revision (v0.9 → v0.10): 2014-02-11 | ||
===== Introduction ===== | ===== Introduction ===== | ||
Line 45: | Line 36: | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
- | * [[https:// | + | * [[https:// |
* [[https:// | * [[https:// | ||
- | * [[https:// | + | * [[https:// |
===== Default Ciphers ===== | ===== Default Ciphers ===== | ||
Line 75: | Line 66: | ||
'' | '' | ||
- | * Anonymous Diffie-Hellman ciphers disallowed as per [[http://www.ietf.org/rfc/rfc2246.txt|RFC2246 Section A.5]] | + | * Anonymous Diffie-Hellman ciphers disallowed as per [[http://tools.ietf.org/html/rfc2246#appendix-A.5|RFC2246 Section A.5]] |
'' | '' | ||
Line 193: | Line 184: | ||
Users may wish to access information regarding the negotiated protocol and/or cipher for a given | Users may wish to access information regarding the negotiated protocol and/or cipher for a given | ||
encrypted session. The '' | encrypted session. The '' | ||
- | conflicts with other wrappers | + | conflicts with other wrappers. The context option approach also remains consistent with the existing |
- | also remains consistent with the existing '' | + | '' |
- | context abstractions. When the new context option is truthy the '' | + | context option is truthy the '' |
- | option is populated with an informational array as shown here: | + | informational array as shown here: |
**Example** | **Example** | ||
Line 390: | Line 381: | ||
* Internally re-value the existing '' | * Internally re-value the existing '' | ||
- | * Remove the new stream wrappers previously merged for inclusion in 5.6: | + | * New '' |
- | * '' | + | * Repurpose |
- | * '' | + | |
- | * Deprecate the following stream wrappers in PHP 5.6 with removal | + | |
- | * '' | + | |
- | * '' | + | |
- | + | ||
- | **Logic** | + | |
- | + | ||
- | The main reason for reshuffling the stream wrappers is simplicity. Most users are unlikely to know | + | |
- | the difference between the various protocols much less which they should use. It's not difficult to | + | |
- | imagine a scenario in which a user reasons, //"If SSL is safe, SSLv2 and SSLv3 must be REALLY safe. | + | |
- | I should use those."// | + | |
- | despite its standing as the most secure option. | + | |
- | + | ||
- | So the overarching goal in this change is two-fold: | + | |
- | + | ||
- | * Keep users safe by default without preventing them from doing insecure things if they need to do so; | + | |
- | * Eliminate the confusion of having many different wrappers for encrypted streams. By deprecating the superfluous stream wrappers we // | + | |
- | + | ||
- | Note again that the protocol-specific stream wrappers //are not// removed. Their use will trigger an | + | |
- | '' | + | |
- | + | ||
- | Note also that the '' | + | |
- | and TLSv1.2 protocols. Because '' | + | |
- | this wrapper was previously | + | |
- | + | ||
- | **BC Implications of Proposed Stream Wrapper Changes** | + | |
- | + | ||
- | //None.// | + | |
- | + | ||
- | The only implications for existing code are the '' | + | |
- | '' | + | |
- | notices. This notice triggering has nothing to do with the underlying protocols; it only occurs when | + | |
- | using the wrappers made unnecessary by the introduction of protocol flags. Users are encouraged to | + | |
- | specify protocol flags in their stream contexts to avoid these deprecation notices. | + | |
**Existing Constant Re-Valuing** | **Existing Constant Re-Valuing** | ||
Line 537: | Line 494: | ||
]]); | ]]); | ||
$sock = stream_socket_client(' | $sock = stream_socket_client(' | ||
- | |||
- | ?> | ||
- | </ | ||
- | |||
- | There is no need to use the deprecated wrappers as the '' | ||
- | the best available protocol. However, for the sake of completeness, | ||
- | works: | ||
- | |||
- | <code php> | ||
- | <?php | ||
- | |||
- | $sock = stream_socket_client(' | ||
?> | ?> | ||
Line 639: | Line 584: | ||
===== Removed Features Originally Planned for 5.6 ===== | ===== Removed Features Originally Planned for 5.6 ===== | ||
- | The following stream | + | Originally this RFC proposed the deprecation and future remove of the protocol-specific |
- | + | This recommendation was removed to retain the ability | |
- | | + | to interface with protocol-specific clients and servers. In particular, the '' |
- | - tlsv1.2 | + | cannot accept a stream context. As a result, removing protocol-specific stream |
- | + | '' | |
- | These wrappers | + | hello methods. |
- | direction chosen in this proposal obviates the need for these wrappers which have never | + | |
- | been part of an official release. Their removal has no BC implications. | + | |
===== Backward Incompatible Changes ===== | ===== Backward Incompatible Changes ===== | ||
Most existing code is expected to work without any BC implications. The only source of potential breakage | Most existing code is expected to work without any BC implications. The only source of potential breakage | ||
- | involves the scenario where users connect to servers employing outdated/ | + | involves the scenario where users connect to servers employing |
- | For these users the option always exists to manually override secure defaults with insecure settings | + | technologies. For these users the option always exists to manually override secure defaults with |
- | in the stream context. | + | insecure settings in the stream context. |
===== Proposed PHP Version ===== | ===== Proposed PHP Version ===== | ||
Line 687: | Line 630: | ||
* Should PHP implement the recommendations in this proposal as part of 5.6? | * Should PHP implement the recommendations in this proposal as part of 5.6? | ||
- | ===== Patches and Tests ===== | + | https:// |
- | + | ||
- | The proposed changes and tests are available here: | + | |
- | + | ||
- | https:// | + | |
- | + | ||
- | ===== Implementation ===== | + | |
- | + | ||
- | TBD | + | |
===== Vote ===== | ===== Vote ===== | ||
Line 705: | Line 640: | ||
of the RFC. They are noted here to avoid confusion. | of the RFC. They are noted here to avoid confusion. | ||
- | <doodle title=" | + | <doodle title=" |
* Yes | * Yes | ||
* No | * No | ||
Line 712: | Line 647: | ||
Thanks for your time :) | Thanks for your time :) | ||
- | ===== Rejected Features ===== | ||
- | TBD | ||
+ | == Revisions == | ||
+ | v0.11 Updated constant names, protocol-specific stream wrappers no longer deprecated | ||
- | == Revisions == | + | v0.10 Removed default verify depth setting; tls wrapper no longer deprecated |
- | + | ||
- | v0.10 Removed default verify depth setting; tls:// wrapper no longer deprecated | + | |
v0.9 Added server forward secrecy, updated default cipher list | v0.9 Added server forward secrecy, updated default cipher list |
rfc/improved-tls-defaults.1392571861.txt.gz · Last modified: 2017/09/22 13:28 (external edit)