OpenVPN 3 Core Library
Loading...
Searching...
No Matches
test_ssl.cpp
Go to the documentation of this file.
1// OpenVPN -- An application to securely tunnel IP networks
2// over a single port, with support for SSL/TLS-based
3// session authentication and key exchange,
4// packet encryption, packet authentication, and
5// packet compression.
6//
7// Copyright (C) 2012- OpenVPN Inc.
8//
9// SPDX-License-Identifier: MPL-2.0 OR AGPL-3.0-only WITH openvpn3-openssl-exception
10//
11
12
13#include "test_common.hpp"
14
15
16using namespace openvpn;
17
20
21TEST(ssl, sslciphersuites)
22{
23 SSLFactoryAPI::Ptr sslfact;
24 SSLLib::SSLAPI::Config::Ptr sslcfg(new SSLLib::SSLAPI::Config);
25 sslcfg->set_local_cert_enabled(false);
26 sslcfg->set_flags(SSLConst::NO_VERIFY_PEER);
27
28 sslcfg->set_tls_ciphersuite_list("TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_CCM_SHA256");
29
30 sslfact = sslcfg->new_factory();
31
32
33 sslcfg->set_tls_ciphersuite_list("TLS_CHACHA2000");
34#if defined(USE_MBEDTLS)
35 /* Ignored on non TLS 1.3 implementations */
36 sslfact = sslcfg->new_factory();
37#else
38 /* This is invalid and should throw an exception */
39 EXPECT_THROW(sslcfg->new_factory(), SSLFactoryAPI::ssl_context_error);
40#endif
41}
42
43TEST(ssl, sslciphers)
44{
46
47 bool previousLogOutput = testLog->isStdoutEnabled();
48 testLog->setPrintOutput(false);
49 SSLFactoryAPI::Ptr sslfact;
50 SSLLib::SSLAPI::Config::Ptr sslcfg(new SSLLib::SSLAPI::Config);
51 sslcfg->set_local_cert_enabled(false);
52 sslcfg->set_flags(SSLConst::NO_VERIFY_PEER);
53 sslcfg->set_rng(rng);
54
55 /* This list mixes IANA and OpenSSL ciphers to see if ciphers are translated for mbed TLS and for OpenSSL */
56 sslcfg->set_tls_cipher_list("TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256:AES256-SHA");
57
58 sslfact = sslcfg->new_factory();
59 sslfact->ssl();
60
61 testLog->setPrintOutput(previousLogOutput);
62}
63
64TEST(ssl, tls_groups)
65{
67
68 SSLFactoryAPI::Ptr sslfact;
69
70 SSLLib::SSLAPI::Config::Ptr sslcfg(new SSLLib::SSLAPI::Config);
71 sslcfg->set_local_cert_enabled(false);
72 sslcfg->set_flags(SSLConst::NO_VERIFY_PEER);
73 sslcfg->set_rng(rng);
74 sslcfg->set_debug_level(1);
75
76 sslcfg->set_tls_groups("secp521r1:secp384r1");
77
78 /* Should not throw an error */
79 auto f = sslcfg->new_factory();
80 f->ssl();
81
82 sslcfg->set_tls_groups("secp521r1:secp384r1:greenhell");
83
85 f = sslcfg->new_factory();
86 f->set_log_level(logging::LOG_LEVEL_INFO);
87 f->ssl();
88#ifdef USE_OPENSSL
89 EXPECT_EQ("OpenSSL -- warning ignoring unknown group 'greenhell' in tls-groups\n", testLog->stopCollecting());
90#else
91 EXPECT_EQ("mbed TLS -- warning ignoring unknown group 'greenhell' in tls-groups\n", testLog->stopCollecting());
92#endif
93}
94
95#if defined(USE_OPENSSL)
96TEST(ssl, translate_ciphers_openssl)
97{
98 bool previousLogOutput = testLog->isStdoutEnabled();
99 testLog->setPrintOutput(false);
100 EXPECT_EQ("ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:AES256-SHA",
101 OpenSSLContext::translate_cipher_list("TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256:AES256-SHA"));
102 EXPECT_EQ("DEFAULT", OpenSSLContext::translate_cipher_list("DEFAULT"));
103 EXPECT_EQ("NONSENSE:AES256-SHA", OpenSSLContext::translate_cipher_list("NONSENSE:AES256-SHA"));
104
105 testLog->setPrintOutput(previousLogOutput);
106}
107#endif
108
109#if defined(USE_OPENSSL) && OPENSSL_VERSION_NUMBER >= 0x30000000L
110TEST(ssl, enablelegacyProvider)
111{
113
114 SSLLib::SSLAPI::Config::Ptr sslcfg(new SSLLib::SSLAPI::Config);
115 sslcfg->set_local_cert_enabled(false);
116 sslcfg->set_flags(SSLConst::NO_VERIFY_PEER);
117 sslcfg->set_rng(rng);
118
119 auto f_nolegacy = sslcfg->new_factory();
120
121 EXPECT_EQ(SSLLib::CryptoAPI::CipherContext::is_supported(f_nolegacy->libctx(), openvpn::CryptoAlgs::BF_CBC), false);
122
123 SSLLib::SSLAPI::Config::Ptr sslcfg_legacy(new SSLLib::SSLAPI::Config);
124 sslcfg_legacy->set_local_cert_enabled(false);
125 sslcfg_legacy->set_flags(SSLConst::NO_VERIFY_PEER);
126 sslcfg_legacy->set_rng(rng);
127 sslcfg_legacy->enable_legacy_algorithms(true);
128
129 /* Should not throw an error */
130 auto f_legacy = sslcfg_legacy->new_factory();
131
132 EXPECT_EQ(SSLLib::CryptoAPI::CipherContext::is_supported(f_legacy->libctx(), openvpn::CryptoAlgs::BF_CBC), true);
133}
134#endif
void setPrintOutput(bool doOutput)
static std::string translate_cipher_list(std::string cipherlist)
Definition sslctx.hpp:1184
virtual SSLAPI::Ptr ssl()=0
openvpn::LogOutputCollector * testLog
constexpr int LOG_LEVEL_INFO
Definition logger.hpp:20
auto f(const Thing1 t)
TEST(ssl, sslciphersuites)
Definition test_ssl.cpp:21