Skip to content
Merged
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
49 changes: 7 additions & 42 deletions Libraries/Opc.Ua.Server/Server/StandardServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2436,24 +2436,18 @@ public async ValueTask<bool> RegisterWithDiscoveryServerAsync(CancellationToken
var configuration = new ApplicationConfiguration(Configuration);

// use a dedicated certificate validator with the registration, but derive behavior from server config
var registrationCertificateValidator = new CertificateValidationEventHandler(
RegistrationValidator_CertificateValidation);
configuration.CertificateValidator = new CertificateValidator(MessageContext.Telemetry);
configuration.CertificateValidator.CertificateValidation
+= registrationCertificateValidator;
await configuration
.CertificateValidator.UpdateAsync(
configuration.SecurityConfiguration,
applicationUri: null,
configuration.ApplicationUri,
ct)
.ConfigureAwait(false);

try
// try each endpoint.
if (m_registrationEndpoints != null)
{
// try each endpoint.
if (m_registrationEndpoints != null)
{
foreach (ConfiguredEndpoint endpoint in m_registrationEndpoints.Endpoints)
foreach (ConfiguredEndpoint endpoint in m_registrationEndpoints.Endpoints)
{
RegistrationClient client = null;
int i = 0;
Expand Down Expand Up @@ -2557,43 +2551,14 @@ await client.RegisterServerAsync(
}
}
}
// retry to start with RegisterServer2 if both failed
m_useRegisterServer2 = true;
}
}
finally
{
configuration.CertificateValidator.CertificateValidation -= registrationCertificateValidator;
// retry to start with RegisterServer2 if both failed
m_useRegisterServer2 = true;
}

m_registeredWithDiscoveryServer = false;
return false;
}

/// <summary>
/// Checks that the domains in the certificate match the current host.
/// </summary>
private void RegistrationValidator_CertificateValidation(
CertificateValidator sender,
CertificateValidationEventArgs e)
{
System.Net.IPAddress[] targetAddresses = Utils.GetHostAddresses(Utils.GetHostName());

foreach (string domain in X509Utils.GetDomainsFromCertificate(e.Certificate))
{
foreach (System.Net.IPAddress actualAddress in Utils.GetHostAddresses(domain))
{
foreach (System.Net.IPAddress targetAddress in targetAddresses)
{
if (targetAddress.Equals(actualAddress))
{
e.Accept = true;
return;
}
}
}
}
}

/// <summary>
/// Registers the server endpoints with the LDS.
/// </summary>
Expand Down
Loading