C#GetExpirationDateString()以短日期格式返回数据,导致问题



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

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

cert是.net.的X509Certificate类的一个实例

我面临的问题是GetExpirationDateString函数以字符串格式(取决于当前区域性的短日期格式)提供到期日期

如果我的机器的短日期格式是DD-MM-YY,它将到期日期21-12-2030返回为21-12-30DateTime.Parse函数将30转换为1930(如果到期年份>30)。

有没有一种方法可以让我总是以dd/mm/yyyy格式获得证书到期,以避免这个问题?

在解析DateTime时,无论您如何尝试,字符串表示年份30都将默认转换为1930,而从不转换为2030。您最好按照@Glorin的建议进行操作,并使用X509Certificate2。此类型具有一个构造函数,该构造函数采用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);

相关内容

  • 没有找到相关文章

最新更新