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 { /// /// Form Construction /// #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 /// /// Properties of this class /// #region Properties /// /// Keeps a session with an UA server. /// CertificateValidationEventArgs eventArgs = null; #endregion /// /// Event handlers called by the UI /// #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 } }