Skip to content

Commit

Permalink
Loading new certs on calling the admin/reloadconfig endpoint with pre…
Browse files Browse the repository at this point in the history
…vious thumbprint value

Loading new certs on calling the admin/reloadconfig endpoint with previous thumbprint value
  • Loading branch information
lakshdeepsingheventstore committed Jun 14, 2023
1 parent f8bd926 commit 77c8f66
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 13 deletions.
3 changes: 1 addition & 2 deletions src/EventStore.Core/Certificates/CertificateProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ public abstract class CertificateProvider {
public X509Certificate2 Certificate;
public X509Certificate2Collection IntermediateCerts;
public X509Certificate2Collection TrustedRootCerts;

public abstract LoadCertificateResult LoadCertificates();
public abstract LoadCertificateResult LoadCertificates(string previousThumbPrint);
}

public enum LoadCertificateResult {
Expand Down
3 changes: 1 addition & 2 deletions src/EventStore.Core/Certificates/DevCertificateProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ public class DevCertificateProvider : CertificateProvider {
Certificate = certificate;
TrustedRootCerts = new X509Certificate2Collection(certificate);
}

public override LoadCertificateResult LoadCertificates() {
public override LoadCertificateResult LoadCertificates(string previousThumbPrint) {
return LoadCertificateResult.Skipped;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ public class OptionsCertificateProvider: CertificateProvider {
_options = options;
}

public override LoadCertificateResult LoadCertificates() {
//NEW METHOD IMPLEMENTATION OF LoadCertificates() method TO TRACK PREVIOUS THUMBPRINT
public override LoadCertificateResult LoadCertificates(string _previousThumbprint) {
if (_options.Application.Insecure) {
Log.Information("Skipping reload of certificates since TLS is disabled.");
return LoadCertificateResult.Skipped;
Expand All @@ -29,7 +30,7 @@ public class OptionsCertificateProvider: CertificateProvider {
return LoadCertificateResult.VerificationFailed;
}

var previousThumbprint = Certificate?.Thumbprint;
var previousThumbprint = _previousThumbprint;
var newThumbprint = certificate.Thumbprint;
Log.Information("Loading the node's certificate. Subject: {subject}, Previous thumbprint: {previousThumbprint}, New thumbprint: {newThumbprint}",
certificate.SubjectName.Name, previousThumbprint, newThumbprint);
Expand Down Expand Up @@ -59,6 +60,8 @@ public class OptionsCertificateProvider: CertificateProvider {
return LoadCertificateResult.Success;
}

//END OF NEW IMPLEMENTATION

private static bool VerifyCertificates(X509Certificate2 nodeCertificate, X509Certificate2Collection intermediates, X509Certificate2Collection trustedRoots) {
bool error = false;

Expand Down
12 changes: 5 additions & 7 deletions src/EventStore.Core/ClusterVNode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ public abstract class ClusterVNode {
AuthorizationProviderFactory authorizationProviderFactory = null,
IReadOnlyList<IPersistentSubscriptionConsumerStrategyFactory> factories = null,
CertificateProvider certificateProvider = null,
//OptionsCertificateProvider certificateProvider = null,
TelemetryConfiguration telemetryConfiguration = null,
Guid? instanceId = null,
int debugIndex = 0) {
Expand Down Expand Up @@ -122,7 +121,6 @@ public class ClusterVNode<TStreamId> :
IHandle<SystemMessage.SystemStart>,
IHandle<ClientMessage.ReloadConfig>{
private readonly ClusterVNodeOptions _options;
//private static readonly ClusterVNodeOptions _options;
public override TFChunkDb Db { get; }

public override GossipAdvertiseInfo GossipAdvertiseInfo { get; }
Expand Down Expand Up @@ -196,7 +194,6 @@ public class ClusterVNode<TStreamId> :
private readonly CertificateDelegates.ClientCertificateValidator _externalClientCertificateValidator;
private readonly CertificateDelegates.ServerCertificateValidator _externalServerCertificateValidator;
private CertificateProvider _certificateProvider;
//private readonly OptionsCertificateProvider _certificateProvider;
private readonly ClusterVNodeStartup<TStreamId> _startup;
private readonly EventStoreClusterClientCache _eventStoreClusterClientCache;

Expand Down Expand Up @@ -231,7 +228,6 @@ public class ClusterVNode<TStreamId> :
IReadOnlyList<IPersistentSubscriptionConsumerStrategyFactory>
additionalPersistentSubscriptionConsumerStrategyFactories = null,
CertificateProvider certificateProvider = null,
//OptionsCertificateProvider certificateProvider = null,
TelemetryConfiguration telemetryConfiguration = null,
IExpiryStrategy expiryStrategy = null,
Guid? instanceId = null, int debugIndex = 0) {
Expand Down Expand Up @@ -1821,11 +1817,13 @@ public class ClusterVNode<TStreamId> :
return;
}

_certificateProvider = new OptionsCertificateProvider(options);

if (_certificateProvider?.LoadCertificates() == LoadCertificateResult.VerificationFailed){
var prevthumbprint = _certificateProvider.Certificate?.Thumbprint;
var temp = new OptionsCertificateProvider(options);
if (temp?.LoadCertificates(prevthumbprint) == LoadCertificateResult.VerificationFailed){
throw new InvalidConfigurationException("Aborting certificate loading due to verification errors.");
}

_certificateProvider = temp;
}

private static void EnsureNet5CompatFileStream() {
Expand Down

0 comments on commit 77c8f66

Please sign in to comment.