Skip to content

Commit 3789cd1

Browse files
abakiaydinmeta-codesync[bot]
authored andcommitted
Refactor server cert manager
Summary: Adds more flexibility for implementing different cert managers. Reviewed By: frqiu Differential Revision: D88404796 fbshipit-source-id: 8c39504c0e49a5933b2a490c7315f89b1a61d924
1 parent 0031b78 commit 3789cd1

20 files changed

Lines changed: 123 additions & 76 deletions

File tree

third-party/fizz/src/fizz/cmake/FizzSources.cmake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ set(
8585
record/Types.cpp
8686
server/AeadCookieCipher.cpp
8787
server/AeadTokenCipher.cpp
88-
server/CertManager.cpp
8988
server/CookieCipher.cpp
89+
server/DefaultCertManager.cpp
9090
server/FizzServer.cpp
9191
server/FizzServerContext.cpp
9292
server/HandshakeLogging.cpp
@@ -247,6 +247,7 @@ set(
247247
server/CertManager.h
248248
server/CookieCipher.h
249249
server/CookieTypes.h
250+
server/DefaultCertManager.h
250251
server/DualTicketCipher.h
251252
server/FizzServer-inl.h
252253
server/FizzServer.h

third-party/fizz/src/fizz/experimental/ktls/test/AsyncFizzBaseKTLSTest.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
#include <fizz/protocol/test/Mocks.h>
2323
#include <fizz/server/AeadTicketCipher.h>
2424
#include <fizz/server/AsyncFizzServer.h>
25-
#include <fizz/server/CertManager.h>
25+
#include <fizz/server/DefaultCertManager.h>
2626
#include <fizz/server/FizzServerContext.h>
2727
#include <fizz/server/TicketCodec.h>
2828

@@ -224,13 +224,13 @@ class OneshotRead : public folly::AsyncTransport::ReadCallback {
224224

225225
static std::shared_ptr<fizz::server::FizzServerContext>
226226
makeTestServerContext() {
227-
auto certmanager = std::make_shared<fizz::server::CertManager>();
227+
auto certmanager = std::make_shared<fizz::server::DefaultCertManager>();
228228
certmanager->addCertAndSetDefault(
229229
openssl::CertUtils::makeSelfCert(
230230
fizz::test::kP256Certificate.str(), fizz::test::kP256Key.str()));
231231

232232
auto factory = std::make_shared<fizz::test::MockFactory>();
233-
auto certManager = std::make_shared<server::CertManager>();
233+
auto certManager = std::make_shared<server::DefaultCertManager>();
234234
auto ticketCipher = std::make_shared<
235235
Aead128GCMTicketCipher<TicketCodec<CertificateStorage::X509>>>(
236236
std::move(factory), std::move(certManager));

third-party/fizz/src/fizz/extensions/delegatedcred/DelegatedCredentialCertManager.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,15 @@ CertMatch DelegatedCredentialCertManager::getCert(
2929
return dcRes;
3030
}
3131
}
32-
return CertManager::getCert(sni, supportedSigSchemes, peerSigSchemes, chlo);
32+
return DefaultCertManager::getCert(
33+
sni, supportedSigSchemes, peerSigSchemes, chlo);
3334
}
3435

3536
// Falls back to non-delegated if no match.
3637
std::shared_ptr<SelfCert> DelegatedCredentialCertManager::getCert(
3738
const std::string& identity) const {
3839
auto dcRes = dcMgr_.getCert(identity);
39-
return dcRes ? dcRes : CertManager::getCert(identity);
40+
return dcRes ? dcRes : DefaultCertManager::getCert(identity);
4041
}
4142

4243
void DelegatedCredentialCertManager::addDelegatedCredentialAndSetDefault(

third-party/fizz/src/fizz/extensions/delegatedcred/DelegatedCredentialCertManager.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#pragma once
99
#include <fizz/extensions/delegatedcred/SelfDelegatedCredential.h>
1010
#include <fizz/extensions/delegatedcred/Types.h>
11-
#include <fizz/server/CertManager.h>
11+
#include <fizz/server/DefaultCertManager.h>
1212

1313
namespace fizz {
1414
namespace extensions {
@@ -17,7 +17,7 @@ namespace extensions {
1717
// delegated credential extensions and one without. Certs are selected based
1818
// on the usual rules with the addition of the split between delegated and
1919
// non-delegated certs.
20-
class DelegatedCredentialCertManager : public server::CertManager {
20+
class DelegatedCredentialCertManager : public server::DefaultCertManager {
2121
public:
2222
CertMatch getCert(
2323
const folly::Optional<std::string>& sni,
@@ -35,7 +35,7 @@ class DelegatedCredentialCertManager : public server::CertManager {
3535
bool hasDelegatedCredential() const;
3636

3737
protected:
38-
server::CertManager dcMgr_;
38+
server::DefaultCertManager dcMgr_;
3939
};
4040
} // namespace extensions
4141
} // namespace fizz

third-party/fizz/src/fizz/server/CertManager.h

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@
88

99
#pragma once
1010

11-
#include <map>
12-
#include <unordered_map>
13-
1411
#include <fizz/protocol/CertMatch.h>
1512

1613
namespace fizz {
@@ -29,41 +26,14 @@ class CertManager {
2926
const folly::Optional<std::string>& sni,
3027
const std::vector<SignatureScheme>& supportedSigSchemes,
3128
const std::vector<SignatureScheme>& peerSigSchemes,
32-
const ClientHello& chlo) const;
29+
const ClientHello& chlo) const = 0;
3330

3431
/**
3532
* Return a certificate with the a primary identity exactly matching identity.
3633
* Will return nullptr if no matching cert is found.
3734
*/
38-
virtual std::shared_ptr<SelfCert> getCert(const std::string& identity) const;
39-
40-
void addCertAndSetDefault(std::shared_ptr<SelfCert> cert);
41-
42-
void addCert(std::shared_ptr<SelfCert> cert);
43-
44-
bool hasCerts() const;
45-
46-
using SigSchemeMap = std::map<SignatureScheme, std::shared_ptr<SelfCert>>;
47-
const std::unordered_map<std::string, SigSchemeMap>&
48-
getCertificatesByIdentity() const;
49-
50-
protected:
51-
CertMatch findCert(
52-
const std::string& key,
53-
const std::vector<SignatureScheme>& supportedSigSchemes,
54-
const std::vector<SignatureScheme>& peerSigSchemes) const;
55-
56-
void addCertIdentity(
57-
std::shared_ptr<SelfCert> cert,
58-
const std::string& ident);
59-
60-
void addCert(std::shared_ptr<SelfCert> cert, bool defaultCert);
61-
62-
static std::string getKeyFromIdent(const std::string& ident);
63-
64-
std::unordered_map<std::string, SigSchemeMap> certs_;
65-
std::unordered_map<std::string, std::shared_ptr<SelfCert>> identMap_;
66-
std::string default_;
35+
virtual std::shared_ptr<SelfCert> getCert(
36+
const std::string& identity) const = 0;
6737
};
6838
} // namespace server
6939
} // namespace fizz

third-party/fizz/src/fizz/server/CertManager.cpp renamed to third-party/fizz/src/fizz/server/DefaultCertManager.cpp

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* LICENSE file in the root directory of this source tree.
77
*/
88

9-
#include <fizz/server/CertManager.h>
9+
#include <fizz/server/DefaultCertManager.h>
1010

1111
#include <folly/String.h>
1212

@@ -16,7 +16,7 @@ namespace fizz {
1616
namespace server {
1717

1818
// Find a matching cert given a key.
19-
CertMatch CertManager::findCert(
19+
CertMatch DefaultCertManager::findCert(
2020
const std::string& key,
2121
const std::vector<SignatureScheme>& supportedSigSchemes,
2222
const std::vector<SignatureScheme>& peerSigSchemes) const {
@@ -37,7 +37,7 @@ CertMatch CertManager::findCert(
3737
return none;
3838
}
3939

40-
CertMatch CertManager::getCert(
40+
CertMatch DefaultCertManager::getCert(
4141
const Optional<std::string>& sni,
4242
const std::vector<SignatureScheme>& supportedSigSchemes,
4343
const std::vector<SignatureScheme>& peerSigSchemes,
@@ -75,7 +75,7 @@ CertMatch CertManager::getCert(
7575
return folly::none;
7676
}
7777

78-
std::shared_ptr<SelfCert> CertManager::getCert(
78+
std::shared_ptr<SelfCert> DefaultCertManager::getCert(
7979
const std::string& identity) const {
8080
auto it = identMap_.find(identity);
8181
if (it == identMap_.end()) {
@@ -84,7 +84,7 @@ std::shared_ptr<SelfCert> CertManager::getCert(
8484
return it->second;
8585
}
8686

87-
std::string CertManager::getKeyFromIdent(const std::string& ident) {
87+
std::string DefaultCertManager::getKeyFromIdent(const std::string& ident) {
8888
if (ident.empty()) {
8989
throw std::runtime_error("empty identity");
9090
}
@@ -100,7 +100,7 @@ std::string CertManager::getKeyFromIdent(const std::string& ident) {
100100
return key;
101101
}
102102

103-
void CertManager::addCertIdentity(
103+
void DefaultCertManager::addCertIdentity(
104104
std::shared_ptr<SelfCert> cert,
105105
const std::string& ident) {
106106
auto key = getKeyFromIdent(ident);
@@ -120,15 +120,17 @@ void CertManager::addCertIdentity(
120120
}
121121
}
122122

123-
void CertManager::addCert(std::shared_ptr<SelfCert> cert) {
123+
void DefaultCertManager::addCert(std::shared_ptr<SelfCert> cert) {
124124
addCert(std::move(cert), false);
125125
}
126126

127-
void CertManager::addCertAndSetDefault(std::shared_ptr<SelfCert> cert) {
127+
void DefaultCertManager::addCertAndSetDefault(std::shared_ptr<SelfCert> cert) {
128128
addCert(std::move(cert), true);
129129
}
130130

131-
void CertManager::addCert(std::shared_ptr<SelfCert> cert, bool defaultCert) {
131+
void DefaultCertManager::addCert(
132+
std::shared_ptr<SelfCert> cert,
133+
bool defaultCert) {
132134
auto primaryIdent = cert->getIdentity();
133135
addCertIdentity(cert, primaryIdent);
134136

@@ -148,12 +150,12 @@ void CertManager::addCert(std::shared_ptr<SelfCert> cert, bool defaultCert) {
148150
}
149151
}
150152

151-
bool CertManager::hasCerts() const {
153+
bool DefaultCertManager::hasCerts() const {
152154
return !certs_.empty();
153155
}
154156

155-
const std::unordered_map<std::string, CertManager::SigSchemeMap>&
156-
CertManager::getCertificatesByIdentity() const {
157+
const std::unordered_map<std::string, DefaultCertManager::SigSchemeMap>&
158+
DefaultCertManager::getCertificatesByIdentity() const {
157159
return certs_;
158160
}
159161
} // namespace server
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
* Copyright (c) 2018-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
*/
8+
9+
#pragma once
10+
11+
#include <map>
12+
#include <unordered_map>
13+
14+
#include "fizz/server/CertManager.h"
15+
16+
#include <fizz/protocol/CertMatch.h>
17+
18+
namespace fizz {
19+
namespace server {
20+
21+
class DefaultCertManager : public CertManager {
22+
public:
23+
virtual CertMatch getCert(
24+
const folly::Optional<std::string>& sni,
25+
const std::vector<SignatureScheme>& supportedSigSchemes,
26+
const std::vector<SignatureScheme>& peerSigSchemes,
27+
const ClientHello& chlo) const override;
28+
29+
virtual std::shared_ptr<SelfCert> getCert(
30+
const std::string& identity) const override;
31+
32+
void addCertAndSetDefault(std::shared_ptr<SelfCert> cert);
33+
34+
void addCert(std::shared_ptr<SelfCert> cert);
35+
36+
bool hasCerts() const;
37+
38+
using SigSchemeMap = std::map<SignatureScheme, std::shared_ptr<SelfCert>>;
39+
const std::unordered_map<std::string, SigSchemeMap>&
40+
getCertificatesByIdentity() const;
41+
42+
protected:
43+
CertMatch findCert(
44+
const std::string& key,
45+
const std::vector<SignatureScheme>& supportedSigSchemes,
46+
const std::vector<SignatureScheme>& peerSigSchemes) const;
47+
48+
void addCertIdentity(
49+
std::shared_ptr<SelfCert> cert,
50+
const std::string& ident);
51+
52+
void addCert(std::shared_ptr<SelfCert> cert, bool defaultCert);
53+
54+
static std::string getKeyFromIdent(const std::string& ident);
55+
56+
std::unordered_map<std::string, SigSchemeMap> certs_;
57+
std::unordered_map<std::string, std::shared_ptr<SelfCert>> identMap_;
58+
std::string default_;
59+
};
60+
} // namespace server
61+
} // namespace fizz

third-party/fizz/src/fizz/server/test/AeadTicketCipherTest.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <fizz/crypto/test/TestUtil.h>
1717
#include <fizz/protocol/clock/test/Mocks.h>
1818
#include <fizz/protocol/test/Mocks.h>
19+
#include <fizz/server/DefaultCertManager.h>
1920

2021
using namespace fizz::test;
2122
using namespace testing;
@@ -80,7 +81,7 @@ class AeadTicketCipherTest : public Test {
8081
AeadTicketCipherTest()
8182
: cipher_(
8283
std::make_shared<MockFactory>(),
83-
std::make_shared<CertManager>()) {}
84+
std::make_shared<DefaultCertManager>()) {}
8485

8586
~AeadTicketCipherTest() override = default;
8687
void SetUp() override {
@@ -102,11 +103,12 @@ class AeadTicketCipherTest : public Test {
102103
if (!pskContext.empty()) {
103104
cipher_ = TestAeadTicketCipher(
104105
std::make_shared<MockFactory>(),
105-
std::make_shared<CertManager>(),
106+
std::make_shared<DefaultCertManager>(),
106107
pskContext);
107108
} else {
108109
cipher_ = TestAeadTicketCipher(
109-
std::make_shared<MockFactory>(), std::make_shared<CertManager>());
110+
std::make_shared<MockFactory>(),
111+
std::make_shared<DefaultCertManager>());
110112
}
111113
cipher_.setPolicy(policy_);
112114
auto s1 = toIOBuf(ticketSecret1);

third-party/fizz/src/fizz/server/test/CertManagerTest.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include <folly/portability/GMock.h>
1010
#include <folly/portability/GTest.h>
1111

12-
#include <fizz/server/CertManager.h>
12+
#include <fizz/server/DefaultCertManager.h>
1313

1414
#include <fizz/protocol/test/Mocks.h>
1515

@@ -43,7 +43,7 @@ class CertManagerTest : public Test {
4343
return chlo;
4444
}
4545

46-
CertManager manager_;
46+
DefaultCertManager manager_;
4747
};
4848

4949
TEST_F(CertManagerTest, TestNoMatchDefault) {

third-party/fizz/src/fizz/server/test/TicketCodecTest.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <fizz/crypto/test/TestUtil.h>
1616
#include <fizz/protocol/DefaultFactory.h>
1717
#include <fizz/protocol/test/Mocks.h>
18+
#include <fizz/server/DefaultCertManager.h>
1819
#include <fizz/server/test/Mocks.h>
1920

2021
static constexpr folly::StringPiece ticket{
@@ -56,7 +57,7 @@ static ResumptionState getTestResumptionState(
5657

5758
static ResumptionState x509Decode(Buf encoded) {
5859
fizz::DefaultFactory factory;
59-
CertManager certManager;
60+
DefaultCertManager certManager;
6061
return TicketCodec<CertificateStorage::X509>::decode(
6162
std::move(encoded), factory, certManager);
6263
}

0 commit comments

Comments
 (0)