1. 25 2月, 2017 1 次提交
  2. 24 2月, 2017 3 次提交
    • B
      Add SSL_CTX early callback · 6b1bb98f
      Benjamin Kaduk 提交于
      Provide a callback interface that gives the application the ability
      to adjust the nascent SSL object at the earliest stage of ClientHello
      processing, immediately after extensions have been collected but
      before they have been processed.
      
      This is akin to BoringSSL's "select_certificate_cb" (though it is not
      API compatible), and as the name indicates, one major use is to examine
      the supplied server name indication and select what certificate to
      present to the client.  However, it can also be used to make more
      sweeping configuration changes to the SSL object according to the
      selected server identity and configuration.  That may include adjusting
      the permitted TLS versions, swapping out the SSL_CTX object (as is
      traditionally done in a tlsext_servername_callback), changing the
      server's cipher list, and more.
      
      We also wish to allow an early callback to indicate that it needs to perform
      additional work asynchronously and resume processing later.  To that effect,
      refactor the second half of tls_process_client_hello() into a subroutine to be
      called at the post-processing stage (including the early callback itself), to
      allow the callback to result in remaining in the same work stage for a later
      call to succeed.  This requires allocating for and storing the CLIENTHELLO_MSG
      in the SSL object to be preserved across such calls, but the storage is
      reclaimed after ClientHello processing finishes.
      
      Information about the CliehtHello is available to the callback by means of
      accessor functions that can only be used from the early callback.  This allows
      extensions to make use of the existing internal parsing machinery without
      exposing structure internals (e.g., of PACKET), so that applications do not
      have to write fragile parsing code.
      
      Applications are encouraged to utilize an early callback and not use
      a servername_callback, in order to avoid unexpected behavior that
      occurs due to the relative order of processing between things like
      session resumption and the historical servername callback.
      
      Also tidy up nearby style by removing unnecessary braces around one-line
      conditional bodies.
      Reviewed-by: NMatt Caswell <matt@openssl.org>
      Reviewed-by: NRichard Levitte <levitte@openssl.org>
      (Merged from https://github.com/openssl/openssl/pull/2279)
      6b1bb98f
    • B
      Refactor SSL_bytes_to_cipher_list() · 90134d98
      Benjamin Kaduk 提交于
      Split off the portions that mutate the SSL object into a separate
      function that the state machine calls, so that the public API can
      be a pure function.  (It still needs the SSL parameter in order
      to determine what SSL_METHOD's get_cipher_by_char() routine to use,
      though.)
      
      Instead of returning the stack of ciphers (functionality that was
      not used internally), require using the output parameter, and add
      a separate output parameter for the SCSVs contained in the supplied
      octets, if desired.  This lets us move to the standard return value
      convention.  Also make both output stacks optional parameters.
      Reviewed-by: NMatt Caswell <matt@openssl.org>
      Reviewed-by: NRichard Levitte <levitte@openssl.org>
      (Merged from https://github.com/openssl/openssl/pull/2279)
      90134d98
    • B
      Export SSL_bytes_to_cipher_list() · ccb8e6e0
      Benjamin Kaduk 提交于
      Move ssl_bytes_to_cipher_list() to ssl_lib.c and create a public
      wrapper around it.  This lets application early callbacks easily get
      SSL_CIPHER objects from the raw ciphers bytes without having to
      reimplement the parsing code.  In particular, they do not need to
      know the details of the sslv2 format ClientHello's ciphersuite
      specifications.
      
      Document the new public function, including the arguably buggy behavior
      of modifying the supplied SSL object.  On the face of it, such a function
      should be able to be pure, just a direct translation of wire octets to
      internal data structures.
      Reviewed-by: NMatt Caswell <matt@openssl.org>
      Reviewed-by: NRichard Levitte <levitte@openssl.org>
      (Merged from https://github.com/openssl/openssl/pull/2279)
      ccb8e6e0
  3. 22 2月, 2017 3 次提交
  4. 21 2月, 2017 2 次提交
  5. 17 2月, 2017 2 次提交
  6. 15 2月, 2017 1 次提交
  7. 13 2月, 2017 1 次提交
  8. 09 2月, 2017 1 次提交
  9. 08 2月, 2017 3 次提交
  10. 06 2月, 2017 2 次提交
  11. 03 2月, 2017 1 次提交
  12. 02 2月, 2017 1 次提交
  13. 30 1月, 2017 1 次提交
  14. 26 1月, 2017 1 次提交
  15. 25 1月, 2017 2 次提交
  16. 24 1月, 2017 2 次提交
  17. 21 1月, 2017 1 次提交
  18. 20 1月, 2017 1 次提交
  19. 18 1月, 2017 3 次提交
  20. 17 1月, 2017 1 次提交
  21. 14 1月, 2017 1 次提交
  22. 13 1月, 2017 3 次提交
  23. 12 1月, 2017 3 次提交