代码签名中的时间戳有啥用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码签名中的时间戳有啥用?相关的知识,希望对你有一定的参考价值。
时间戳会一直留在软件上的签名,在代码签名证书过期后,保证软件仍旧被操作系统或其他平台兼容,并能正常运行。当签名被检验时,时间戳会允许系统检查签名的有效性,而不是签名时间,或软件运行的当前时间。如果没有时间戳,签名就会根据当前日期进行检测。如果开发者的软件是几年前分发的,当其代码签名证书过期时,该签名就不再有效。那么用户在运行该软件时,就会受到平台的拦截运行。
每次用户运行时,系统都会检查可执行文件上的签名。这意味着如果软件的代码签名证书过期并且没有时间戳的话,软件将突然停止为所有用户工作。对于大多数软件开发者说来,都希望其开发的软件能够被用户长期使用。因此代码签名证书的时间戳具有重要的功能,因为它可确保软件能长期运行。
时间戳本身是由CA签名并加以保护,使其不受篡改或欺骗以及密码保护。在Windows上,如果软件提供代码签名证书的CA不受信任,时间戳还可确保签名保持有效。
参考技术A 代码签名证书的有效日期是1~3年,为了避免代码签名证书到期后需要重签软件和重新发布,一般会有一个免费时间戳的服务,这样当您对代码签名时,代码产生的哈希值将发送给CA机构时间戳服务器进行时间戳反签名。所以说,当用户下载签名代码后,IE浏览器将进行鉴别:
(1) 用已经吊销的代码签名证书签名的代码不会被信任;
(2) 用有效的代码签名证书签名的代码,即使代码签名证书已经到被吊销,但代码仍然是可以信任的。这意味着您不用担心代码签名证书吊销后需要重新签名代码。
时间戳服务是代码签名证书免费配套服务,是为了方便软件开发商可以不用担心由于代码签名证书过期而影响在有效期内已经签名的代码的正常的使用,也就是说,在代码签名证书有效期内签名的代码永远不会过期。 参考技术B 为了避免签名证书到期后需要重签软件和重新发布, 必须使用提供的时间戳服务。当您对代码签名时,代码产生的哈希值将发送给时间戳服务器进行时间戳反签名。这样,当用户下载签名代码后, IE浏览器将进行鉴别:
(1) 用已经吊销的代码签名证书签名的代码不会被信任;
(2) 用有效的代码签名证书签名的代码,即使代码签名证书已经到被吊销,但代码仍然是可以信任的。这意味着您不用担心代码签名证书吊销后需要重新签名代码。
时间戳服务是代码签名证书配套服务,是为了方便软件开发商可以不用担心由于代码签名证书过期而影响在有效期内已经签名的代码的正常的使用,也就是说,在代码签名证书有效期内签名的代码永远不会过期。本回答被提问者采纳
异步任务有啥用? [关闭]
【中文标题】异步任务有啥用? [关闭]【英文标题】:What is the use of Task with async? [closed]异步任务有什么用? [关闭] 【发布时间】:2020-12-26 17:12:19 【问题描述】:如果我不在异步方法中使用 Task 怎么办?我进行了很多搜索,但能够理解为什么我们将Task
与async
一起使用。请提出一些建议,因为两者都是异步的。提前致谢。
async
Task
签名示例:
//Controller with async and task
public async Task<IActionResult> CreateNewBug([FromBody] BugTrackerRequest bugTrackerRequest)
if (ModelState.IsValid)
var Request = await _projectDetails.CreateNewBug(bugTrackerRequest);
if (Request > 0)
return Ok("Success");
return StatusCode(500, new Message = "Something went wrong" );
【问题讨论】:
请付出足够的努力,以便可以阅读代码。另外,你把enter code here
和**strong text**
放在随机的地方,请把它们也去掉。总体而言,您根本不清楚您在问什么
@Camilo 很抱歉给您带来不便,下次会出现一些打字问题,我们会确保相同。
没关系,你可以随时edit你的问题来改进它
【参考方案1】:
如果我不在异步方法中使用 Task 怎么办?
嗯,这是设计使然。
如果你想使用async
,你有一组有效返回类型的限制*:
void
Task
Task<T>
task-like type
IAsyncEnumerable<T>
IAsyncEnumerator<T>
* 此处省略 lambda 和异常方法。
其他的都是无效的。而void
被认为是不好的做法。
例如:
public async int DoIt()
会导致这个错误:
错误 CS1983 异步方法的返回类型必须是 void、Task、Task、类似任务的类型、IAsyncEnumerable 或 IAsyncEnumerator
另外,async
修饰符本身并没有多大作用。我认为这是一个普遍的误解。
它不会使您的代码“异步”它是任务的组合,与 await
关键字一起允许您异步执行任务但随后以后续方式继续 - 这就是 @987654333 @ 构造用于。
我强烈建议您阅读先生。 Cleary 关于该主题的博客:
https://blog.stephencleary.com/2012/02/async-and-await.html
正如他所说:
“async”关键字在该方法中启用“await”关键字并更改方法结果的处理方式。这就是 async 关键字的全部作用!它不会在线程池线程上运行此方法,也不会执行任何其他类型的魔法。 async 关键字只启用 await 关键字(并管理方法结果)。
正如评论:如果你想使用 await,你只需要 async。只有在异步方法之后需要执行某些操作时才使用 await。
另外:任务可能是异步的,但并非必须如此。为简单起见,让我们在以下示例中假设它们是:
一些例子:
// no async, yet possibly asynchronous.
// Task can be returned directly, it's still asynchronous.
public Task<int> ProcessData()
return _dbContext.SaveChangesAsync();
// no async, yet possibly asynchronous.
// returning the task directly
public async Task<int> ProcessData()
var result = await _dbContext.SaveChangesAsync();
//await needed if you want to continue here after the task is completed.
if (result < 1)
throw new ValidationException("should be higher then 1");
return result;
以下 2 个示例未添加任何内容和/或无效:
// returning the task directly
public Task<int> ProcessData()
//ERROR: missing async keyword
var result = await _dbContext.SaveChangesAsync();
return result;
// returning the task directly
public async Task<int> ProcessData() //WARNING: missing await keyword
//WARNING: missing await keyword
return _dbContext.SaveChangesAsync();
【讨论】:
所以你的意思是说如果我使用异步然后必须使用任务来获取输出也是一个好习惯,对吧? .....谢谢!! 基本上:如果你想使用await
,你只需要async
。如果您需要在异步方法之后完成某些操作,则仅使用await
。以上是关于代码签名中的时间戳有啥用?的主要内容,如果未能解决你的问题,请参考以下文章