Skip to content

Commit 28cabc0

Browse files
committed
http: Add parameter for server name on Secure_server
1 parent 9c6cfa5 commit 28cabc0

4 files changed

Lines changed: 29 additions & 39 deletions

File tree

api/net/http/secure_server.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@ class Secure_server : public http::Server
2929
{
3030
public:
3131
Secure_server(
32+
const std::string& name,
3233
fs::Dirent& ca_key,
3334
fs::Dirent& ca_cert,
3435
fs::Dirent& server_key,
3536
TCP& tcp,
3637
Request_handler cb);
3738

3839
Secure_server(
40+
const std::string& name,
3941
fs::Dirent& ca_key,
4042
fs::Dirent& ca_cert,
4143
fs::Dirent& server_key,
@@ -48,6 +50,7 @@ class Secure_server : public http::Server
4850
Request_handler cb)
4951
: http::Server(tcp, cb), rng(in_rng), credman(in_credman)
5052
{
53+
assert(credman != nullptr);
5154
on_connect = {this, &Secure_server::secure_connect};
5255
}
5356

api/net/tls/credman.hpp

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
#include <botan/rng.h>
2525
#include <botan/x509cert.h>
2626
#include <botan/x509_ca.h>
27-
//#include <botan/x509path.h>
2827
#include <botan/x509self.h>
2928
#include <memory>
3029

@@ -59,24 +58,22 @@ class Credman : public Botan::Credentials_Manager
5958

6059
std::vector<Botan::X509_Certificate> cert_chain(
6160
const std::vector<std::string>& cert_key_types,
62-
const std::string& type,
61+
const std::string&,
6362
const std::string&) override
6463
{
6564
std::vector<Botan::X509_Certificate> chain;
6665

67-
if (type == "tls-server" || (type == "tls-client" && m_provides_client_certs))
66+
bool have_match = false;
67+
for (size_t i = 0; i != cert_key_types.size(); ++i)
68+
if(cert_key_types[i] == m_server_key->algo_name())
69+
have_match = true;
70+
71+
if(have_match)
6872
{
69-
bool have_match = false;
70-
for (size_t i = 0; i != cert_key_types.size(); ++i)
71-
if(cert_key_types[i] == m_server_key->algo_name())
72-
have_match = true;
73-
74-
if(have_match)
75-
{
76-
chain.push_back(m_server_cert);
77-
chain.push_back(m_ca_cert);
78-
}
73+
chain.push_back(m_server_cert);
74+
chain.push_back(m_ca_cert);
7975
}
76+
8077
return chain;
8178
}
8279

@@ -87,17 +84,8 @@ class Credman : public Botan::Credentials_Manager
8784
return m_server_key.get();
8885
}
8986

90-
Botan::SymmetricKey psk(const std::string&,
91-
const std::string&,
92-
const std::string&) override
93-
{
94-
//if (type == "tls-server" && context == "session-ticket")
95-
// return Botan::SymmetricKey("AABBCCDDEEFF012345678012345678");
96-
97-
return Botan::SymmetricKey("20B602D1475F2DF888FCB60D2AE03AFD"); // PSK key
98-
}
99-
10087
static Credman* create(
88+
const std::string& name,
10189
Botan::RandomNumberGenerator& rng,
10290
std::unique_ptr<Botan::Private_Key> ca_key,
10391
Botan::X509_Certificate ca_cert,
@@ -118,6 +106,7 @@ class Credman : public Botan::Credentials_Manager
118106
*
119107
**/
120108
inline Credman* Credman::create(
109+
const std::string& server_name,
121110
Botan::RandomNumberGenerator& rng,
122111
std::unique_ptr<Botan::Private_Key> ca_key,
123112
Botan::X509_Certificate ca_cert,
@@ -132,7 +121,7 @@ inline Credman* Credman::create(
132121

133122
// create certificate request
134123
Botan::X509_Cert_Options server_opts;
135-
server_opts.common_name = "server.example.com";
124+
server_opts.common_name = server_name;
136125
server_opts.country = "VT";
137126

138127
auto req = Botan::X509::create_cert_req(server_opts, *server_key, "SHA-256", rng);

api/net/tls/server.hpp

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,13 @@ class Server : public Botan::TLS::Callbacks, public tcp::Stream
3535
public:
3636
using Connection_ptr = tcp::Connection_ptr;
3737

38-
3938
Server(Connection_ptr remote,
40-
Botan::RandomNumberGenerator& rng,
41-
Botan::Credentials_Manager& credman) :
42-
tcp::Stream({remote}),
43-
m_rng(rng),
39+
Botan::RandomNumberGenerator& rng,
40+
Botan::Credentials_Manager& credman)
41+
: tcp::Stream({remote}),
4442
m_creds(credman),
45-
m_session_manager(m_rng),
46-
m_tls(*this, m_session_manager, m_creds, m_policy, m_rng)
43+
m_session_manager(rng),
44+
m_tls(*this, m_session_manager, m_creds, m_policy, rng)
4745
{
4846
assert(tcp->is_connected());
4947
// default read callback
@@ -95,15 +93,10 @@ class Server : public Botan::TLS::Callbacks, public tcp::Stream
9593

9694
protected:
9795
void tls_read(buffer_t buf, const size_t n)
98-
{
99-
this->tls_receive(buf.get(), n);
100-
}
101-
102-
void tls_receive(const uint8_t* buf, const size_t n)
10396
{
10497
try
10598
{
106-
int rem = m_tls.received_data(buf, n);
99+
int rem = m_tls.received_data(buf.get(), n);
107100
(void) rem;
108101
//printf("Finished processing (rem: %u)\n", rem);
109102
}
@@ -162,7 +155,6 @@ class Server : public Botan::TLS::Callbacks, public tcp::Stream
162155
Stream::WriteCallback o_write;
163156
Stream::ConnectCallback o_connect;
164157

165-
Botan::RandomNumberGenerator& m_rng;
166158
Botan::Credentials_Manager& m_creds;
167159
Botan::TLS::Strict_Policy m_policy;
168160
Botan::TLS::Session_Manager_In_Memory m_session_manager;

src/net/http/secure_server.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ inline std::unique_ptr<Botan::Private_Key> read_pkey(fs::Dirent& key_file)
3232
namespace http
3333
{
3434
Secure_server::Secure_server(
35+
const std::string& server_name,
3536
fs::Dirent& file_ca_key,
3637
fs::Dirent& file_ca_cert,
3738
fs::Dirent& file_server_key,
@@ -52,6 +53,7 @@ namespace http
5253
auto srv_key = read_pkey(file_server_key);
5354

5455
auto* credman = net::Credman::create(
56+
server_name,
5557
get_rng(),
5658
std::move(ca_key),
5759
Botan::X509_Certificate(vca_cert),
@@ -61,11 +63,15 @@ namespace http
6163
}
6264

6365
Secure_server::Secure_server(
66+
const std::string& server_name,
6467
fs::Dirent& file_ca_key,
6568
fs::Dirent& file_ca_cert,
6669
fs::Dirent& file_server_key,
6770
TCP& tcp)
68-
: Secure_server(file_ca_key, file_ca_cert, file_server_key, tcp, nullptr)
71+
: Secure_server(
72+
server_name,
73+
file_ca_key, file_ca_cert, file_server_key,
74+
tcp, nullptr)
6975
{}
7076

7177
}

0 commit comments

Comments
 (0)