Skip to content

Commit 34c2a2e

Browse files
committed
Disable SSLv3 Support by Default
If users do not provide their own options in the construction of the HTTP Client with SSL support, we explicitly turn off SSLv3 support. Fixes cpp-netlib#570
1 parent fb210e7 commit 34c2a2e

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

boost/network/protocol/http/client/connection/ssl_delegate.ipp

+16-13
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,15 @@
77
// (See accompanying file LICENSE_1_0.txt or copy at
88
// http://www.boost.org/LICENSE_1_0.txt)
99

10-
#include <boost/network/protocol/http/client/connection/ssl_delegate.hpp>
1110
#include <boost/asio/ssl.hpp>
1211
#include <boost/bind.hpp>
12+
#include <boost/network/protocol/http/client/connection/ssl_delegate.hpp>
1313

1414
boost::network::http::impl::ssl_delegate::ssl_delegate(
1515
asio::io_service &service, bool always_verify_peer,
1616
optional<std::string> certificate_filename,
17-
optional<std::string> verify_path,
18-
optional<std::string> certificate_file,
19-
optional<std::string> private_key_file,
20-
optional<std::string> ciphers,
17+
optional<std::string> verify_path, optional<std::string> certificate_file,
18+
optional<std::string> private_key_file, optional<std::string> ciphers,
2119
long ssl_options)
2220
: service_(service),
2321
certificate_filename_(std::move(certificate_filename)),
@@ -29,15 +27,19 @@ boost::network::http::impl::ssl_delegate::ssl_delegate(
2927
always_verify_peer_(always_verify_peer) {}
3028

3129
void boost::network::http::impl::ssl_delegate::connect(
32-
asio::ip::tcp::endpoint &endpoint, std::string host, boost::uint16_t source_port,
30+
asio::ip::tcp::endpoint &endpoint, std::string host,
31+
boost::uint16_t source_port,
3332
function<void(system::error_code const &)> handler) {
3433
context_.reset(
35-
new asio::ssl::context(service_, asio::ssl::context::sslv23_client));
34+
new asio::ssl::context(asio::ssl::context::method::sslv23_client));
3635
if (ciphers_) {
3736
::SSL_CTX_set_cipher_list(context_->native_handle(), ciphers_->c_str());
3837
}
3938
if (ssl_options_ != 0) {
4039
context_->set_options(ssl_options_);
40+
} else {
41+
// By default, disable v3 support.
42+
context_->set_options(asio::ssl::context::no_sslv3);
4143
}
4244
if (certificate_filename_ || verify_path_) {
4345
context_->set_verify_mode(asio::ssl::context::verify_peer);
@@ -50,8 +52,9 @@ void boost::network::http::impl::ssl_delegate::connect(
5052
// use openssl default verify paths. uses openssl environment variables
5153
// SSL_CERT_DIR, SSL_CERT_FILE
5254
context_->set_default_verify_paths();
53-
} else
55+
} else {
5456
context_->set_verify_mode(asio::ssl::context::verify_none);
57+
}
5558
}
5659
if (certificate_file_)
5760
context_->use_certificate_file(*certificate_file_,
@@ -60,9 +63,10 @@ void boost::network::http::impl::ssl_delegate::connect(
6063
context_->use_private_key_file(*private_key_file_,
6164
boost::asio::ssl::context::pem);
6265

63-
tcp_socket_.reset(new asio::ip::tcp::socket(service_, asio::ip::tcp::endpoint(asio::ip::tcp::v4(), source_port)));
64-
socket_.reset(
65-
new asio::ssl::stream<asio::ip::tcp::socket&>(*(tcp_socket_.get()), *context_));
66+
tcp_socket_.reset(new asio::ip::tcp::socket(
67+
service_, asio::ip::tcp::endpoint(asio::ip::tcp::v4(), source_port)));
68+
socket_.reset(new asio::ssl::stream<asio::ip::tcp::socket &>(
69+
*(tcp_socket_.get()), *context_));
6670

6771
if (always_verify_peer_)
6872
socket_->set_verify_callback(boost::asio::ssl::rfc2818_verification(host));
@@ -109,5 +113,4 @@ void boost::network::http::impl::ssl_delegate::disconnect() {
109113

110114
boost::network::http::impl::ssl_delegate::~ssl_delegate() {}
111115

112-
#endif /* BOOST_NETWORK_PROTOCOL_HTTP_CLIENT_CONNECTION_SSL_DELEGATE_IPP_20110819 \
113-
*/
116+
#endif // BOOST_NETWORK_PROTOCOL_HTTP_CLIENT_CONNECTION_SSL_DELEGATE_IPP_20110819

0 commit comments

Comments
 (0)