diff --git a/src/Servers/Kestrel/Core/src/Internal/LoggerExtensions.cs b/src/Servers/Kestrel/Core/src/Internal/LoggerExtensions.cs index 8266eb8c334e..baa0c085d0a1 100644 --- a/src/Servers/Kestrel/Core/src/Internal/LoggerExtensions.cs +++ b/src/Servers/Kestrel/Core/src/Internal/LoggerExtensions.cs @@ -37,4 +37,7 @@ internal static partial class LoggerExtensions [LoggerMessage(7, LogLevel.Error, "The certificate key file at '{CertificateKeyFilePath}' can not be found, contains malformed data or does not contain a PEM encoded key in PKCS8 format.", EventName = "MissingOrInvalidCertificateKeyFile")] public static partial void FailedToLoadCertificateKey(this ILogger logger, string certificateKeyFilePath); + + [LoggerMessage(8, LogLevel.Warning, "The ASP.NET Core developer certificate is not trusted. For information about trusting the ASP.NET Core developer certificate, see https://aka.ms/aspnet/https-trust-dev-cert.", EventName = "DeveloperCertificateNotTrusted")] + public static partial void DeveloperCertificateNotTrusted(this ILogger logger); } diff --git a/src/Servers/Kestrel/Core/src/KestrelServerOptions.cs b/src/Servers/Kestrel/Core/src/KestrelServerOptions.cs index 4575b3e77c2f..84e274202575 100644 --- a/src/Servers/Kestrel/Core/src/KestrelServerOptions.cs +++ b/src/Servers/Kestrel/Core/src/KestrelServerOptions.cs @@ -295,6 +295,11 @@ private void EnsureDefaultCert() } logger.LocatedDevelopmentCertificate(DefaultCertificate); + + if (!CertificateManager.Instance.IsTrusted(DefaultCertificate)) + { + logger.DeveloperCertificateNotTrusted(); + } } else { diff --git a/src/Shared/CertificateGeneration/WindowsCertificateManager.cs b/src/Shared/CertificateGeneration/WindowsCertificateManager.cs index 2692ef95886e..69f57066438b 100644 --- a/src/Shared/CertificateGeneration/WindowsCertificateManager.cs +++ b/src/Shared/CertificateGeneration/WindowsCertificateManager.cs @@ -41,7 +41,6 @@ protected override bool IsExportable(X509Certificate2 c) internal override CheckCertificateStateResult CheckCertificateState(X509Certificate2 candidate, bool interactive) { - // Return true as we don't perform any check. return new CheckCertificateStateResult(true, null); }