Skip to content
Merged
Show file tree
Hide file tree
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
65 changes: 9 additions & 56 deletions Libraries/Opc.Ua.Gds.Server.Common/CertificateGroup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -344,9 +344,7 @@ public virtual Task VerifySigningRequestAsync(
{
try
{
var pkcs10CertificationRequest
= new Org.BouncyCastle.Pkcs.Pkcs10CertificationRequest(
certificateRequest);
var pkcs10CertificationRequest = new Pkcs10CertificationRequest(certificateRequest);

if (!pkcs10CertificationRequest.Verify())
{
Expand All @@ -355,9 +353,8 @@ var pkcs10CertificationRequest
"CSR signature invalid.");
}

Org.BouncyCastle.Asn1.Pkcs.CertificationRequestInfo info =
pkcs10CertificationRequest.GetCertificationRequestInfo();
X509SubjectAltNameExtension altNameExtension = GetAltNameExtensionFromCSRInfo(info);
X509SubjectAltNameExtension altNameExtension =
Pkcs10Utils.GetSubjectAltNameExtension(pkcs10CertificationRequest.Attributes);
if (altNameExtension != null &&
altNameExtension.Uris.Count > 0 &&
!altNameExtension.Uris.Contains(application.ApplicationUri))
Expand All @@ -383,9 +380,7 @@ public virtual async Task<X509Certificate2> SigningRequestAsync(
{
try
{
var pkcs10CertificationRequest
= new Org.BouncyCastle.Pkcs.Pkcs10CertificationRequest(
certificateRequest);
var pkcs10CertificationRequest = new Pkcs10CertificationRequest(certificateRequest);

if (!pkcs10CertificationRequest.Verify())
{
Expand All @@ -394,9 +389,8 @@ var pkcs10CertificationRequest
"CSR signature invalid.");
}

Org.BouncyCastle.Asn1.Pkcs.CertificationRequestInfo info =
pkcs10CertificationRequest.GetCertificationRequestInfo();
X509SubjectAltNameExtension altNameExtension = GetAltNameExtensionFromCSRInfo(info);
X509SubjectAltNameExtension altNameExtension =
Pkcs10Utils.GetSubjectAltNameExtension(pkcs10CertificationRequest.Attributes);
if (altNameExtension != null)
{
if (altNameExtension.Uris.Count > 0 &&
Expand Down Expand Up @@ -433,7 +427,7 @@ var pkcs10CertificationRequest
m_telemetry,
ct)
.ConfigureAwait(false);
var subjectName = new X500DistinguishedName(info.Subject.GetEncoded());
var subjectName = pkcs10CertificationRequest.Subject;

ICertificateBuilder builder = CertificateBuilder
.Create(subjectName)
Expand All @@ -445,13 +439,13 @@ var pkcs10CertificationRequest
return TryGetECCCurve(certificateType, out ECCurve curve)
? builder
.SetIssuer(signingKey)
.SetECDsaPublicKey(info.SubjectPublicKeyInfo.GetEncoded())
.SetECDsaPublicKey(pkcs10CertificationRequest.SubjectPublicKeyInfo)
.CreateForECDsa()
: builder
.SetHashAlgorithm(X509Utils.GetRSAHashAlgorithmName(
Configuration.DefaultCertificateHashSize))
.SetIssuer(signingKey)
.SetRSAPublicKey(info.SubjectPublicKeyInfo.GetEncoded())
.SetRSAPublicKey(pkcs10CertificationRequest.SubjectPublicKeyInfo)
.CreateForRSA();
}
catch (Exception ex) when (ex is not ServiceResultException)
Expand Down Expand Up @@ -766,47 +760,6 @@ X509CRL crl in await authorityStore
}
}

protected X509SubjectAltNameExtension GetAltNameExtensionFromCSRInfo(
Org.BouncyCastle.Asn1.Pkcs.CertificationRequestInfo info)
{
try
{
for (int i = 0; i < info.Attributes.Count; i++)
{
var sequence = Org.BouncyCastle.Asn1.Asn1Sequence
.GetInstance(info.Attributes[i].ToAsn1Object());
var oid = Org.BouncyCastle.Asn1.DerObjectIdentifier
.GetInstance(sequence[0].ToAsn1Object());
if (oid.Equals(
Org.BouncyCastle.Asn1.Pkcs.PkcsObjectIdentifiers.Pkcs9AtExtensionRequest))
{
var extensionInstance = Org.BouncyCastle.Asn1.Asn1Set
.GetInstance(sequence[1]);
var extensionSequence = Org.BouncyCastle.Asn1.Asn1Sequence
.GetInstance(extensionInstance[0]);
var extensions = Org.BouncyCastle.Asn1.X509.X509Extensions
.GetInstance(extensionSequence);
Org.BouncyCastle.Asn1.X509.X509Extension extension = extensions
.GetExtension(
Org.BouncyCastle.Asn1.X509.X509Extensions.SubjectAlternativeName);
var asnEncodedAltNameExtension = new AsnEncodedData(
Org.BouncyCastle.Asn1.X509.X509Extensions.SubjectAlternativeName
.ToString(),
extension.Value.GetOctets());
return new X509SubjectAltNameExtension(
asnEncodedAltNameExtension,
extension.IsCritical);
}
}
}
catch
{
throw new ServiceResultException(
StatusCodes.BadInvalidArgument,
"CSR altNameExtension invalid.");
}
return null;
}

private readonly ITelemetryContext m_telemetry;
private readonly ILogger m_logger;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,9 @@
<ItemGroup>
<EmbeddedResource Include="Model\Opc.Ua.Gds.PredefinedNodes.uanodes" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="BouncyCastle.Cryptography" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Stack\Opc.Ua.Core\Opc.Ua.Core.csproj" />
<ProjectReference Include="..\Opc.Ua.Security.Certificates\Opc.Ua.Security.Certificates.csproj" />
<ProjectReference Include="..\Opc.Ua.Server\Opc.Ua.Server.csproj" />
</ItemGroup>
</Project>
Loading
Loading