• M
    Server side version negotiation rewrite · 32ec4153
    Matt Caswell 提交于
    This commit changes the way that we do server side protocol version
    negotiation. Previously we had a whole set of code that had an "up front"
    state machine dedicated to the negotiating the protocol version. This adds
    significant complexity to the state machine. Historically the justification
    for doing this was the support of SSLv2 which works quite differently to
    SSLv3+. However, we have now removed support for SSLv2 so there is little
    reason to maintain this complexity.
    
    The one slight difficulty is that, although we no longer support SSLv2, we
    do still support an SSLv3+ ClientHello in an SSLv2 backward compatible
    ClientHello format. This is generally only used by legacy clients. This
    commit adds support within the SSLv3 code for these legacy format
    ClientHellos.
    
    Server side version negotiation now works in much the same was as DTLS,
    i.e. we introduce the concept of TLS_ANY_VERSION. If s->version is set to
    that then when a ClientHello is received it will work out the most
    appropriate version to respond with. Also, SSLv23_method and
    SSLv23_server_method have been replaced with TLS_method and
    TLS_server_method respectively. The old SSLv23* names still exist as
    macros pointing at the new name, although they are deprecated.
    
    Subsequent commits will look at client side version negotiation, as well of
    removal of the old s23* code.
    Reviewed-by: NKurt Roeckx <kurt@openssl.org>
    32ec4153
ssl_locl.h 87.6 KB