2011-06-29 24 views
2

我们有一个我们创建的实用程序来签署我们的XBAP清单文件。这是它执行以下代码:Authenticode代码签名非常慢

cert = new X509Certificate2(certFilePath, password, X509KeyStorageFlags.MachineKeySet); 
SecurityUtilities.SignFile(cert, null, manifest.SourcePath); 

SignFile方法需要超过两分钟才能完成。我们以前使用Thawte authenticode证书签署我们的清单。切换到VeriSign后,此问题开始出现。另外,当Visual Studio在构建过程中签署XBAP清单时,通常需要7到9分钟才能完成。

我试过把私钥放在本地计算机商店。我已经尝试在中间证书颁发机构存储中放入中级VeriSign代码签名证书。

有没有人遇到过这种情况和/或有什么想法来解决这个问题?

回答

1

我相信我的问题是由执行此代码的服务器上缺少互联网访问引起的。使用数据包分析器,我注意到在签署应用程序和/或Windows试图访问威瑞信的certificate revocation lists(CRL)和它的Online Certificate status Protocol(OCSP)。这些行动已经超时。此代码签名发生不止一次,因此导致延迟时间更长。允许通过火灾访问威瑞信应该解决这个问题。

2

我向微软的ClickOnce家伙询问了你的问题(尽管它不是关于C/O本身)。他说,如果你在打印时间戳证书,它可能会尝试连接到时间戳服务器,这可能会减慢速度。您可以在项目的其中一个选项卡中的Visual Studio中指定它,并在签名时使用它。

0

实际上,除了连接互联网并检查CRL之外,您还需要在服务器上安装证书。我们有一台服务器存在类似的问题。这并不需要一分钟或两分钟时间来执行SignFile方法,但每次通话需要10秒钟,并且需要20-30秒才能完成。在我安装了证书之后,这个方法现在每次调用需要大约二百分之一秒...因此,对方法的两个或三个调用需要几秒钟的时间。