C# GetExpirationDateString() 以短日期格式返回数据创建问题

C# GetExpirationDateString() returning data in short date format creating issue

我必须使用以下代码检查并确保证书未过期:

if (DateTime.Parse(cert.GetExpirationDateString()) <= DateTime.Now)
{
     _logger.Log(LogLevel.Error, "Chain Certificate is Expired");
     return false;
} 

cert 是 .net 的 X509Certificate class 的实例。

我面临的问题是GetExpirationDateString函数以字符串格式给出到期日期(这取决于当前文化的短日期格式)

如果我机器的短日期格式是DD-MM-YY它returns到期日期21-12-203021-12-30,DateTime.Parse函数转换301930(如果到期年份 >30)。

有什么方法可以让我始终以 dd/mm/yyyy 格式获取证书到期以避免此问题?

字符串表示形式年份 30 将始终默认转换为 1930,并且在解析 DateTime 时永远不会转换为 2030,无论您如何尝试。你最好的选择是按照@Glorin 的建议去做并使用 X509Certificate2. This type has a constructor that takes an instance of X509Certificate。或者,您可以使用其他构造函数之一生成。这是基于您提供的内容的代码示例:

var cert2 = new X509Certificate2(cert);
if(cert2.NotAfter <= DateTime.Now)
{
     _logger.Log(LogLevel.Error, "Chain Certificate is Expired");
     return false;
} 

你可以试试这个(因为我说的是法语,你的格式可能是 MM/dd/yyyy):

DateTime dt = DateTime.ParseExact(item.GetExpirationDateString(), "dd/MM/yyyy hh:mm:ss", CultureInfo.InvariantCulture);
string s = dt.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
Console.WriteLine(s);