Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions envoy/ssl/connection.h
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,18 @@ class ConnectionInfo {
**/
virtual std::string ciphersuiteString() const PURE;

/**
* @return uint16_t the OpenSSL id of the group that was used for the key agreement of the
* established TLS connection. Returns 0 if there is no group.
**/
virtual uint16_t tlsGroupId() const PURE;

/**
* @return std::string the OpenSSL name of the group that was used for the key agreement of the
* established TLS connection. Returns "" if there is no group.
**/
virtual std::string tlsGroupString() const PURE;

/**
* @return std::string the TLS version (e.g., TLSv1.2, TLSv1.3) used in the established TLS
* connection.
Expand Down
18 changes: 18 additions & 0 deletions source/common/formatter/stream_info_formatter.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1646,6 +1646,15 @@ const StreamInfoFormatterProviderLookupTable& getKnownStreamInfoFormatterProvide
return connection_info.ciphersuiteString();
});
}}},
{"UPSTREAM_TLS_GROUP",
{CommandSyntaxChecker::COMMAND_ONLY,
[](absl::string_view, absl::optional<size_t>) {
return std::make_unique<
StreamInfoUpstreamSslConnectionInfoFormatterProvider>(
[](const Ssl::ConnectionInfo& connection_info) {
return connection_info.tlsGroupString();
});
}}},
{"UPSTREAM_TLS_VERSION",
{CommandSyntaxChecker::COMMAND_ONLY,
[](absl::string_view, absl::optional<size_t>) {
Expand Down Expand Up @@ -2088,6 +2097,15 @@ const StreamInfoFormatterProviderLookupTable& getKnownStreamInfoFormatterProvide
return connection_info.ciphersuiteString();
});
}}},
{"DOWNSTREAM_TLS_GROUP",
{CommandSyntaxChecker::COMMAND_ONLY,
[](absl::string_view, absl::optional<size_t>) {
return std::make_unique<
StreamInfoSslConnectionInfoFormatterProvider>(
[](const Ssl::ConnectionInfo& connection_info) {
return connection_info.tlsGroupString();
});
}}},
{"DOWNSTREAM_TLS_VERSION",
{CommandSyntaxChecker::COMMAND_ONLY,
[](absl::string_view, absl::optional<size_t>) {
Expand Down
11 changes: 11 additions & 0 deletions source/common/tls/connection_info_impl_base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,17 @@ std::string ConnectionInfoImplBase::ciphersuiteString() const {
return SSL_CIPHER_get_name(cipher);
}

uint16_t ConnectionInfoImplBase::tlsGroupId() const { return SSL_get_group_id(ssl()); }

std::string ConnectionInfoImplBase::tlsGroupString() const {
const char* group = SSL_get_group_name(tlsGroupId());
if (group == nullptr) {
return {};
}

return group;
}

const std::string& ConnectionInfoImplBase::tlsVersion() const {
return getCachedValueOrCreate<std::string>(
CachedValueTag::TlsVersion, [](SSL* ssl) { return std::string(SSL_get_version(ssl)); });
Expand Down
2 changes: 2 additions & 0 deletions source/common/tls/connection_info_impl_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ class ConnectionInfoImplBase : public Ssl::ConnectionInfo {
const std::string& sessionId() const override;
uint16_t ciphersuiteId() const override;
std::string ciphersuiteString() const override;
uint16_t tlsGroupId() const override;
std::string tlsGroupString() const override;
const std::string& tlsVersion() const override;
const std::string& alpn() const override;
const std::string& sni() const override;
Expand Down
2 changes: 2 additions & 0 deletions test/mocks/ssl/mocks.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ class MockConnectionInfo : public ConnectionInfo {
MOCK_METHOD(const std::string&, sessionId, (), (const));
MOCK_METHOD(uint16_t, ciphersuiteId, (), (const));
MOCK_METHOD(std::string, ciphersuiteString, (), (const));
MOCK_METHOD(uint16_t, tlsGroupId, (), (const));
MOCK_METHOD(std::string, tlsGroupString, (), (const));
MOCK_METHOD(const std::string&, tlsVersion, (), (const));
MOCK_METHOD(const std::string&, alpn, (), (const));
MOCK_METHOD(const std::string&, sni, (), (const));
Expand Down
Loading