/// <summary> /// 嘗試存取現有憑證,如過期則重新取得憑證 /// </summary> /// <param name="options">Kestrel伺服器監聽選項實例</param> /// <param name="savePassword">憑證儲存密碼</param> /// <param name="email">電子郵件</param> /// <param name="domains">網域</param> /// <returns>可等侯程序</returns> private static async Task UseLetsEncryptAsyncBase(this ListenOptions options, string savePassword, string email, params string[] domains) { if (File.Exists(CertificatePath)) { var cert = new X509Certificate2(CertificatePath, savePassword); if (cert.NotAfter > DateTime.UtcNow) { options.UseHttps(CertificatePath, savePassword); cert.Dispose(); return; } else { cert.Dispose(); } } var pfxBinary = await options.CreateX509BinaryByLetsEncryptAsync(savePassword, email, domains); if (savePassword == null) { options.UseHttps(new X509Certificate2(pfxBinary)); } else { File.WriteAllBytes(CertificatePath, pfxBinary); options.UseHttps(CertificatePath, savePassword); } }
/// <summary> /// 使用Let's Encrypt服務產生X509憑證 /// </summary> /// <param name="options">Kestrel伺服器監聽選項實例</param> /// <param name="savePassword">憑證儲存密碼</param> /// <param name="email">電子郵件</param> /// <param name="domains">網域</param> /// <returns>X509憑證二進制原始資料</returns> public static byte[] CreateX509BinaryByLetsEncrypt(this ListenOptions options, string savePassword, string email, params string[] domains) { return(options.CreateX509BinaryByLetsEncryptAsync(savePassword, email, domains).GetAwaiter().GetResult()); }
/// <summary> /// 使用Let's Encrypt服務產生X509憑證 /// </summary> /// <param name="options">Kestrel伺服器監聽選項實例</param> /// <param name="savePassword">憑證儲存密碼</param> /// <param name="email">電子郵件</param> /// <param name="domains">網域</param> /// <returns>可等候程序之X509憑證</returns> public static async Task <X509Certificate2> CreateX509ByLetsEncryptAsync(this ListenOptions options, string savePassword, string email, params string[] domains) { return(new X509Certificate2(await options.CreateX509BinaryByLetsEncryptAsync(savePassword, email, domains), savePassword)); }