private static X509Certificate2 CreateCertificateForApplication(InstalledApplication application)
{
// build list of domains.
List<string> domains = new List<string>();
if (application.BaseAddresses != null)
{
foreach (string baseAddress in application.BaseAddresses)
{
Uri uri = Utils.ParseUri(baseAddress);
if (uri != null)
{
string domain = uri.DnsSafeHost;
if (String.Compare(domain, "localhost", StringComparison.OrdinalIgnoreCase) == 0)
{
domain = System.Net.Dns.GetHostName();
}
if (!Utils.FindStringIgnoreCase(domains, domain))
{
domains.Add(domain);
}
}
}
}
// must at least of the localhost.
if (domains.Count == 0)
{
domains.Add(System.Net.Dns.GetHostName());
}
// create the certificate.
X509Certificate2 certificate = Opc.Ua.CertificateFactory.CreateCertificate(
application.ApplicationCertificate.StoreType,
application.ApplicationCertificate.StorePath,
application.ApplicationUri,
application.ApplicationName,
Utils.Format("CN={0}/DC={1}", application.ApplicationName, domains[0]),
domains,
1024,
300);
CertificateIdentifier applicationCertificate = Opc.Ua.Security.SecuredApplication.FromCertificateIdentifier(application.ApplicationCertificate);
return applicationCertificate.LoadPrivateKey(null);
}