C#程序集数字签名证书过期会产生哪些后果?
C#程序集数字签名证书过期的后果
查看证书过期日期的方法
在Windows中通过“属性”菜单查看C#程序集的“数字签名”标签时,仅能看到数字签名时间戳,无法直接查看证书过期日期,可通过以下代码查询(修正了路径转义问题):
var assembly = Assembly.Load(@"C:\xyz.dll"); var signingCertificate = X509Certificate2.CreateFromSignedFile(assembly.Location); var expiryDate = signingCertificate.NotAfter;
证书过期后的具体影响
证书过期后的行为,取决于你使用的是强命名签名还是Authenticode数字签名:
- 强命名签名场景:强命名的核心作用是验证程序集未被篡改,系统验证强命名时不会检查证书是否过期。只要程序集的签名未被篡改,即使证书过期,程序依然能正常加载运行,不会出现因证书过期导致的报错。
- Authenticode数字签名场景:
- 如果签名时添加了时间戳(就是你在属性里看到的那个):系统验证时会以时间戳记录的签名时刻为准,确认当时证书是否处于有效期内。只要签名时证书有效且时间戳本身有效,哪怕现在证书过期了,程序依然能通过系统的代码签名验证,不会被UAC拦截、杀毒软件标记,也能正常运行。
- 如果签名时没有添加时间戳:当证书过期后,系统会判定签名无效,可能出现的情况包括:运行时弹出“未知发布者”的UAC警告、杀毒软件将程序标记为可疑、企业环境下的组策略或应用控制规则直接阻止程序运行。
- 自定义验证逻辑场景:如果你的代码里主动加入了证书有效期的判断(比如用上述代码获取过期日期后自行校验),那过期后的行为完全由你自己的代码逻辑决定,比如提示用户、终止程序等。
内容的提问来源于stack exchange,提问作者Very Professional Username
相关产品推荐
相关产品推荐

