diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f367c9eb..102c6589 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,7 +29,7 @@ jobs: CMAKE_BUILD_PARALLEL_LEVEL: 4 steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Boost run: python3 tools/ci.py setup-boost --source-dir=$(pwd) @@ -106,7 +106,7 @@ jobs: OPENSSL_ROOT: "C:\\Program Files\\OpenSSL" steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup user-config.jam run: cp tools/user-config.jam "${HOMEDRIVE}${HOMEPATH}/" @@ -134,7 +134,6 @@ jobs: - toolset: gcc-11 install: g++-11 os: ubuntu-latest - container: ubuntu:22.04 cxxstd: '17' build-type: 'Debug' ldflags: '' @@ -142,7 +141,6 @@ jobs: - toolset: gcc-11 install: g++-11 os: ubuntu-latest - container: ubuntu:22.04 cxxstd: '20' build-type: 'Release' ldflags: '' @@ -150,7 +148,6 @@ jobs: - toolset: clang-11 install: clang-11 os: ubuntu-latest - container: ubuntu:22.04 cxxstd: '17' build-type: 'Debug' ldflags: '' @@ -158,7 +155,6 @@ jobs: - toolset: clang-11 install: clang-11 os: ubuntu-latest - container: ubuntu:22.04 cxxstd: '20' build-type: 'Debug' ldflags: '' @@ -166,7 +162,6 @@ jobs: - toolset: clang-13 install: clang-13 os: ubuntu-latest - container: ubuntu:22.04 cxxstd: '17' build-type: 'Release' ldflags: '' @@ -174,7 +169,6 @@ jobs: - toolset: clang-13 install: clang-13 os: ubuntu-latest - container: ubuntu:22.04 cxxstd: '20' build-type: 'Release' ldflags: '' @@ -182,7 +176,6 @@ jobs: - toolset: clang-14 install: 'clang-14 libc++-14-dev libc++abi-14-dev' os: ubuntu-latest - container: ubuntu:22.04 cxxstd: '17' build-type: 'Debug' cxxflags: '-stdlib=libc++' @@ -191,83 +184,83 @@ jobs: - toolset: clang-14 install: 'clang-14 libc++-14-dev libc++abi-14-dev' os: ubuntu-latest - container: ubuntu:22.04 cxxstd: '20' build-type: 'Release' cxxflags: '-stdlib=libc++' ldflags: '-lc++' runs-on: ${{ matrix.os }} - container: ${{matrix.container}} env: CXXFLAGS: ${{matrix.cxxflags}} -Wall -Wextra LDFLAGS: ${{matrix.ldflags}} CMAKE_BUILD_PARALLEL_LEVEL: 4 - BOOST_REDIS_TEST_SERVER: redis - - services: - redis: - image: redis - + steps: - name: Checkout - uses: actions/checkout@v3 - - - name: Setup container environment - if: matrix.container + uses: actions/checkout@v4 + + - name: Set up the required containers run: | - apt-get update - apt-get -y install sudo python3 git g++ libssl-dev protobuf-compiler redis-server - + docker compose -f tools/docker-compose.yml up -d --wait || (docker compose logs; exit 1) + - name: Install dependencies run: | - sudo apt-get update - sudo apt-get -y install cmake protobuf-compiler redis-server python3 ${{ matrix.install }} + docker exec builder apt-get update + docker exec builder apt-get -y --no-install-recommends install \ + git \ + g++ \ + libssl-dev \ + make \ + ca-certificates \ + cmake \ + protobuf-compiler \ + python3 \ + ${{ matrix.install }} - name: Setup Boost - run: ./tools/ci.py setup-boost --source-dir=$(pwd) + run: docker exec builder /boost-redis/tools/ci.py setup-boost --source-dir=/boost-redis - name: Build a Boost distribution using B2 run: | - ./tools/ci.py build-b2-distro \ + docker exec builder /boost-redis/tools/ci.py build-b2-distro \ --toolset ${{ matrix.toolset }} - name: Build a Boost distribution using CMake run: | - ./tools/ci.py build-cmake-distro \ + docker exec builder /boost-redis/tools/ci.py build-cmake-distro \ --build-type ${{ matrix.build-type }} \ --cxxstd ${{ matrix.cxxstd }} \ --toolset ${{ matrix.toolset }} - name: Build the project tests run: | - ./tools/ci.py build-cmake-standalone-tests \ + docker exec builder /boost-redis/tools/ci.py build-cmake-standalone-tests \ --build-type ${{ matrix.build-type }} \ --cxxstd ${{ matrix.cxxstd }} \ --toolset ${{ matrix.toolset }} - name: Run the project tests run: | - ./tools/ci.py run-cmake-standalone-tests \ + docker exec builder /boost-redis/tools/ci.py run-cmake-standalone-tests \ --build-type ${{ matrix.build-type }} - name: Run add_subdirectory tests run: | - ./tools/ci.py run-cmake-add-subdirectory-tests \ + docker exec builder /boost-redis/tools/ci.py run-cmake-add-subdirectory-tests \ --build-type ${{ matrix.build-type }} \ --cxxstd ${{ matrix.cxxstd }} \ --toolset ${{ matrix.toolset }} - name: Run find_package tests with the built cmake distribution run: | - ./tools/ci.py run-cmake-find-package-tests \ + docker exec builder /boost-redis/tools/ci.py run-cmake-find-package-tests \ --build-type ${{ matrix.build-type }} \ --cxxstd ${{ matrix.cxxstd }} \ --toolset ${{ matrix.toolset }} - name: Run find_package tests with the built b2 distribution run: | - ./tools/ci.py run-cmake-b2-find-package-tests \ + docker exec builder /boost-redis/tools/ci.py run-cmake-b2-find-package-tests \ --build-type ${{ matrix.build-type }} \ --cxxstd ${{ matrix.cxxstd }} \ --toolset ${{ matrix.toolset }} @@ -296,7 +289,7 @@ jobs: container: ${{matrix.container}} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup container environment if: matrix.container diff --git a/include/boost/redis/detail/connection_base.hpp b/include/boost/redis/detail/connection_base.hpp index 69ae68ca..487c759f 100644 --- a/include/boost/redis/detail/connection_base.hpp +++ b/include/boost/redis/detail/connection_base.hpp @@ -113,7 +113,7 @@ struct exec_op { asio::coroutine coro{}; template - void operator()(Self& self , system::error_code ec = {}, std::size_t = 0) + void operator()(Self& self , system::error_code = {}, std::size_t = 0) { BOOST_ASIO_CORO_REENTER (coro) { diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d5fc0793..049469f3 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -30,8 +30,7 @@ macro(make_test TEST_NAME STANDARD) endmacro() make_test(test_conn_quit 17) -# TODO: Configure a Redis server with TLS in the CI and reenable this test. -#make_test(test_conn_tls 17) +make_test(test_conn_tls 17) make_test(test_low_level 17) make_test(test_conn_exec_retry 17) make_test(test_conn_exec_error 17) diff --git a/test/common.cpp b/test/common.cpp index 23976c95..ba39b184 100644 --- a/test/common.cpp +++ b/test/common.cpp @@ -29,7 +29,7 @@ run( conn->async_run(cfg, {l}, run_callback{conn, op, ec}); } -std::string safe_getenv(const char* name, const char* default_value) +static std::string safe_getenv(const char* name, const char* default_value) { // MSVC doesn't like getenv #ifdef BOOST_MSVC @@ -43,10 +43,15 @@ std::string safe_getenv(const char* name, const char* default_value) return res ? res : default_value; } +std::string get_server_hostname() +{ + return safe_getenv("BOOST_REDIS_TEST_SERVER", "localhost"); +} + boost::redis::config make_test_config() { boost::redis::config cfg; - cfg.addr.host = safe_getenv("BOOST_REDIS_TEST_SERVER", "localhost"); + cfg.addr.host = get_server_hostname(); return cfg; } diff --git a/test/common.hpp b/test/common.hpp index 74dd08b7..a0e30d6a 100644 --- a/test/common.hpp +++ b/test/common.hpp @@ -16,6 +16,7 @@ auto start(boost::asio::awaitable op) -> int; #endif // BOOST_ASIO_HAS_CO_AWAIT boost::redis::config make_test_config(); +std::string get_server_hostname(); void run( diff --git a/test/test_conn_tls.cpp b/test/test_conn_tls.cpp index eb45dde3..befef457 100644 --- a/test/test_conn_tls.cpp +++ b/test/test_conn_tls.cpp @@ -4,10 +4,11 @@ * accompanying file LICENSE.txt) */ +#include +#include #include #define BOOST_TEST_MODULE conn-tls #include -#include #include "common.hpp" namespace net = boost::asio; @@ -16,24 +17,49 @@ using connection = boost::redis::connection; using boost::redis::request; using boost::redis::response; using boost::redis::config; -using boost::redis::operation; using boost::system::error_code; -bool verify_certificate(bool, net::ssl::verify_context&) -{ - std::cout << "set_verify_callback" << std::endl; - return true; -} - -config make_tls_config() +// CA certificate that signed the test server's certificate. +// This is a self-signed CA created for testing purposes. +// This must match tools/tls/ca.crt contents +static constexpr const char* ca_certificate = R"%(-----BEGIN CERTIFICATE----- +MIIFSzCCAzOgAwIBAgIUNd7VUuGK4+ylzCOrmeckg2+TqX8wDQYJKoZIhvcNAQEL +BQAwNTETMBEGA1UECgwKUmVkaXMgVGVzdDEeMBwGA1UEAwwVQ2VydGlmaWNhdGUg +QXV0aG9yaXR5MB4XDTI0MDMzMTE0MjUyM1oXDTM0MDMyOTE0MjUyM1owNTETMBEG +A1UECgwKUmVkaXMgVGVzdDEeMBwGA1UEAwwVQ2VydGlmaWNhdGUgQXV0aG9yaXR5 +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5AMV5V66wt+MM4+oCzH0 +xPi++j23p8AOa0o3dxNd4tm5y++gAdKfoxj7oh32ZuYHA5V+sGNEalN/b3GlKXMm +ThdVPSwqOQduny19wrb126ZeQXCfqwgSZQ+rgzaIYpw8/GRRuLDunmsdaR2eiptp +dbv6g6P/aIF6P9mfuekwCC9KBCV6ftqOEnzulNLVw4JjY0rKB9NZqONKVMfWpNyC +zJLCkGmza7BOpybhloZIxGJz033yCjDvIQr9GUWsA5rU9LdUiL+F1W0pWkIel1qo +Evo0EIl3+EOcSSzETI7NPHgnSzNau39ZShV4UBj2lw0DWeNcobeMBQ8ItmqEU6V0 +gCEqfUnt10bGIDdmV3D5FKPgvhFvEjQULnblLeLDQ6XDFf+xbGEVjvTzVkLjvyKm +H2D+SKw2O+eDU/0+xhpAf+QsWlm6pmvKWjXI5wK1rh2yssBK2pmY3LuuZCdGrvXb +KX4j/4S9qMr43Hmyoyz0gE5I5rplqot8TvT9O/JsgQYd9fYSvdB+HbqAlJzpBZFl +xbVBXxl0AlDFwQtNMX5ylEQPvYVDKA1M+DTqRTgQKctTfccwvovY3YMV7m5YoODZ +ya2YSBRfQim6VsC+QPYs7p2dk1larIoMMaTaU02oMY+qT2d/eyhWKBv5W9LuowTQ +bWa3ZhWN8lXriPgJOQnZ6iUCAwEAAaNTMFEwHQYDVR0OBBYEFCpEPlClLrgu1zFN +Fmas5G4ybNRJMB8GA1UdIwQYMBaAFCpEPlClLrgu1zFNFmas5G4ybNRJMA8GA1Ud +EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAFLl1NZHp0NT5Av4GKmsJFeI +cJOgcIygjR4SBGDAxyPqVpZk0x1q64gJsfOe1ARyI4olQPqO08FZMeB+VBYuqR3S +fEVQZz2FT5U7IVAEZwWHOcWkrrVpEZC6PZktYJ7Yqju6+ic93inoPrHhGNZ5XA/Y +GSfwriWkyWm2SOk35ChFH67MbPWmve8CRAXRmrOCByXwXF87wdqVYZUvH9xDe6WU +snFWXVHr2NA7Re8ZIGp7yJOwwW+CZagepNCPUDwnI0fWOahtOTzonIjq8bfgTZPx +2e7lBuAr9tVMpoeyUytVOlNJDojZAtKOpfMwhAG8ydhk+78aK07VVbnSYVhv7ctU +kkkldqP/S3lBlWo44oOxenwLc9vDQNh64py7eQTD7Qv+TjqAG0ljHIDbVqlkQsgR +pQsu7keG9O1xASSTLZVZN2/alNewpqE/eFRfPM3mtUiTiIZvSxiQnWQMbKofAZH5 +HwhVli4RKWRWPqpof4GFNkB8XwfBE+gdlFuWtyg0oRyV3sJ6Zn7E+lUpbQX4CFx3 +97vekaFNBchNYMcP3TZ9LwxTx1xOWZ5HHrHyzASG3uz2rqwAsEmdRbmK03KfEQyQ +YpNY718btZ1D6lLino9VMgzaPhUs79bHC64O4ncl7hRclK9qa3KLQdCG1cbIR7G0 +2XVYrfsnPHX0CsPDIy7L +-----END CERTIFICATE-----)%"; + +static config make_tls_config() { config cfg; cfg.use_ssl = true; - cfg.username = "aedis"; - cfg.password = "aedis"; - cfg.addr.host = "db.occase.de"; + cfg.addr.host = get_server_hostname(); cfg.addr.port = "6380"; - //cfg.health_check_interval = std::chrono::seconds{0}; return cfg; } @@ -49,11 +75,13 @@ BOOST_AUTO_TEST_CASE(ping_internal_ssl_context) net::io_context ioc; connection conn{ioc}; - conn.next_layer().set_verify_mode(net::ssl::verify_peer); - conn.next_layer().set_verify_callback(verify_certificate); - conn.async_exec(req, resp, [&](auto ec, auto) { - BOOST_TEST(!ec); + // The custom server uses a certificate signed by a CA + // that is not trusted by default - skip verification. + conn.next_layer().set_verify_mode(net::ssl::verify_none); + + conn.async_exec(req, resp, [&](error_code ec, auto) { + BOOST_TEST(ec == std::error_code()); conn.cancel(); }); @@ -76,12 +104,17 @@ BOOST_AUTO_TEST_CASE(ping_custom_ssl_context) net::io_context ioc; net::ssl::context ctx{boost::asio::ssl::context::tls_client}; + + // Configure the SSL context to trust the CA that signed the server's certificate. + // The test certificate uses "redis" as its common name, regardless of the actual server's hostname + ctx.add_certificate_authority(net::const_buffer(ca_certificate, std::strlen(ca_certificate))); + ctx.set_verify_mode(net::ssl::verify_peer); + ctx.set_verify_callback(net::ssl::host_name_verification("redis")); + connection conn{ioc, std::move(ctx)}; - conn.next_layer().set_verify_mode(net::ssl::verify_peer); - conn.next_layer().set_verify_callback(verify_certificate); conn.async_exec(req, resp, [&](auto ec, auto) { - BOOST_TEST(!ec); + BOOST_TEST(ec == std::error_code()); conn.cancel(); }); @@ -91,38 +124,3 @@ BOOST_AUTO_TEST_CASE(ping_custom_ssl_context) BOOST_CHECK_EQUAL(in, std::get<0>(resp).value()); } - -BOOST_AUTO_TEST_CASE(acl_does_not_allow_select) -{ - auto cfg = make_tls_config(); - cfg.database_index = 22; - cfg.reconnect_wait_interval = std::chrono::seconds::zero(); - - std::string const in = "Kabuf"; - - request req; - req.push("PING", in); - - response resp; - - net::io_context ioc; - connection conn{ioc}; - conn.next_layer().set_verify_mode(net::ssl::verify_peer); - conn.next_layer().set_verify_callback(verify_certificate); - - conn.async_exec(req, resp, [&](auto, auto) { - // TODO: We should not need this cancel here because - // reconnect was disabled. - conn.cancel(); - }); - - - error_code ec2; - conn.async_run(cfg, {}, [&](auto ec) { - ec2 = ec; - }); - - ioc.run(); - - BOOST_TEST(!!ec2); -} diff --git a/tools/docker-compose.yml b/tools/docker-compose.yml new file mode 100644 index 00000000..940fc3c5 --- /dev/null +++ b/tools/docker-compose.yml @@ -0,0 +1,24 @@ +services: + redis: + image: "redis:alpine" + command: [ + "redis-server", + "--tls-port", "6380", + "--tls-cert-file", "/tls/server.crt", + "--tls-key-file", "/tls/server-key.key", + "--tls-ca-cert-file", "/tls/ca.crt", + "--tls-auth-clients", "no", + ] + volumes: + - ./tls:/tls + ports: + - 6379:6379 + - 6380:6380 + builder: + image: ubuntu:22.04 + container_name: builder + tty: true + environment: + - BOOST_REDIS_TEST_SERVER=redis + volumes: + - ../:/boost-redis diff --git a/tools/tls/ca.crt b/tools/tls/ca.crt new file mode 100755 index 00000000..da02769d --- /dev/null +++ b/tools/tls/ca.crt @@ -0,0 +1,31 @@ +-----BEGIN CERTIFICATE----- +MIIFSzCCAzOgAwIBAgIUNd7VUuGK4+ylzCOrmeckg2+TqX8wDQYJKoZIhvcNAQEL +BQAwNTETMBEGA1UECgwKUmVkaXMgVGVzdDEeMBwGA1UEAwwVQ2VydGlmaWNhdGUg +QXV0aG9yaXR5MB4XDTI0MDMzMTE0MjUyM1oXDTM0MDMyOTE0MjUyM1owNTETMBEG +A1UECgwKUmVkaXMgVGVzdDEeMBwGA1UEAwwVQ2VydGlmaWNhdGUgQXV0aG9yaXR5 +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5AMV5V66wt+MM4+oCzH0 +xPi++j23p8AOa0o3dxNd4tm5y++gAdKfoxj7oh32ZuYHA5V+sGNEalN/b3GlKXMm +ThdVPSwqOQduny19wrb126ZeQXCfqwgSZQ+rgzaIYpw8/GRRuLDunmsdaR2eiptp +dbv6g6P/aIF6P9mfuekwCC9KBCV6ftqOEnzulNLVw4JjY0rKB9NZqONKVMfWpNyC +zJLCkGmza7BOpybhloZIxGJz033yCjDvIQr9GUWsA5rU9LdUiL+F1W0pWkIel1qo +Evo0EIl3+EOcSSzETI7NPHgnSzNau39ZShV4UBj2lw0DWeNcobeMBQ8ItmqEU6V0 +gCEqfUnt10bGIDdmV3D5FKPgvhFvEjQULnblLeLDQ6XDFf+xbGEVjvTzVkLjvyKm +H2D+SKw2O+eDU/0+xhpAf+QsWlm6pmvKWjXI5wK1rh2yssBK2pmY3LuuZCdGrvXb +KX4j/4S9qMr43Hmyoyz0gE5I5rplqot8TvT9O/JsgQYd9fYSvdB+HbqAlJzpBZFl +xbVBXxl0AlDFwQtNMX5ylEQPvYVDKA1M+DTqRTgQKctTfccwvovY3YMV7m5YoODZ +ya2YSBRfQim6VsC+QPYs7p2dk1larIoMMaTaU02oMY+qT2d/eyhWKBv5W9LuowTQ +bWa3ZhWN8lXriPgJOQnZ6iUCAwEAAaNTMFEwHQYDVR0OBBYEFCpEPlClLrgu1zFN +Fmas5G4ybNRJMB8GA1UdIwQYMBaAFCpEPlClLrgu1zFNFmas5G4ybNRJMA8GA1Ud +EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAFLl1NZHp0NT5Av4GKmsJFeI +cJOgcIygjR4SBGDAxyPqVpZk0x1q64gJsfOe1ARyI4olQPqO08FZMeB+VBYuqR3S +fEVQZz2FT5U7IVAEZwWHOcWkrrVpEZC6PZktYJ7Yqju6+ic93inoPrHhGNZ5XA/Y +GSfwriWkyWm2SOk35ChFH67MbPWmve8CRAXRmrOCByXwXF87wdqVYZUvH9xDe6WU +snFWXVHr2NA7Re8ZIGp7yJOwwW+CZagepNCPUDwnI0fWOahtOTzonIjq8bfgTZPx +2e7lBuAr9tVMpoeyUytVOlNJDojZAtKOpfMwhAG8ydhk+78aK07VVbnSYVhv7ctU +kkkldqP/S3lBlWo44oOxenwLc9vDQNh64py7eQTD7Qv+TjqAG0ljHIDbVqlkQsgR +pQsu7keG9O1xASSTLZVZN2/alNewpqE/eFRfPM3mtUiTiIZvSxiQnWQMbKofAZH5 +HwhVli4RKWRWPqpof4GFNkB8XwfBE+gdlFuWtyg0oRyV3sJ6Zn7E+lUpbQX4CFx3 +97vekaFNBchNYMcP3TZ9LwxTx1xOWZ5HHrHyzASG3uz2rqwAsEmdRbmK03KfEQyQ +YpNY718btZ1D6lLino9VMgzaPhUs79bHC64O4ncl7hRclK9qa3KLQdCG1cbIR7G0 +2XVYrfsnPHX0CsPDIy7L +-----END CERTIFICATE----- diff --git a/tools/tls/ca.key b/tools/tls/ca.key new file mode 100755 index 00000000..8c495c7d --- /dev/null +++ b/tools/tls/ca.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/tools/tls/server-key.key b/tools/tls/server-key.key new file mode 100755 index 00000000..56f99f96 --- /dev/null +++ b/tools/tls/server-key.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAxDwCrIWM9cqHpT/2MKnQ2DsdChUOkKkwsw8HA/eSrLm+LqGl +IFcj19j9PP68O5Nd1N4W1SFHz2HiaZarTtqCBo+laaXaxoAjOA7BiPP6Rce8t+gb +mJ4EvjwEn+vIg6eyM8fFRyoqUSIh5ybJ7Cq7Un0lUDqhbt7VrvBWZQcyh6z9F1Z1 +NXiexKdYH/ewpGrA2FeM9lv3zVUiJKO0mM2t86u/TPw9zsgc3sQAwd1I+dZv+jbA +qfjzrfNIk0htRKgMKTuIOwZlFW+WLhqx9dDfMrAD30vSv0jXyPa1tYo46hBIwefr +0PcLpw3HNwgrizDOShhS9V2pTtO9gVM+Xxwn/wIDAQABAoIBAA50zU2gWQ4SaYPG +/n//Qp9rW2xOuM/3ZtsKFF46cte+p0AQMHX9dWqFVcKUkZFh/ducsNnqpbulXmSg +8OXSOxn4oxrxWPien/mVPLS2JI3XdROnScEogvjwuvZ9DDyGsh4WbXYcqRlpBk5d +ESsQytP83C7Y4uOkDuHgWrz+lr5f4tbwxEvSI4AQ0ucksV/BNupwGaz0VTOqWTuN +cZSRILcDnkldFXprX//QFUxGYh3sLQpigja9v2ES72yEuS3VDaZvc/2CQL51vYn/ +wfnKSUPSiX1p/wtwJXwTUzFIKYsfi/b3TqWCt+ajqSY4hUqHn/xf+m27sTV2thbC +w3Hh8yECgYEA+4bvSk8uRFy1Yg+G36sSKp/tBAmrGE3vFfhePTC7XFsUQstQE9pP +1IZJY+SxKfj8snben6MtSjNu0ntte55Jnhq0M2UsmsEzR0rN43P1u8iJAUe1vp4t +vptJCUDDj+8WppzzyzbRESoFYfJ5o9JMu0h12Sx/U1bgnp75NhRi2y0CgYEAx7lb +wT6a/FSgkisvrOTY+bY9xsz7aqH+fz2FdZpoJlIofbofmwdNGU2oXdo4S71ITB4y +xLLOuyUhz2okBu+iwJbZEmX1CALe/GV1UYAlNcFVmggGQM44G0mh1chgR6qIbCOB +7yPwPkmERVqGtV+MxPR8ku7u73b/3sDLmVTUm1sCgYB46RR+lDGZizdmPDCJtKK2 ++snk9wDYXh5gYVRr9dEbRG0o7rM/1+IoN6Vv7696jcZrw9igxMAwuyi65bprglvB +NPUK/8fBXL5ZtwviGww1iODTTLWBPGihB+TEHe3kcvpgfXJ0bZVyutB7lSQELEPW +g66jB1DtrwWrOqBx7rrWwQKBgQCMqdqanoovfzbb23inb0H1lUmrE0FbV55TZTPy +oP4LRz/nVMffuuOtF4mmGAQgK76YhYhCCqEZI0zNtTaMgAgDVfqqP460xrjf0GEx +Nmx+kJzGcDJfQB458cD+PTK6JrwQVW20zH3ukH6NDfXkFdih+oMmRQuZMhmBfA2o +/xsCEwKBgQDTbsTzHrBSvQtxEB8QYFnEBeRcvNHrtvVrWGJnYPbmvAAxJgzC83tr +u8ST6sPUTe7rpdxQUzwxThkkbovsPqC+40wwclOMltZSyVwNlREYUl8iQUZKX0ZM +0sdNP0Z/UMCDa08yz18qbMtehQrIS2o6lwzIgM/NS2IlkmN7Hbx5Mw== +-----END RSA PRIVATE KEY----- diff --git a/tools/tls/server.crt b/tools/tls/server.crt new file mode 100755 index 00000000..ffc4a821 --- /dev/null +++ b/tools/tls/server.crt @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIID3DCCAcQCFENgZw0c9P89NpIf0+jFhIYpQzi3MA0GCSqGSIb3DQEBCwUAMDUx +EzARBgNVBAoMClJlZGlzIFRlc3QxHjAcBgNVBAMMFUNlcnRpZmljYXRlIEF1dGhv +cml0eTAeFw0yNDAzMzExNDI1MzlaFw0yNDA0MzAxNDI1MzlaMCAxDjAMBgNVBAoM +BXJlZGlzMQ4wDAYDVQQDDAVyZWRpczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAMQ8AqyFjPXKh6U/9jCp0Ng7HQoVDpCpMLMPBwP3kqy5vi6hpSBXI9fY +/Tz+vDuTXdTeFtUhR89h4mmWq07aggaPpWml2saAIzgOwYjz+kXHvLfoG5ieBL48 +BJ/ryIOnsjPHxUcqKlEiIecmyewqu1J9JVA6oW7e1a7wVmUHMoes/RdWdTV4nsSn +WB/3sKRqwNhXjPZb981VIiSjtJjNrfOrv0z8Pc7IHN7EAMHdSPnWb/o2wKn4863z +SJNIbUSoDCk7iDsGZRVvli4asfXQ3zKwA99L0r9I18j2tbWKOOoQSMHn69D3C6cN +xzcIK4swzkoYUvVdqU7TvYFTPl8cJ/8CAwEAATANBgkqhkiG9w0BAQsFAAOCAgEA +le50e2bw+Vc0kN9PUs13p/2JAEy1LlS1ehyBx+O1kFnkQRk6YMNOFDcrL9+65pWq +La1Me+OozgUuBErhbI7eElFwb5CJ1Jzm2UGmV7+9AcC0eU4qdY0tR/gOpPtaKVly ++Sqq44P2lZSBssjr1KLuk/pEGd4Q//G8EB31TumLRTL+fbzSqQ+m/5mukMdCSUpd +lxeCzr1n0p9/29eZ2+qX7moQUvZ9nsHwtKyxMsuDSJTiHysC5TfGWrbstpFULM7M +bqKZiA+WLtDCvh8xa49+AeDbbZSQahEVm09I9ww3XBFCQNTfgmnscMvscpgR5xqj +A3AceHjhO7T8oAdNF8UoHprIpLl7tw/RZwqYeLq1IabwUN+t+Patt4HZIRgWeiKc +IlzPICI8n3OhHBRTl0GhPL6G85Z56WhI6wxbTm9HmVRYK1RFbPpIxQ7Mi+BQG5wC +oXwAAQeDyF0au9zByTU6bjYqXMGgaBRVzSh1VaQ675yqT3+CJFAMPqkGdTmgwOBy +Ge7T697+gMR37/xPqY7TnDucJ2x33dVmIVkwpNapZjM+TThFYihV0Dl9wxCr/Kuz +MTIXvzC6bEEu24FsAWttt9vPV+yrIpidLZ0AKo6zYO6azU2Uui9whDps6Rzi1g6f +WVot3B9KCQTPtc80ayJiQQEnR1n13wlfInaD8cxqoic= +-----END CERTIFICATE-----