PeerOptions.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
3  *
4  * Squid software is distributed under GPLv2+ license and includes
5  * contributions from numerous individuals and organizations.
6  * Please see the COPYING and CONTRIBUTORS files for details.
7  */
8 
9 #ifndef SQUID_SRC_SECURITY_PEEROPTIONS_H
10 #define SQUID_SRC_SECURITY_PEEROPTIONS_H
11 
12 #include "base/YesNoNone.h"
13 #include "ConfigParser.h"
14 #include "security/Context.h"
15 #include "security/forward.h"
16 #include "security/KeyData.h"
17 #include "security/Session.h"
18 
19 class Packable;
20 
21 namespace Security
22 {
23 
26 {
27 public:
28  PeerOptions();
29  PeerOptions(const PeerOptions &) = default;
30  PeerOptions &operator =(const PeerOptions &) = default;
31  PeerOptions(PeerOptions &&) = default;
32  PeerOptions &operator =(PeerOptions &&) = default;
33  virtual ~PeerOptions() {}
34 
36  virtual void parse(const char *);
37 
39  void parseOptions();
40 
42  virtual void clear() {*this = PeerOptions();}
43 
46 
49 
52 
55 
58 
61 
64 
67 
70 
72  virtual void dumpCfg(std::ostream &, const char *pfx) const;
73 
74 private:
76  void loadCrlFile();
77  void loadKeysFile();
78 
79 public:
83 
87 
89 
90 private:
94 
98 
100  bool optsReparse = true;
101 
102 public:
104 
105  std::list<Security::KeyData> certs;
106  std::list<SBuf> caFiles;
108 
109 protected:
110  template<typename T>
112 #if USE_OPENSSL
113  debugs(83, 5, "SSL_CTX construct, this=" << (void*)ctx);
114  return ContextPointer(ctx, [](SSL_CTX *p) {
115  debugs(83, 5, "SSL_CTX destruct, this=" << (void*)p);
116  SSL_CTX_free(p);
117  });
118 #elif HAVE_LIBGNUTLS
119  debugs(83, 5, "gnutls_certificate_credentials construct, this=" << (void*)ctx);
120  return Security::ContextPointer(ctx, [](gnutls_certificate_credentials_t p) {
121  debugs(83, 5, "gnutls_certificate_credentials destruct, this=" << (void*)p);
122  gnutls_certificate_free_credentials(p);
123  });
124 #else
125  assert(!ctx);
126  return Security::ContextPointer();
127 #endif
128  }
129 
130  int sslVersion = 0;
131 
133  struct flags_ {
134  flags_() : tlsDefaultCa(true), tlsNpn(true) {}
135  flags_(const flags_ &) = default;
136  flags_ &operator =(const flags_ &) = default;
137 
140 
142  bool tlsNpn;
143  } flags;
144 
145 public:
147  bool encryptTransport = false;
148 };
149 
150 // XXX: Remove this shim after upgrading legacy code to store PeerContext
151 // objects instead of disjoint PeerOptons and Context objects (where PeerContext
152 // is a class that creates and manages {PeerOptions, ContextPointer} pair).
155 {
156 public:
158 
161 };
162 
165 
166 } // namespace Security
167 
168 // parse the tls_outgoing_options directive
170 #define free_securePeerOptions(x) Security::ProxyOutgoingConfig.clear()
171 #define dump_securePeerOptions(e,n,x) do { PackableStream os_(*(e)); os_ << n; (x).dumpCfg(os_,""); os_ << '\n'; } while (false)
172 
173 #endif /* SQUID_SRC_SECURITY_PEEROPTIONS_H */
174 
void updateContextOptions(Security::ContextPointer &)
Setup the library specific 'options=' parameters for the given context.
Definition: PeerOptions.cc:634
SBuf tlsMinVersion
version label for minimum TLS version to permit
Definition: PeerOptions.h:88
virtual ~PeerOptions()
Definition: PeerOptions.h:33
virtual Security::ContextPointer createBlankContext() const
generate an unset security context object
Definition: PeerOptions.cc:241
std::shared_ptr< SSL_CTX > ContextPointer
Definition: Context.h:29
Security::ContextPointer createClientContext(bool setOptions)
generate a security client-context from these configured options
Definition: PeerOptions.cc:271
PeerOptions & options
TLS context configuration.
Definition: PeerOptions.h:159
SBuf crlFile
path of file containing Certificate Revoke List
Definition: PeerOptions.h:82
struct Security::PeerOptions::flags_ flags
Definition: SBuf.h:93
uint64_t ParsedOptions
Definition: forward.h:194
FuturePeerContext(PeerOptions &o, const ContextPointer &c)
Definition: PeerOptions.h:157
PeerOptions & operator=(const PeerOptions &)=default
const ContextPointer & raw
TLS context configured using options.
Definition: PeerOptions.h:160
A combination of PeerOptions and the corresponding Context.
Definition: PeerOptions.h:154
SBuf sslFlags
flags defining what TLS operations Squid performs
Definition: PeerOptions.h:85
PeerOptions ProxyOutgoingConfig
configuration options for DIRECT server access
Definition: PeerOptions.cc:24
void updateTlsVersionLimits()
sync the context options with tls-min-version=N configuration
Definition: PeerOptions.cc:153
SBuf caDir
path of directory containing a set of trusted Certificate Authorities
Definition: PeerOptions.h:81
bool tlsNpn
whether to use the TLS NPN extension on these connections
Definition: PeerOptions.h:142
std::list< Security::KeyData > certs
details from the cert= and file= config parameters
Definition: PeerOptions.h:105
std::list< SBuf > caFiles
paths of files containing trusted Certificate Authority
Definition: PeerOptions.h:106
void parse_securePeerOptions(Security::PeerOptions *)
Definition: PeerOptions.cc:805
void parseOptions()
parse and verify the [tls-]options= string in sslOptions
Definition: PeerOptions.cc:442
TLS squid.conf settings for a remote server peer.
Definition: PeerOptions.h:25
long ParsedPortFlags
Definition: forward.h:204
void updateContextCrl(Security::ContextPointer &)
setup the CRL details for the given context
Definition: PeerOptions.cc:727
#define assert(EX)
Definition: assert.h:17
Security::CertRevokeList parsedCrl
CRL to use when verifying the remote end certificate.
Definition: PeerOptions.h:107
virtual void dumpCfg(std::ostream &, const char *pfx) const
output squid.conf syntax with 'pfx' prefix on parameters for the stored settings
Definition: PeerOptions.cc:105
flags governing Squid internal TLS operations
Definition: PeerOptions.h:133
void updateContextNpn(Security::ContextPointer &)
setup the NPN extension details for the given context
Definition: PeerOptions.cc:659
YesNoNone tlsDefaultCa
whether to use the system default Trusted CA when verifying the remote end certificate
Definition: PeerOptions.h:139
flags_ & operator=(const flags_ &)=default
Security::ContextPointer convertContextFromRawPtr(T ctx) const
Definition: PeerOptions.h:111
std::shared_ptr< SSL > SessionPointer
Definition: Session.h:53
void updateContextCa(Security::ContextPointer &)
setup the CA details for the given context
Definition: PeerOptions.cc:691
virtual void clear()
reset the configuration details to default
Definition: PeerOptions.h:42
std::list< Security::CrlPointer > CertRevokeList
Definition: forward.h:107
void updateSessionOptions(Security::SessionPointer &)
setup any library-specific options that can be set for the given session
Definition: PeerOptions.cc:774
SBuf sslOptions
library-specific options string
Definition: PeerOptions.h:80
ParsedPortFlags parsedFlags
parsed value of sslFlags
Definition: PeerOptions.h:103
Security::ParsedOptions parsedOptions
Definition: PeerOptions.h:97
void updateContextTrust(Security::ContextPointer &)
decide which CAs to trust
Definition: PeerOptions.cc:754
bool encryptTransport
whether transport encryption (TLS/SSL) is to be used on connections to the peer
Definition: PeerOptions.h:147
bool optsReparse
whether parsedOptions content needs to be regenerated
Definition: PeerOptions.h:100
Network/connection security abstraction layer.
Definition: Connection.h:33
#define debugs(SECTION, LEVEL, CONTENT)
Definition: Stream.h:192
ParsedPortFlags parseFlags()
Definition: PeerOptions.cc:549
virtual void parse(const char *)
parse a TLS squid.conf option
Definition: PeerOptions.cc:33

 

Introduction

Documentation

Support

Miscellaneous