Use secure TLS/SSL versions:

TLS1.2 can be used instead, it is available in all currently
supported versions of OpenSSL.

Signed-off-by: Damian Jarek <damian.jarek93@gmail.com>
This commit is contained in:
Damian Jarek
2019-03-14 17:40:41 +01:00
committed by Vinnie Falco
parent 0033b7c1e4
commit 8869ec5681
23 changed files with 62 additions and 61 deletions

View File

@@ -1,6 +1,7 @@
Version 233: Version 233:
* Check __ANDROID__ instead * Check __ANDROID__ instead
* Use secure TLS/SSL versions
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

View File

@@ -971,7 +971,7 @@ int main(int argc, char* argv[])
net::io_context ioc{threads}; net::io_context ioc{threads};
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx{ssl::context::sslv23}; ssl::context ctx{ssl::context::tlsv12};
// This holds the self-signed certificate used by the server // This holds the self-signed certificate used by the server
load_server_certificate(ctx); load_server_certificate(ctx);

View File

@@ -150,7 +150,7 @@ public:
if(ec) if(ec)
return fail(ec, "write"); return fail(ec, "write");
// Receive the HTTP response // Receive the HTTP response
http::async_read(stream_, buffer_, res_, http::async_read(stream_, buffer_, res_,
beast::bind_front_handler( beast::bind_front_handler(
@@ -220,11 +220,11 @@ int main(int argc, char** argv)
net::io_context ioc; net::io_context ioc;
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx{ssl::context::sslv23_client}; ssl::context ctx{ssl::context::tlsv12_client};
// This holds the root certificate used for verification // This holds the root certificate used for verification
load_root_certificates(ctx); load_root_certificates(ctx);
// Verify the remote server's certificate // Verify the remote server's certificate
ctx.set_verify_mode(ssl::verify_peer); ctx.set_verify_mode(ssl::verify_peer);

View File

@@ -153,11 +153,11 @@ int main(int argc, char** argv)
net::io_context ioc; net::io_context ioc;
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx{ssl::context::sslv23_client}; ssl::context ctx{ssl::context::tlsv12_client};
// This holds the root certificate used for verification // This holds the root certificate used for verification
load_root_certificates(ctx); load_root_certificates(ctx);
// Verify the remote server's certificate // Verify the remote server's certificate
ctx.set_verify_mode(ssl::verify_peer); ctx.set_verify_mode(ssl::verify_peer);

View File

@@ -57,7 +57,7 @@ int main(int argc, char** argv)
net::io_context ioc; net::io_context ioc;
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx(ssl::context::sslv23_client); ssl::context ctx(ssl::context::tlsv12_client);
// This holds the root certificate used for verification // This holds the root certificate used for verification
load_root_certificates(ctx); load_root_certificates(ctx);

View File

@@ -521,7 +521,7 @@ int main(int argc, char* argv[])
net::io_context ioc{threads}; net::io_context ioc{threads};
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx{ssl::context::sslv23}; ssl::context ctx{ssl::context::tlsv12};
// This holds the self-signed certificate used by the server // This holds the self-signed certificate used by the server
load_server_certificate(ctx); load_server_certificate(ctx);

View File

@@ -402,7 +402,7 @@ int main(int argc, char* argv[])
net::io_context ioc{threads}; net::io_context ioc{threads};
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx{ssl::context::sslv23}; ssl::context ctx{ssl::context::tlsv12};
// This holds the self-signed certificate used by the server // This holds the self-signed certificate used by the server
load_server_certificate(ctx); load_server_certificate(ctx);

View File

@@ -671,7 +671,7 @@ int main(int argc, char* argv[])
net::io_context ioc{threads}; net::io_context ioc{threads};
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx{ssl::context::sslv23}; ssl::context ctx{ssl::context::tlsv12};
// This holds the self-signed certificate used by the server // This holds the self-signed certificate used by the server
load_server_certificate(ctx); load_server_certificate(ctx);

View File

@@ -308,7 +308,7 @@ public:
} }
#include <boost/asio/yield.hpp> #include <boost/asio/yield.hpp>
void void
loop( loop(
beast::error_code ec, beast::error_code ec,
@@ -465,7 +465,7 @@ public:
private: private:
#include <boost/asio/yield.hpp> #include <boost/asio/yield.hpp>
void void
loop(beast::error_code ec = {}) loop(beast::error_code ec = {})
{ {
@@ -523,7 +523,7 @@ int main(int argc, char* argv[])
net::io_context ioc{threads}; net::io_context ioc{threads};
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx{ssl::context::sslv23}; ssl::context ctx{ssl::context::tlsv12};
// This holds the self-signed certificate used by the server // This holds the self-signed certificate used by the server
load_server_certificate(ctx); load_server_certificate(ctx);

View File

@@ -325,7 +325,7 @@ int main(int argc, char* argv[])
net::io_context ioc{1}; net::io_context ioc{1};
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx{ssl::context::sslv23}; ssl::context ctx{ssl::context::tlsv12};
// This holds the self-signed certificate used by the server // This holds the self-signed certificate used by the server
load_server_certificate(ctx); load_server_certificate(ctx);

View File

@@ -153,7 +153,7 @@ public:
{ {
if(ec) if(ec)
return fail(ec, "handshake"); return fail(ec, "handshake");
// Send the message // Send the message
ws_.async_write( ws_.async_write(
net::buffer(text_), net::buffer(text_),
@@ -171,7 +171,7 @@ public:
if(ec) if(ec)
return fail(ec, "write"); return fail(ec, "write");
// Read a message into our buffer // Read a message into our buffer
ws_.async_read( ws_.async_read(
buffer_, buffer_,
@@ -231,7 +231,7 @@ int main(int argc, char** argv)
net::io_context ioc; net::io_context ioc;
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx{ssl::context::sslv23_client}; ssl::context ctx{ssl::context::tlsv12_client};
// This holds the root certificate used for verification // This holds the root certificate used for verification
load_root_certificates(ctx); load_root_certificates(ctx);

View File

@@ -147,7 +147,7 @@ int main(int argc, char** argv)
net::io_context ioc; net::io_context ioc;
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx{ssl::context::sslv23_client}; ssl::context ctx{ssl::context::tlsv12_client};
// This holds the root certificate used for verification // This holds the root certificate used for verification
load_root_certificates(ctx); load_root_certificates(ctx);

View File

@@ -55,7 +55,7 @@ int main(int argc, char** argv)
net::io_context ioc; net::io_context ioc;
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx{ssl::context::sslv23_client}; ssl::context ctx{ssl::context::tlsv12_client};
// This holds the root certificate used for verification // This holds the root certificate used for verification
load_root_certificates(ctx); load_root_certificates(ctx);

View File

@@ -277,9 +277,9 @@ int main(int argc, char* argv[])
// The io_context is required for all I/O // The io_context is required for all I/O
net::io_context ioc{threads}; net::io_context ioc{threads};
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx{ssl::context::sslv23}; ssl::context ctx{ssl::context::tlsv12};
// This holds the self-signed certificate used by the server // This holds the self-signed certificate used by the server
load_server_certificate(ctx); load_server_certificate(ctx);

View File

@@ -177,7 +177,7 @@ int main(int argc, char* argv[])
net::io_context ioc{threads}; net::io_context ioc{threads};
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx{ssl::context::sslv23}; ssl::context ctx{ssl::context::tlsv12};
// This holds the self-signed certificate used by the server // This holds the self-signed certificate used by the server
load_server_certificate(ctx); load_server_certificate(ctx);

View File

@@ -69,7 +69,7 @@ public:
} }
#include <boost/asio/yield.hpp> #include <boost/asio/yield.hpp>
void void
loop( loop(
beast::error_code ec, beast::error_code ec,
@@ -228,7 +228,7 @@ public:
private: private:
#include <boost/asio/yield.hpp> #include <boost/asio/yield.hpp>
void void
loop(beast::error_code ec = {}) loop(beast::error_code ec = {})
{ {
@@ -280,9 +280,9 @@ int main(int argc, char* argv[])
// The io_context is required for all I/O // The io_context is required for all I/O
net::io_context ioc{threads}; net::io_context ioc{threads};
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx{ssl::context::sslv23}; ssl::context ctx{ssl::context::tlsv12};
// This holds the self-signed certificate used by the server // This holds the self-signed certificate used by the server
load_server_certificate(ctx); load_server_certificate(ctx);

View File

@@ -107,7 +107,7 @@ int main(int argc, char* argv[])
net::io_context ioc{1}; net::io_context ioc{1};
// The SSL context is required, and holds certificates // The SSL context is required, and holds certificates
ssl::context ctx{ssl::context::sslv23}; ssl::context ctx{ssl::context::tlsv12};
// This holds the self-signed certificate used by the server // This holds the self-signed certificate used by the server
load_server_certificate(ctx); load_server_certificate(ctx);

View File

@@ -19,7 +19,7 @@
// VFALCO We include this because anyone who uses ssl will // VFALCO We include this because anyone who uses ssl will
// very likely need to check for ssl::error::stream_truncated // very likely need to check for ssl::error::stream_truncated
#include <boost/asio/ssl/error.hpp> #include <boost/asio/ssl/error.hpp>
#include <boost/asio/ssl/stream.hpp> #include <boost/asio/ssl/stream.hpp>
#include <cstddef> #include <cstddef>
@@ -34,28 +34,28 @@ namespace beast {
The stream class template provides asynchronous and blocking The stream class template provides asynchronous and blocking
stream-oriented functionality using SSL. stream-oriented functionality using SSL.
@par Thread Safety @par Thread Safety
@e Distinct @e objects: Safe.@n @e Distinct @e objects: Safe.@n
@e Shared @e objects: Unsafe. The application must also ensure that all @e Shared @e objects: Unsafe. The application must also ensure that all
asynchronous operations are performed within the same implicit or explicit asynchronous operations are performed within the same implicit or explicit
strand. strand.
@par Example @par Example
To use this template with a @ref tcp_stream, you would write: To use this template with a @ref tcp_stream, you would write:
@code @code
net::io_context ioc; net::io_context ioc;
net::ssl::context ctx{net::ssl::context::sslv23}; net::ssl::context ctx{net::ssl::context::tlsv12};
beast::ssl_stream<beast::tcp_stream> sock{ioc, ctx}; beast::ssl_stream<beast::tcp_stream> sock{ioc, ctx};
@endcode @endcode
In addition to providing an interface identical to `net::ssl::stream`, In addition to providing an interface identical to `net::ssl::stream`,
the wrapper has the following additional properties: the wrapper has the following additional properties:
@li Satisfies @b MoveConstructible @li Satisfies @b MoveConstructible
@li Satisfies @b MoveAssignable @li Satisfies @b MoveAssignable
@li Constructible from a moved socket. @li Constructible from a moved socket.
@li Uses @ref flat_stream internally, as a performance work-around for a @li Uses @ref flat_stream internally, as a performance work-around for a
@@ -128,16 +128,16 @@ public:
This function may be used to obtain the underlying implementation of the This function may be used to obtain the underlying implementation of the
context. This is intended to allow access to context functionality that is context. This is intended to allow access to context functionality that is
not otherwise provided. not otherwise provided.
@par Example @par Example
The native_handle() function returns a pointer of type @c SSL* that is The native_handle() function returns a pointer of type @c SSL* that is
suitable for passing to functions such as @c SSL_get_verify_result and suitable for passing to functions such as @c SSL_get_verify_result and
@c SSL_get_peer_certificate: @c SSL_get_peer_certificate:
@code @code
boost::beast::ssl_stream<net::ip::tcp::socket> ss{ioc, ctx}; boost::beast::ssl_stream<net::ip::tcp::socket> ss{ioc, ctx};
// ... establish connection and perform handshake ... // ... establish connection and perform handshake ...
if (X509* cert = SSL_get_peer_certificate(ss.native_handle())) if (X509* cert = SSL_get_peer_certificate(ss.native_handle()))
{ {
if (SSL_get_verify_result(ss.native_handle()) == X509_V_OK) if (SSL_get_verify_result(ss.native_handle()) == X509_V_OK)
@@ -191,11 +191,11 @@ public:
This function may be used to configure the peer verification mode used by This function may be used to configure the peer verification mode used by
the stream. The new mode will override the mode inherited from the context. the stream. The new mode will override the mode inherited from the context.
@param v A bitmask of peer verification modes. @param v A bitmask of peer verification modes.
@throws boost::system::system_error Thrown on failure. @throws boost::system::system_error Thrown on failure.
@note Calls @c SSL_set_verify. @note Calls @c SSL_set_verify.
*/ */
void void
@@ -208,12 +208,12 @@ public:
This function may be used to configure the peer verification mode used by This function may be used to configure the peer verification mode used by
the stream. The new mode will override the mode inherited from the context. the stream. The new mode will override the mode inherited from the context.
@param v A bitmask of peer verification modes. See `verify_mode` for @param v A bitmask of peer verification modes. See `verify_mode` for
available values. available values.
@param ec Set to indicate what error occurred, if any. @param ec Set to indicate what error occurred, if any.
@note Calls @c SSL_set_verify. @note Calls @c SSL_set_verify.
*/ */
void void
@@ -227,12 +227,12 @@ public:
This function may be used to configure the maximum verification depth This function may be used to configure the maximum verification depth
allowed by the stream. allowed by the stream.
@param depth Maximum depth for the certificate chain verification that @param depth Maximum depth for the certificate chain verification that
shall be allowed. shall be allowed.
@throws boost::system::system_error Thrown on failure. @throws boost::system::system_error Thrown on failure.
@note Calls @c SSL_set_verify_depth. @note Calls @c SSL_set_verify_depth.
*/ */
void void
@@ -245,12 +245,12 @@ public:
This function may be used to configure the maximum verification depth This function may be used to configure the maximum verification depth
allowed by the stream. allowed by the stream.
@param depth Maximum depth for the certificate chain verification that @param depth Maximum depth for the certificate chain verification that
shall be allowed. shall be allowed.
@param ec Set to indicate what error occurred, if any. @param ec Set to indicate what error occurred, if any.
@note Calls @c SSL_set_verify_depth. @note Calls @c SSL_set_verify_depth.
*/ */
void void
@@ -264,7 +264,7 @@ public:
This function is used to specify a callback function that will be called This function is used to specify a callback function that will be called
by the implementation when it needs to verify a peer certificate. by the implementation when it needs to verify a peer certificate.
@param callback The function object to be used for verifying a certificate. @param callback The function object to be used for verifying a certificate.
The function signature of the handler must be: The function signature of the handler must be:
@code bool verify_callback( @code bool verify_callback(
@@ -273,9 +273,9 @@ public:
); @endcode ); @endcode
The return value of the callback is true if the certificate has passed The return value of the callback is true if the certificate has passed
verification, false otherwise. verification, false otherwise.
@throws boost::system::system_error Thrown on failure. @throws boost::system::system_error Thrown on failure.
@note Calls @c SSL_set_verify. @note Calls @c SSL_set_verify.
*/ */
template<class VerifyCallback> template<class VerifyCallback>
@@ -289,7 +289,7 @@ public:
This function is used to specify a callback function that will be called This function is used to specify a callback function that will be called
by the implementation when it needs to verify a peer certificate. by the implementation when it needs to verify a peer certificate.
@param callback The function object to be used for verifying a certificate. @param callback The function object to be used for verifying a certificate.
The function signature of the handler must be: The function signature of the handler must be:
@code bool verify_callback( @code bool verify_callback(
@@ -298,9 +298,9 @@ public:
); @endcode ); @endcode
The return value of the callback is true if the certificate has passed The return value of the callback is true if the certificate has passed
verification, false otherwise. verification, false otherwise.
@param ec Set to indicate what error occurred, if any. @param ec Set to indicate what error occurred, if any.
@note Calls @c SSL_set_verify. @note Calls @c SSL_set_verify.
*/ */
template<class VerifyCallback> template<class VerifyCallback>

View File

@@ -255,7 +255,7 @@ net::ip::tcp::socket sock{ios};
{ {
//[wss_snippet_2 //[wss_snippet_2
net::ssl::context ctx{net::ssl::context::sslv23}; net::ssl::context ctx{net::ssl::context::tlsv12};
stream<net::ssl::stream<net::ip::tcp::socket>> wss{ios, ctx}; stream<net::ssl::stream<net::ip::tcp::socket>> wss{ios, ctx};
//] //]
} }
@@ -263,7 +263,7 @@ net::ip::tcp::socket sock{ios};
{ {
//[wss_snippet_3 //[wss_snippet_3
net::ip::tcp::endpoint ep; net::ip::tcp::endpoint ep;
net::ssl::context ctx{net::ssl::context::sslv23}; net::ssl::context ctx{net::ssl::context::tlsv12};
stream<net::ssl::stream<net::ip::tcp::socket>> ws{ios, ctx}; stream<net::ssl::stream<net::ip::tcp::socket>> ws{ios, ctx};
// connect the underlying TCP/IP socket // connect the underlying TCP/IP socket

View File

@@ -31,7 +31,7 @@ public:
testTeardown() testTeardown()
{ {
net::io_context ioc; net::io_context ioc;
net::ssl::context ctx(net::ssl::context::sslv23); net::ssl::context ctx(net::ssl::context::tlsv12);
Socket ss(ioc, ctx); Socket ss(ioc, ctx);
struct handler struct handler

View File

@@ -299,7 +299,7 @@ https_get (std::string const& host, std::string const& target, error_code& ec)
// This context is used to hold client and server certificates. // This context is used to hold client and server certificates.
// We do not perform certificate verification in this example. // We do not perform certificate verification in this example.
net::ssl::context ctx(net::ssl::context::sslv23); net::ssl::context ctx(net::ssl::context::tlsv12);
// This string will hold the body of the HTTP response, if any. // This string will hold the body of the HTTP response, if any.
std::string result; std::string result;

View File

@@ -22,5 +22,5 @@ std::thread t{[&](){ ioc.run(); }};
tcp::socket sock(ioc); tcp::socket sock(ioc);
ssl::context ctx(ssl::context::sslv23); ssl::context ctx(ssl::context::tlsv12);

View File

@@ -16,6 +16,6 @@ using namespace boost::beast::websocket;
net::io_context ioc; net::io_context ioc;
tcp_stream sock(ioc); tcp_stream sock(ioc);
net::ssl::context ctx(net::ssl::context::sslv23); net::ssl::context ctx(net::ssl::context::tlsv12);
//] //]