Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
688e2b8
merged security changes
mrsuciu Nov 19, 2025
45b07a2
Tailor SecurityPolicyUri for format expected in s_securityPolicyUriTo…
mrsuciu Nov 20, 2025
cfbebe7
Enhance security policy handling and key computation logic
mrsuciu Nov 21, 2025
0477aba
Merge remote-tracking branch 'mr/eccSecurityChangesMerge'
randy-armstrong Nov 21, 2025
d0c6321
Merge SecurityEnhancements.
randy-armstrong Nov 26, 2025
a579c62
Add support for SessionTransferToken. Removed obsolete SoftwareCertif…
randy-armstrong Nov 27, 2025
e1dd311
Fix NonceLength for None.
randy-armstrong Nov 27, 2025
9ecf7c9
Add support for RSA_DH, more fixes from IOP testings.
randy-armstrong Dec 8, 2025
1ca156c
Finish implementation of SecureChannelEnhancements.
randy-armstrong Dec 11, 2025
a17b881
Merge branch 'master' of https://github.com/OPCFoundation/UA-.NETStan…
randy-armstrong Dec 11, 2025
5dfb991
Merge branch 'master' into secure-channel-enhancements-2025-11
randy-armstrong Dec 11, 2025
67f4b4b
Rename EccUtils.cs to CryptoUtils.cs
randy-armstrong Dec 11, 2025
8528e7a
Address feedback from reviewers.
randy-armstrong Dec 18, 2025
387ad76
Fix CoPilot flagged spelling errors.
randy-armstrong Dec 18, 2025
ee70b5d
Merge branch 'master' into secure-channel-enhancements-2025-11
randy-armstrong Dec 18, 2025
6153098
Rename EccUtils to CryptoUtils
randy-armstrong Dec 18, 2025
e46ff9a
Update version from 1.5.378-preview to 1.5.378
mrsuciu Dec 18, 2025
dc0b110
Fix unit tests.
randy-armstrong Dec 18, 2025
8a06ef9
Merge pull request #3422 from OPCFoundation/mrsuciu-patch-1
mrsuciu Dec 18, 2025
3f5bbe0
Merge remote-tracking branch 'origin/release/1.5.378' into secure-cha…
randy-armstrong Jan 14, 2026
1097329
Merge remote-tracking branch 'origin/master' into secure-channel-enha…
randy-armstrong Jan 14, 2026
e8befb7
Allow SignatureData.Algorithm to be NULL or Empty.
randy-armstrong Jan 16, 2026
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
29 changes: 26 additions & 3 deletions Applications/ConsoleReferenceClient/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@ public static async Task Main(string[] args)
byte[] userpassword = null;
string userCertificateThumbprint = null;
byte[] userCertificatePassword = null;
bool logConsole = false;
bool appLog = false;
bool logConsole = true;
bool appLog = true;
bool fileLog = false;
bool renewCertificate = false;
bool loadTypes = false;
Expand All @@ -94,6 +94,7 @@ public static async Task Main(string[] args)
bool leakChannels = false;
bool forever = false;
bool enableDurableSubscriptions = false;
bool connectAllEndpointDescriptions = true;

var options = new Mono.Options.OptionSet
{
Expand Down Expand Up @@ -264,6 +265,17 @@ public static async Task Main(string[] args)
enableDurableSubscriptions = true;
}
}
},
{
"ca|connectall",
"Connects using all published EndpointDescriptions.",
ca =>
{
if (ca != null)
{
connectAllEndpointDescriptions = true;
}
}
}
};

Expand Down Expand Up @@ -333,7 +345,7 @@ public static async Task Main(string[] args)
logConsole,
fileLog,
appLog,
LogLevel.Information);
LogLevel.Warning);

// delete old certificate
if (renewCertificate)
Expand Down Expand Up @@ -368,6 +380,17 @@ await application.DeleteApplicationInstanceCertificateAsync()
CancellationToken ct = quitCTS.Token;
ManualResetEvent quitEvent = ConsoleUtils.CtrlCHandler(quitCTS);

// handle connect all endpoints test.
if (connectAllEndpointDescriptions)
{
var tester = new SecurityTestClient.RunConnectAll(config, telemetry);

if (await tester.RunAsync(quitEvent, ct).ConfigureAwait(false))
{
return;
}
}

var userIdentity = new UserIdentity();

// set user identity of type username/pw
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,53 +13,53 @@
<ApplicationCertificates>
<CertificateIdentifier>
<StoreType>Directory</StoreType>
<StorePath>%LocalApplicationData%/OPC Foundation/pki/own</StorePath>
<StorePath>../../pki/own</StorePath>
<SubjectName>CN=Quickstart Reference Client, C=US, S=Arizona, O=OPC Foundation, DC=localhost</SubjectName>
<CertificateTypeString>RsaSha256</CertificateTypeString>
</CertificateIdentifier>
<CertificateIdentifier>
<!-- <TypeId>NistP256</TypeId> -->
<StoreType>Directory</StoreType>
<StorePath>%LocalApplicationData%/OPC Foundation/pki/own</StorePath>
<StorePath>../../pki/own</StorePath>
<SubjectName>CN=Quickstart Reference Client, C=US, S=Arizona, O=OPC Foundation, DC=localhost</SubjectName>
<CertificateTypeString>NistP256</CertificateTypeString>
</CertificateIdentifier>
<CertificateIdentifier>
<!-- <TypeId>NistP384</TypeId> -->
<StoreType>Directory</StoreType>
<StorePath>%LocalApplicationData%/OPC Foundation/pki/own</StorePath>
<StorePath>../../pki/own</StorePath>
<SubjectName>CN=Quickstart Reference client, C=US, S=Arizona, O=OPC Foundation, DC=localhost</SubjectName>
<CertificateTypeString>NistP384</CertificateTypeString>
</CertificateIdentifier>
<CertificateIdentifier>
<!-- <TypeId>BrainpoolP256r1</TypeId> -->
<StoreType>Directory</StoreType>
<StorePath>%LocalApplicationData%/OPC Foundation/pki/own</StorePath>
<StorePath>../../pki/own</StorePath>
<SubjectName>CN=Quickstart Reference Client, C=US, S=Arizona, O=OPC Foundation, DC=localhost</SubjectName>
<CertificateTypeString>BrainpoolP256r1</CertificateTypeString>
</CertificateIdentifier>
<CertificateIdentifier>
<!-- <TypeId>BrainpoolP384r1</TypeId> -->
<StoreType>Directory</StoreType>
<StorePath>%LocalApplicationData%/OPC Foundation/pki/own</StorePath>
<StorePath>../../pki/own</StorePath>
<SubjectName>CN=Quickstart Reference Client, C=US, S=Arizona, O=OPC Foundation, DC=localhost</SubjectName>
<CertificateTypeString>BrainpoolP384r1</CertificateTypeString>
</CertificateIdentifier>
</ApplicationCertificates>
<!-- Where the issuer certificate are stored (certificate authorities) -->
<TrustedIssuerCertificates>
<StoreType>Directory</StoreType>
<StorePath>%LocalApplicationData%/OPC Foundation/pki/issuer</StorePath>
<StorePath>../../pki/issuer</StorePath>
</TrustedIssuerCertificates>
<!-- Where the trust list is stored -->
<TrustedPeerCertificates>
<StoreType>Directory</StoreType>
<StorePath>%LocalApplicationData%/OPC Foundation/pki/trusted</StorePath>
<StorePath>../../pki/trusted</StorePath>
</TrustedPeerCertificates>
<!-- The directory used to store invalid certificates for later review by the administrator. -->
<RejectedCertificateStore>
<StoreType>Directory</StoreType>
<StorePath>%LocalApplicationData%/OPC Foundation/pki/rejected</StorePath>
<StorePath>../../pki/rejected</StorePath>
</RejectedCertificateStore>
<MaxRejectedCertificates>5</MaxRejectedCertificates>
<!-- WARNING: The following setting (to automatically accept untrusted certificates) should be used
Expand All @@ -75,12 +75,12 @@
<!-- Where the User issers list is stored-->
<UserIssuerCertificates>
<StoreType>Directory</StoreType>
<StorePath>%LocalApplicationData%/OPC Foundation/pki/userIssuer</StorePath>
<StorePath>../../pki/userIssuer</StorePath>
</UserIssuerCertificates>
<!-- Where the User trust list is stored-->
<TrustedUserCertificates>
<StoreType>Directory</StoreType>
<StorePath>%LocalApplicationData%/OPC Foundation/pki/trustedUser</StorePath>
<StorePath>../../pki/trustedUser</StorePath>
</TrustedUserCertificates>
</SecurityConfiguration>
<TransportConfigurations></TransportConfigurations>
Expand All @@ -92,7 +92,7 @@
<MaxMessageSize>4194304</MaxMessageSize>
<MaxBufferSize>65535</MaxBufferSize>
<ChannelLifetime>300000</ChannelLifetime>
<SecurityTokenLifetime>3600000</SecurityTokenLifetime>
<SecurityTokenLifetime>30000</SecurityTokenLifetime>
</TransportQuotas>
<ClientConfiguration>
<DefaultSessionTimeout>60000</DefaultSessionTimeout>
Expand Down Expand Up @@ -120,7 +120,7 @@
</ClientConfiguration>
<Extensions></Extensions>
<TraceConfiguration>
<OutputFilePath>%LocalApplicationData%/OPC Foundation/Logs/Quickstarts.ReferenceClient.log.txt</OutputFilePath>
<OutputFilePath>./Logs/Quickstarts.ReferenceClient.log.txt</OutputFilePath>
<DeleteOnLoad>true</DeleteOnLoad>
<!-- Show Only Errors -->
<!-- <TraceMasks>1</TraceMasks> -->
Expand Down
Loading
Loading