自建时间戳服务器只需要一张自签名的时间戳证书和对应的私钥和证书链。时间戳证书必须是X509v3证书,包含标记critical的ExtendedKeyUsage属性,ExtKU只允许证书用于时间戳签名。证书文件如果不是自签名的,则还需要包含证书链。子证书在最上面,CA证书在最下面,就像部署SSL证书链那样操作。私钥文件必须使用PKCS1编码保存,PKCS8无法识别。Github和Release中都有从我PKI中签发出的时间戳证书,可以作为一个证书的样板。虽然我的证书默认不受信,但是我还是不希望你们滥用它。本地时间戳服务器的地址是 http://local/TSA/ 注意!这个Demo真的只是一个本地的服务,不能作为广泛使用的时间戳服务器。因为我设置了只能从local访问,局域网内其他电脑访问不到这个时间戳服务。甚至用127.0.0.1或者::1都不可以!Demo可以和IIS共用80端口,如果有Apache或者Nginx这类服务器绑定了80端口,那么Demo就无常启动,表现为要求以管理员身份运行。
程序使用HttpListener组件实现简单的HTTP服务,因此必须要求以管理员身份运行程序成功运行后,这个地址支持 Authenticode 和 RFC3161 时间戳,也就是说,在微软signtool中使用 /t
自定义时间的话,就是在地址后面加上希望的时间(UTC时间,需要转换时区)。格式为yyyy-MM-dd'T'HH:mm:ss北京时间是UTC+8,所以地址后面的时间需要减掉8小时才能变成UTC时间。举几个例子:北京时间 2011-04-01 08:00:00,对应的时间戳地址是 http://local/TSA/2011-04-01T00:00:00北京时间 2019-03-10 10:25:34,对应的时间戳地址是 http://local/TSA/2019-03-10T02:25:34然后打时间戳就用微软的signtool,命令为 【signtool timestamp /t