| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/socket/ssl_server_socket_openssl.h" | 5 #include "net/socket/ssl_server_socket_openssl.h" |
| 6 | 6 |
| 7 #include <openssl/err.h> | 7 #include <openssl/err.h> |
| 8 #include <openssl/ssl.h> | 8 #include <openssl/ssl.h> |
| 9 | 9 |
| 10 #include "base/callback_helpers.h" | 10 #include "base/callback_helpers.h" |
| (...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 647 return ERR_UNEXPECTED; | 647 return ERR_UNEXPECTED; |
| 648 } | 648 } |
| 649 #endif // USE_OPENSSL_CERTS | 649 #endif // USE_OPENSSL_CERTS |
| 650 | 650 |
| 651 DCHECK(key_->key()); | 651 DCHECK(key_->key()); |
| 652 if (SSL_use_PrivateKey(ssl_, key_->key()) != 1) { | 652 if (SSL_use_PrivateKey(ssl_, key_->key()) != 1) { |
| 653 LOG(ERROR) << "Cannot set private key."; | 653 LOG(ERROR) << "Cannot set private key."; |
| 654 return ERR_UNEXPECTED; | 654 return ERR_UNEXPECTED; |
| 655 } | 655 } |
| 656 | 656 |
| 657 DCHECK_LT(SSL3_VERSION, ssl_config_.version_min); |
| 658 DCHECK_LT(SSL3_VERSION, ssl_config_.version_max); |
| 659 SSL_set_min_version(ssl_, ssl_config_.version_min); |
| 660 SSL_set_max_version(ssl_, ssl_config_.version_max); |
| 661 |
| 657 // OpenSSL defaults some options to on, others to off. To avoid ambiguity, | 662 // OpenSSL defaults some options to on, others to off. To avoid ambiguity, |
| 658 // set everything we care about to an absolute value. | 663 // set everything we care about to an absolute value. |
| 659 SslSetClearMask options; | 664 SslSetClearMask options; |
| 660 options.ConfigureFlag(SSL_OP_NO_SSLv2, true); | |
| 661 bool ssl3_enabled = (ssl_config_.version_min == SSL_PROTOCOL_VERSION_SSL3); | |
| 662 options.ConfigureFlag(SSL_OP_NO_SSLv3, !ssl3_enabled); | |
| 663 bool tls1_enabled = (ssl_config_.version_min <= SSL_PROTOCOL_VERSION_TLS1 && | |
| 664 ssl_config_.version_max >= SSL_PROTOCOL_VERSION_TLS1); | |
| 665 options.ConfigureFlag(SSL_OP_NO_TLSv1, !tls1_enabled); | |
| 666 bool tls1_1_enabled = | |
| 667 (ssl_config_.version_min <= SSL_PROTOCOL_VERSION_TLS1_1 && | |
| 668 ssl_config_.version_max >= SSL_PROTOCOL_VERSION_TLS1_1); | |
| 669 options.ConfigureFlag(SSL_OP_NO_TLSv1_1, !tls1_1_enabled); | |
| 670 bool tls1_2_enabled = | |
| 671 (ssl_config_.version_min <= SSL_PROTOCOL_VERSION_TLS1_2 && | |
| 672 ssl_config_.version_max >= SSL_PROTOCOL_VERSION_TLS1_2); | |
| 673 options.ConfigureFlag(SSL_OP_NO_TLSv1_2, !tls1_2_enabled); | |
| 674 | |
| 675 options.ConfigureFlag(SSL_OP_NO_COMPRESSION, true); | 665 options.ConfigureFlag(SSL_OP_NO_COMPRESSION, true); |
| 676 | 666 |
| 677 SSL_set_options(ssl_, options.set_mask); | 667 SSL_set_options(ssl_, options.set_mask); |
| 678 SSL_clear_options(ssl_, options.clear_mask); | 668 SSL_clear_options(ssl_, options.clear_mask); |
| 679 | 669 |
| 680 // Same as above, this time for the SSL mode. | 670 // Same as above, this time for the SSL mode. |
| 681 SslSetClearMask mode; | 671 SslSetClearMask mode; |
| 682 | 672 |
| 683 mode.ConfigureFlag(SSL_MODE_RELEASE_BUFFERS, true); | 673 mode.ConfigureFlag(SSL_MODE_RELEASE_BUFFERS, true); |
| 684 | 674 |
| 685 SSL_set_mode(ssl_, mode.set_mask); | 675 SSL_set_mode(ssl_, mode.set_mask); |
| 686 SSL_clear_mode(ssl_, mode.clear_mask); | 676 SSL_clear_mode(ssl_, mode.clear_mask); |
| 687 | 677 |
| 688 return OK; | 678 return OK; |
| 689 } | 679 } |
| 690 | 680 |
| 691 } // namespace net | 681 } // namespace net |
| OLD | NEW |