diff --git a/Libraries/Opc.Ua.Security.Certificates/X509Certificate/X509PfxUtils.cs b/Libraries/Opc.Ua.Security.Certificates/X509Certificate/X509PfxUtils.cs index 34a5f82544..6b0c2e1a98 100644 --- a/Libraries/Opc.Ua.Security.Certificates/X509Certificate/X509PfxUtils.cs +++ b/Libraries/Opc.Ua.Security.Certificates/X509Certificate/X509PfxUtils.cs @@ -193,8 +193,8 @@ namespace Opc.Ua.Security.Certificates byte[] testBlock = new byte[TestBlockSize]; var rnd = new Random(); rnd.NextBytes(testBlock); - byte[] signature = rsaPrivateKey.SignData(testBlock, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); - return rsaPublicKey.VerifyData(testBlock, signature, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); + byte[] signature = rsaPrivateKey.SignData(testBlock, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); + return rsaPublicKey.VerifyData(testBlock, signature, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); } #if ECC_SUPPORT diff --git a/Stack/Opc.Ua.Core/Security/Certificates/RsaUtils.cs b/Stack/Opc.Ua.Core/Security/Certificates/RsaUtils.cs index 68fb7d7086..03d2550b9b 100644 --- a/Stack/Opc.Ua.Core/Security/Certificates/RsaUtils.cs +++ b/Stack/Opc.Ua.Core/Security/Certificates/RsaUtils.cs @@ -330,8 +330,8 @@ namespace Opc.Ua int blockSize = 0x10; byte[] testBlock = new byte[blockSize]; randomSource.NextBytes(testBlock, 0, blockSize); - byte[] signature = privateKey.SignData(testBlock, HashAlgorithmName.SHA1, RSASignaturePadding.Pss); - return publicKey.VerifyData(testBlock, signature, HashAlgorithmName.SHA1, RSASignaturePadding.Pss); + byte[] signature = privateKey.SignData(testBlock, HashAlgorithmName.SHA256, RSASignaturePadding.Pss); + return publicKey.VerifyData(testBlock, signature, HashAlgorithmName.SHA256, RSASignaturePadding.Pss); } catch { diff --git a/Tests/Opc.Ua.Security.Certificates.Tests/CertificateTestsForECDsa.cs b/Tests/Opc.Ua.Security.Certificates.Tests/CertificateTestsForECDsa.cs index e7132e38b2..f89f83a076 100644 --- a/Tests/Opc.Ua.Security.Certificates.Tests/CertificateTestsForECDsa.cs +++ b/Tests/Opc.Ua.Security.Certificates.Tests/CertificateTestsForECDsa.cs @@ -378,8 +378,10 @@ namespace Opc.Ua.Security.Certificates.Tests PEMWriter.ExportCertificateAsPEM(certificate); if (certificate.HasPrivateKey) { +#if !NETFRAMEWORK PEMWriter.ExportPrivateKeyAsPEM(certificate, password); PEMWriter.ExportECDsaPrivateKeyAsPEM(certificate); +#endif } } #endregion diff --git a/Tests/Opc.Ua.Security.Certificates.Tests/CertificateTestsForRSA.cs b/Tests/Opc.Ua.Security.Certificates.Tests/CertificateTestsForRSA.cs index 93f89a4ef4..cfc2d18bd0 100644 --- a/Tests/Opc.Ua.Security.Certificates.Tests/CertificateTestsForRSA.cs +++ b/Tests/Opc.Ua.Security.Certificates.Tests/CertificateTestsForRSA.cs @@ -84,9 +84,9 @@ namespace Opc.Ua.Security.Certificates.Tests public void VerifyOneSelfSignedAppCertForAll() { var builder = CertificateBuilder.Create(Subject) - .SetNotBefore(DateTime.Today.AddYears(-1)) - .SetNotAfter(DateTime.Today.AddYears(25)) - .AddExtension(new X509SubjectAltNameExtension("urn:opcfoundation.org:mypc", new string[] { "mypc", "mypc.opcfoundation.org", "192.168.1.100" })); + .SetNotBefore(DateTime.Today.AddYears(-1)) + .SetNotAfter(DateTime.Today.AddYears(25)) + .AddExtension(new X509SubjectAltNameExtension("urn:opcfoundation.org:mypc", new string[] { "mypc", "mypc.opcfoundation.org", "192.168.1.100" })); byte[] previousSerialNumber = null; foreach (var keyHash in KeyHashPairs) { @@ -143,21 +143,30 @@ namespace Opc.Ua.Security.Certificates.Tests [Theory] public void CreateSelfSignedForRSADefaultHashCustomKey( - KeyHashPair keyHashPair + KeyHashPair keyHashPair, + bool signOnly ) { // default cert with custom key - X509Certificate2 cert = CertificateBuilder.Create(Subject) - .SetRSAKeySize(keyHashPair.KeySize) - .CreateForRSA(); + var builder = CertificateBuilder.Create(Subject); + + if (signOnly) + { + // Key usage for sign only + X509KeyUsageFlags keyUsageFlags = X509KeyUsageFlags.KeyEncipherment | X509KeyUsageFlags.DigitalSignature | X509KeyUsageFlags.NonRepudiation; + builder.AddExtension(new X509KeyUsageExtension(keyUsageFlags, true)); + } + + X509Certificate2 cert = builder.SetRSAKeySize(keyHashPair.KeySize).CreateForRSA(); WriteCertificate(cert, $"Default RSA {keyHashPair.KeySize} cert"); + + X509Utils.VerifyRSAKeyPair(cert, cert, true); Assert.AreEqual(Subject, cert.Subject); Assert.AreEqual(keyHashPair.KeySize, cert.GetRSAPublicKey().KeySize); Assert.AreEqual(X509Defaults.HashAlgorithmName, Oids.GetHashAlgorithmName(cert.SignatureAlgorithm.Value)); TestUtils.ValidateSelSignedBasicConstraints(cert); Assert.AreEqual(cert.SubjectName.Name, cert.IssuerName.Name); Assert.AreEqual(cert.SubjectName.RawData, cert.IssuerName.RawData); - X509Utils.VerifyRSAKeyPair(cert, cert, true); Assert.True(X509Utils.VerifySelfSigned(cert)); } diff --git a/Tests/Opc.Ua.Security.Certificates.Tests/Opc.Ua.Security.Certificates.Tests.csproj b/Tests/Opc.Ua.Security.Certificates.Tests/Opc.Ua.Security.Certificates.Tests.csproj index 2a937e9dfd..48c04e98b0 100644 --- a/Tests/Opc.Ua.Security.Certificates.Tests/Opc.Ua.Security.Certificates.Tests.csproj +++ b/Tests/Opc.Ua.Security.Certificates.Tests/Opc.Ua.Security.Certificates.Tests.csproj @@ -1,4 +1,4 @@ - + Exe @@ -15,6 +15,10 @@ $(DefineConstants);ECC_SUPPORT + + $(DefineConstants);ECC_SUPPORT + + $(DefineConstants);ECC_SUPPORT @@ -22,7 +26,11 @@ $(DefineConstants);ECC_SUPPORT - + + + $(DefineConstants);ECC_SUPPORT + +