feat: populate TLS certificate expiry and OCSP peer verify in /varz
Load the server TLS certificate from disk during each /varz request to read its NotAfter date and expose it as tls_cert_not_after. Also wire OcspPeerVerify from NatsOptions into the tls_ocsp_peer_verify field. Both fields were already declared in the Varz model but left unpopulated.
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Security.Cryptography.X509Certificates;
|
||||||
using NATS.Server.Protocol;
|
using NATS.Server.Protocol;
|
||||||
|
|
||||||
namespace NATS.Server.Monitoring;
|
namespace NATS.Server.Monitoring;
|
||||||
@@ -47,6 +48,22 @@ public sealed class VarzHandler : IDisposable
|
|||||||
_lastCpuUsage = currentCpu;
|
_lastCpuUsage = currentCpu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load the TLS certificate to report its expiry date in /varz.
|
||||||
|
// Corresponds to Go server/monitor.go handleVarz populating TLSCertExpiry.
|
||||||
|
DateTime? tlsCertExpiry = null;
|
||||||
|
if (_options.HasTls && !string.IsNullOrEmpty(_options.TlsCert))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using var cert = X509CertificateLoader.LoadCertificateFromFile(_options.TlsCert);
|
||||||
|
tlsCertExpiry = cert.NotAfter;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// cert load failure — leave field as default
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return new Varz
|
return new Varz
|
||||||
{
|
{
|
||||||
Id = _server.ServerId,
|
Id = _server.ServerId,
|
||||||
@@ -63,6 +80,8 @@ public sealed class VarzHandler : IDisposable
|
|||||||
TlsRequired = _options.HasTls && !_options.AllowNonTls,
|
TlsRequired = _options.HasTls && !_options.AllowNonTls,
|
||||||
TlsVerify = _options.HasTls && _options.TlsVerify,
|
TlsVerify = _options.HasTls && _options.TlsVerify,
|
||||||
TlsTimeout = _options.HasTls ? _options.TlsTimeout.TotalSeconds : 0,
|
TlsTimeout = _options.HasTls ? _options.TlsTimeout.TotalSeconds : 0,
|
||||||
|
TlsCertNotAfter = tlsCertExpiry ?? default,
|
||||||
|
TlsOcspPeerVerify = _options.OcspPeerVerify,
|
||||||
MaxConnections = _options.MaxConnections,
|
MaxConnections = _options.MaxConnections,
|
||||||
MaxPayload = _options.MaxPayload,
|
MaxPayload = _options.MaxPayload,
|
||||||
MaxControlLine = _options.MaxControlLine,
|
MaxControlLine = _options.MaxControlLine,
|
||||||
|
|||||||
Reference in New Issue
Block a user