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

sau*_*ats 5 c# datetime date x509certificate

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

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

cert是.net 的X509Certificate类的实例.

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

如果我的机器的短日期格式DD-MM-YY返回到期日21-12-203021-12-30,DateTime.Parse功能转换301930(如果到期年> 30).

dd/mm/yyyy为了避免这个问题,有没有办法让我的格式永远以格式到期?

Igo*_*gor 10

无论您如何尝试,字符串表示年份30将始终默认转换19302030解析DateTime时永远不会转换为.您最好的选择是按照@Glorin的建议并使用X509Certificate2.此类型具有一个构造函数,该构造函数接受X509Certificate的实例.或者,您可以使用其他构造函数之一生成.以下是基于您提供的代码示例:

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

  • 我是唯一一个认为此NotAfter属性像有史以来最差名字的人吗? (2认同)