Skip to content

Commit 58f6122

Browse files
authored
[Ticket parser] Print certificate fingerprint in debug message (#5650)
1 parent f95d5a6 commit 58f6122

File tree

5 files changed

+27
-0
lines changed

5 files changed

+27
-0
lines changed

ydb/core/security/certificate_check/cert_auth_processor.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
#include <openssl/bio.h>
66
#include <openssl/objects.h>
77
#include <openssl/obj_mac.h>
8+
#include <openssl/sha.h>
89

910
#include <util/generic/yexception.h>
1011
#include <util/generic/map.h>
1112
#include <util/generic/string.h>
13+
#include <util/string/hex.h>
1214

1315
namespace NKikimr {
1416

@@ -98,6 +100,15 @@ TVector<std::pair<TString, TString>> X509CertificateReader::ReadIssuerTerms(cons
98100
return ReadTerms(name);
99101
}
100102

103+
TString X509CertificateReader::GetFingerprint(const X509Ptr& x509) {
104+
static constexpr size_t FINGERPRINT_LENGTH = SHA_DIGEST_LENGTH;
105+
unsigned char fingerprint[FINGERPRINT_LENGTH];
106+
if (X509_digest(x509.get(), EVP_sha1(), fingerprint, nullptr) <= 0) {
107+
return "";
108+
}
109+
return HexEncode(fingerprint, FINGERPRINT_LENGTH);
110+
}
111+
101112
TCertificateAuthorizationParams::TCertificateAuthorizationParams(const TDN& dn, bool requireSameIssuer, const std::vector<TString>& groups)
102113
: SubjectDn(dn)
103114
, RequireSameIssuer(requireSameIssuer)

ydb/core/security/certificate_check/cert_auth_processor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ struct X509CertificateReader {
6363
static TVector<std::pair<TString, TString>> ReadSubjectTerms(const X509Ptr& x509);
6464
static TVector<std::pair<TString, TString>> ReadAllSubjectTerms(const X509Ptr& x509);
6565
static TVector<std::pair<TString, TString>> ReadIssuerTerms(const X509Ptr& x509);
66+
static TString GetFingerprint(const X509Ptr& x509);
6667
private:
6768
static std::pair<TString, TString> GetTermFromX509Name(X509_NAME* name, int nid);
6869
static TVector<std::pair<TString, TString>> ReadTerms(X509_NAME* name);

ydb/core/security/certificate_check/cert_auth_utils.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,4 +529,14 @@ TProps TProps::AsClientServer() {
529529

530530
TProps& TProps::WithValid(TDuration duration) { SecondsValid = duration.Seconds(); return *this; }
531531

532+
std::string GetCertificateFingerprint(const std::string& certificate) {
533+
const static std::string defaultFingerprint = "certificate";
534+
X509CertificateReader::X509Ptr x509Cert = X509CertificateReader::ReadCertAsPEM(certificate);
535+
if (!x509Cert) {
536+
return defaultFingerprint;
537+
}
538+
std::string fingerprint = X509CertificateReader::GetFingerprint(x509Cert);
539+
return (fingerprint.empty() ? defaultFingerprint : fingerprint);
540+
}
541+
532542
} //namespace NKikimr

ydb/core/security/certificate_check/cert_auth_utils.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,6 @@ TCertAndKey GenerateCA(const TProps& props);
5050
TCertAndKey GenerateSignedCert(const TCertAndKey& ca, const TProps& props);
5151
void VerifyCert(const std::string& cert, const std::string& caCert);
5252

53+
std::string GetCertificateFingerprint(const std::string& certificate);
54+
5355
} //namespace NKikimr

ydb/core/security/ticket_parser_impl.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,9 @@ class TTicketParserImpl : public TActorBootstrapped<TDerived> {
246246
if (Signature.AccessKeyId) {
247247
return MaskTicket(Signature.AccessKeyId);
248248
}
249+
if (TokenType == TDerived::ETokenType::Certificate) {
250+
return GetCertificateFingerprint(Ticket);
251+
}
249252
return MaskTicket(Ticket);
250253
}
251254
};

0 commit comments

Comments
 (0)