common/Ui/SiemensSPS/UAClientCertForm.cs
2026-04-23 17:50:07 +02:00

93 lines
3.4 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Security;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using Opc.Ua;
using Opc.Ua.Client;
namespace Xylem.Common.Ui.Siemens.UAClient1500Demo
{
public partial class UAClientCertForm : Form
{
/// <summary>
/// Form Construction
/// </summary>
#region Construction
public UAClientCertForm(CertificateValidationEventArgs e)
{
InitializeComponent();
eventArgs = e;
//Get certificate meta data
String[] row1 = new String[] { "Issuer Info", eventArgs.Certificate.IssuerName.Name };
String[] row2 = new String[] { "Valid From", eventArgs.Certificate.NotBefore.ToString() };
String[] row3 = new String[] { "Valit To", eventArgs.Certificate.NotAfter.ToString() };
String[] row4 = new String[] { "Serial Number", eventArgs.Certificate.SerialNumber };
String[] row5 = new String[] { "Signature Algorithm", eventArgs.Certificate.SignatureAlgorithm.FriendlyName};
String[] row6 = new String[] { "Cipher Strength", eventArgs.Certificate.PublicKey.Key.KeySize.ToString()};
String[] row7 = new String[] { "Thumbprint", eventArgs.Certificate.Thumbprint};
String[] row8 = new String[] { "URI", eventArgs.Certificate.GetNameInfo(X509NameType.UrlName, false) };
String[] row9 = new String[] { "Subject Alternative Name", "" };
foreach (X509Extension ext in eventArgs.Certificate.Extensions)
{
AsnEncodedData asnData = new AsnEncodedData(ext.Oid, ext.RawData);
String tempString = asnData.Format(true);
if (tempString.Contains("URL") || tempString.Contains("IP") || tempString.Contains("DNS"))
{
row9 = new String[] { "Subject Alternative Name", tempString };
}
}
Object[] rows = new Object[] { row1, row2, row3, row4, row5, row6, row7, row8, row9};
foreach (String[] rowArray in rows)
{
certGridView.Rows.Add(rowArray);
}
}
#endregion
/// <summary>
/// Properties of this class
/// </summary>
#region Properties
/// <summary>
/// Keeps a session with an UA server.
/// </summary>
CertificateValidationEventArgs eventArgs = null;
#endregion
/// <summary>
/// Event handlers called by the UI
/// </summary>
#region UserInteractionsHandlers
private void acceptButton_Click(Object sender, EventArgs e)
{
eventArgs.Accept = true;
if (permaCheckBox.Checked)
{
X509Store store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadWrite);
store.Add(eventArgs.Certificate);
store.Close();
}
Close();
}
private void rejectButton_Click(Object sender, EventArgs e)
{
eventArgs.Accept = false;
Close();
}
#endregion
}
}