private static bool CheckApplicationInstanceCertificate(
ApplicationConfiguration configuration,
X509Certificate2 certificate,
bool silent,
ushort minimumKeySize)
{
if (certificate == null)
{
return false;
}
Utils.Trace(Utils.TraceMasks.Information, "Checking application instance certificate. {0}", certificate.Subject);
// validate certificate.
configuration.CertificateValidator.Validate(certificate);
// check key size.
if (minimumKeySize > certificate.PublicKey.Key.KeySize)
{
bool valid = false;
string message = Utils.Format(
"The key size ({0}) in the certificate is less than the minimum provided ({1}). Update certificate?",
certificate.PublicKey.Key.KeySize,
minimumKeySize);
if (!silent)
{
if (MessageBox.Show(message, configuration.ApplicationName, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes)
{
valid = true;
}
}
Utils.Trace(message);
if (!valid)
{
return false;
}
}
// check domains.
if (configuration.ApplicationType != ApplicationType.Client)
{
if (!CheckDomainsInCertificate(configuration, certificate, silent))
{
return false;
}
}
// update uri.
string applicationUri = Utils.GetApplicationUriFromCertficate(certificate);
if (String.IsNullOrEmpty(applicationUri))
{
bool valid = false;
string message = "The Application URI is not specified in the certificate. Update certificate?";
if (!silent)
{
if (MessageBox.Show(message, configuration.ApplicationName, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes)
{
valid = true;
}
}
Utils.Trace(message);
if (!valid)
{
return false;
}
}
// update configuration.
configuration.ApplicationUri = applicationUri;
configuration.SecurityConfiguration.ApplicationCertificate.Certificate = certificate;
return true;
}