Skip to content

Commit 0e4b461

Browse files
authored
Obsolete Sync Certificate Validator Methods (#3338)
* Obsolete Sync Certificate Validator Methods * Update Tests * Use HttpClientHandler directly instead of relying on reflection
1 parent 0d8317a commit 0e4b461

File tree

18 files changed

+262
-292
lines changed

18 files changed

+262
-292
lines changed

Applications/Quickstarts.Servers/ReferenceServer/ReferenceServer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,11 +405,11 @@ private void VerifyX509IdentityToken(X509IdentityToken token)
405405
{
406406
if (m_userCertificateValidator != null)
407407
{
408-
m_userCertificateValidator.Validate(certificate);
408+
m_userCertificateValidator.ValidateAsync(certificate, default).GetAwaiter().GetResult();
409409
}
410410
else
411411
{
412-
CertificateValidator.Validate(certificate);
412+
CertificateValidator.ValidateAsync(certificate, default).GetAwaiter().GetResult();
413413
}
414414
}
415415
catch (Exception e)

Libraries/Opc.Ua.Client/Session/Session.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1455,7 +1455,7 @@ public async Task UpdateSessionAsync(
14551455
requireEncryption &&
14561456
identity.TokenType != UserTokenType.Anonymous)
14571457
{
1458-
m_configuration.CertificateValidator.Validate(m_serverCertificate);
1458+
await m_configuration.CertificateValidator.ValidateAsync(m_serverCertificate, ct).ConfigureAwait(false);
14591459
}
14601460

14611461
// validate server nonce and security parameters for user identity.

Libraries/Opc.Ua.Gds.Server.Common/GlobalDiscoverySampleServer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ private void VerifyX509IdentityToken(X509IdentityToken token)
297297
X509Certificate2 certificate = token.GetOrCreateCertificate(MessageContext.Telemetry);
298298
try
299299
{
300-
CertificateValidator.Validate(certificate);
300+
CertificateValidator.ValidateAsync(certificate, default).GetAwaiter().GetResult();
301301
}
302302
catch (Exception e)
303303
{

Libraries/Opc.Ua.PubSub/Transport/MqttPubSubConnection.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -789,7 +789,7 @@ private MqttClientOptions GetMqttClientOptions()
789789
UrlScheme = connectionUri.Scheme;
790790
}
791791

792-
MqttClientProtocolConfiguration transportProtocolConfiguration =
792+
var transportProtocolConfiguration =
793793
new MqttClientProtocolConfiguration(PubSubConnectionConfiguration.ConnectionProperties, m_logger);
794794

795795
var mqttProtocolVersion = (MqttProtocolVersion)
@@ -940,7 +940,7 @@ private bool ValidateBrokerCertificate(MqttClientCertificateValidationEventArgs
940940
return Application.OnValidateBrokerCertificate(brokerCertificate);
941941
}
942942

943-
m_certificateValidator?.Validate(brokerCertificate);
943+
m_certificateValidator?.ValidateAsync(brokerCertificate, default).GetAwaiter().GetResult();
944944
}
945945
catch (Exception ex)
946946
{

Libraries/Opc.Ua.Server/Configuration/ConfigurationNodeManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,7 @@ private async ValueTask<UpdateCertificateMethodStateResult> UpdateCertificateAsy
577577
}
578578
issuerStore.TrustedCertificates = issuerCollection;
579579
certValidator.Update(issuerStore, issuerStore, null);
580-
certValidator.Validate(newCert);
580+
await certValidator.ValidateAsync(newCert, ct).ConfigureAwait(false);
581581
}
582582
catch (Exception ex)
583583
{

Libraries/Opc.Ua.Server/Server/StandardServer.cs

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -340,10 +340,10 @@ public override async Task<CreateSessionResponse> CreateSessionAsync(
340340
uint maxResponseMessageSize,
341341
CancellationToken ct)
342342
{
343-
NodeId sessionId = 0;
344-
NodeId authenticationToken = null;
343+
NodeId sessionId;
344+
NodeId authenticationToken;
345345
double revisedSessionTimeout = 0;
346-
byte[] serverNonce = null;
346+
byte[] serverNonce;
347347
byte[] serverCertificate = null;
348348
EndpointDescriptionCollection serverEndpoints = null;
349349
SignedSoftwareCertificateCollection serverSoftwareCertificates = null;
@@ -413,7 +413,7 @@ X509Certificate2Collection clientCertificateChain
413413
clientDescription.ApplicationUri);
414414
}
415415

416-
CertificateValidator.Validate(clientCertificateChain);
416+
await CertificateValidator.ValidateAsync(clientCertificateChain, ct).ConfigureAwait(false);
417417
}
418418
}
419419
}
@@ -719,7 +719,7 @@ public override async Task<ActivateSessionResponse> ActivateSessionAsync(
719719
SignatureData userTokenSignature,
720720
CancellationToken ct)
721721
{
722-
byte[] serverNonce = null;
722+
byte[] serverNonce;
723723
StatusCodeCollection results = null;
724724
DiagnosticInfoCollection diagnosticInfos = null;
725725

@@ -2574,11 +2574,8 @@ private async void OnRegisterServerAsync(object state)
25742574
lock (m_registrationLock)
25752575
{
25762576
// halt any outstanding timer.
2577-
if (m_registrationTimer != null)
2578-
{
2579-
m_registrationTimer.Dispose();
2580-
m_registrationTimer = null;
2581-
}
2577+
m_registrationTimer?.Dispose();
2578+
m_registrationTimer = null;
25822579
}
25832580

25842581
if (await RegisterWithDiscoveryServerAsync().ConfigureAwait(false))
@@ -3191,11 +3188,10 @@ await masterNodeManager.StartupAsync(cancellationToken)
31913188
m_serverInternal.SetAggregateManager(
31923189
CreateAggregateManager(m_serverInternal, configuration));
31933190

3194-
// create the manager responsible for modelling rules.
3195-
m_logger.LogInformation(Utils.TraceMasks.StartStop, "Server - CreateModellingRulesManager.");
3196-
m_serverInternal.SetModellingRulesManager(
3197-
CreateModellingRulesManager(m_serverInternal, configuration));
3198-
3191+
// create the manager responsible for modelling rules.
3192+
m_logger.LogInformation(Utils.TraceMasks.StartStop, "Server - CreateModellingRulesManager.");
3193+
m_serverInternal.SetModellingRulesManager(
3194+
CreateModellingRulesManager(m_serverInternal, configuration));
31993195

32003196
// start the session manager.
32013197
m_logger.LogInformation(Utils.TraceMasks.StartStop, "Server - CreateSessionManager.");
@@ -3302,11 +3298,8 @@ IMonitoredItemQueueFactory monitoredItemQueueFactory
33023298
m_lastRegistrationInterval = m_minRegistrationInterval;
33033299

33043300
// start registration timer.
3305-
if (m_registrationTimer != null)
3306-
{
3307-
m_registrationTimer.Dispose();
3308-
m_registrationTimer = null;
3309-
}
3301+
m_registrationTimer?.Dispose();
3302+
m_registrationTimer = null;
33103303

33113304
if (m_maxRegistrationInterval > 0)
33123305
{
@@ -3364,11 +3357,8 @@ protected override async ValueTask OnServerStoppingAsync(CancellationToken cance
33643357
// halt any outstanding timer.
33653358
lock (m_registrationLock)
33663359
{
3367-
if (m_registrationTimer != null)
3368-
{
3369-
m_registrationTimer.Dispose();
3370-
m_registrationTimer = null;
3371-
}
3360+
m_registrationTimer?.Dispose();
3361+
m_registrationTimer = null;
33723362
}
33733363

33743364
// attempt graceful shutdown the server.

Stack/Opc.Ua.Bindings.Https/Stack/Https/HttpsTransportListener.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ public void Start()
260260
m_host = new HostBuilder()
261261
.ConfigureWebHostDefaults(ConfigureWebHost)
262262
.Build();
263-
m_host.StartAsync(CancellationToken.None).GetAwaiter().GetResult();
263+
m_host.StartAsync(CancellationToken.None).GetAwaiter().GetResult();
264264
#else
265265
var hostBuilder = new WebHostBuilder();
266266
ConfigureWebHost(hostBuilder);
@@ -581,7 +581,7 @@ private bool ValidateClientCertificate(
581581

582582
try
583583
{
584-
m_quotas.CertificateValidator.Validate(clientCertificate);
584+
m_quotas.CertificateValidator.ValidateAsync(clientCertificate, default).GetAwaiter().GetResult();
585585
}
586586
catch (Exception)
587587
{

Stack/Opc.Ua.Core/Security/Certificates/CertificateValidator.cs

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -497,29 +497,6 @@ public int MaxRejectedCertificates
497497
}
498498
}
499499

500-
/// <summary>
501-
/// Validates the specified certificate against the trust list.
502-
/// </summary>
503-
/// <param name="certificate">The certificate.</param>
504-
public void Validate(X509Certificate2 certificate)
505-
{
506-
Validate([certificate]);
507-
}
508-
509-
/// <summary>
510-
/// Validates a certificate.
511-
/// </summary>
512-
/// <remarks>
513-
/// Each UA application may have a list of trusted certificates that is different from
514-
/// all other UA applications that may be running on the same machine. As a result, the
515-
/// certificate validator cannot rely completely on the Windows certificate store and
516-
/// user or machine specific CTLs (certificate trust lists).
517-
/// </remarks>
518-
public virtual void Validate(X509Certificate2Collection certificateChain)
519-
{
520-
Validate(certificateChain, null);
521-
}
522-
523500
/// <inheritdoc/>
524501
public Task ValidateAsync(X509Certificate2 certificate, CancellationToken ct)
525502
{
@@ -590,8 +567,8 @@ public virtual async Task ValidateAsync(
590567

591568
/// <summary>
592569
/// Validates a certificate with domain validation check.
593-
/// <see cref="Validate(X509Certificate2Collection)"/>
594570
/// </summary>
571+
[Obsolete("Use ValidateAsync")]
595572
public virtual void Validate(X509Certificate2Collection chain, ConfiguredEndpoint endpoint)
596573
{
597574
X509Certificate2 certificate = chain[0];
@@ -754,10 +731,7 @@ public async Task<bool> GetIssuersNoExceptionsOnGetIssuerAsync(
754731

755732
if (issuer != null)
756733
{
757-
if (validationErrors != null)
758-
{
759-
validationErrors[certificate] = revocationStatus;
760-
}
734+
validationErrors?[certificate] = revocationStatus;
761735

762736
if (issuers.Find(iss =>
763737
string.Equals(
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/* Copyright (c) 1996-2022 The OPC Foundation. All rights reserved.
2+
The source code in this file is covered under a dual-license scenario:
3+
- RCL: for OPC Foundation Corporate Members in good-standing
4+
- GPL V2: everybody else
5+
RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/
6+
GNU General Public License as published by the Free Software Foundation;
7+
version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2
8+
This source code is distributed in the hope that it will be useful,
9+
but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11+
*/
12+
13+
using System;
14+
using System.Security.Cryptography.X509Certificates;
15+
using System.Threading;
16+
17+
namespace Opc.Ua
18+
{
19+
/// <summary>
20+
/// Extension methods for ICertificateValidator.
21+
/// </summary>
22+
public static class CertificateValidatorObsolete
23+
{
24+
/// <summary>
25+
/// Validates a certificate.
26+
/// </summary>
27+
[Obsolete("Use ValidateAsync")]
28+
public static void Validate(this ICertificateValidator validator, X509Certificate2 certificate)
29+
{
30+
validator.ValidateAsync(certificate, CancellationToken.None).GetAwaiter().GetResult();
31+
}
32+
33+
/// <summary>
34+
/// Validates a certificate chain.
35+
/// </summary>
36+
[Obsolete("Use ValidateAsync")]
37+
public static void Validate(this ICertificateValidator validator, X509Certificate2Collection certificateChain)
38+
{
39+
validator.ValidateAsync(certificateChain, CancellationToken.None).GetAwaiter().GetResult();
40+
}
41+
}
42+
}

Stack/Opc.Ua.Core/Security/Certificates/EccUtils.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1120,7 +1120,7 @@ private ArraySegment<byte> VerifyHeaderForEcc(
11201120
}
11211121

11221122
// validate the sender.
1123-
Validator?.Validate(senderCertificateChain);
1123+
Validator?.ValidateAsync(senderCertificateChain, default).GetAwaiter().GetResult();
11241124
}
11251125

11261126
// extract the send certificate and any chain.

0 commit comments

Comments
 (0)