我通常制作免费的windows应用程序,现在我想对它们进行数字签名。这样用户就可以确定它来自我。但是,与其购买代码签名证书,我还以为我可以创建自己的证书。但是,再一次,如果我能创建,那么任何人都可以创建与我的相同的信息。然而,我并不真正理解这一切是如何在最终用户中工作的。
假设我的应用程序中有一个字符串,并且我对它进行了数字签名。但是后来另一个人改变了这个字符串,他用和我一样的公司名称创建了自己的证书,然后签了名。最终用户如何知道这是他的,而不是我的。还是它不是这样工作的?
据我所知,在创建自己的证书时,需要在某种存储中添加它,以便Windows能够识别它?这意味着,如果我创建自己的证书,所有最终用户都需要在他们的计算机中添加我的证书?如果这是真的,那么我如何确定,如果我购买了证书,它将在用户端可用。如果它不在那里呢?
发布于 2014-10-30 05:17:30
为了告诉最终用户您是应用程序的实际所有者,您必须从可信的第三方(Windows也信任的一方)那里购买证书。这些第三方称为证书颁发机构(CA)。下面是从CA获得证书(根据MSDN)从CA获得证书(根据MSDN)的方法。
最终用户是如何从他而不是我那里知道的。还是它不是这样工作的?
现在,CA的职责之一是在颁发证书之前验证您的身份。因此,任何“其他人”都不能从CA获得有效的身份证书。您的证书由Windows通过称为信任链验证的过程进行验证。您可以找到有关流程这里这里的更多详细信息。
据我所知,在创建自己的证书时,需要在某种存储中添加它,以便Windows能够识别它?
我认为您在这里讨论的商店是微软的证书存储技术,它基本上用于存储所有证书,这样您就可以在签名时选择它们。此外,您也不必担心证书在最终用户中的可用性。由于您的证书是由CA (CA信任您)和Microsoft信任证书颁发机构和最终用户信任Microsoft签署的,因此用户将不会遇到识别代码属于您的问题。
发布于 2014-10-30 15:17:59
代码签名的目的是证明该程序来自特定的、可能是可靠的源。通常,基于CA的证书确保某些身份验证已经完成,因此您对代码来自签名人的信任程度相当高。
您可以自行签名,这仍将证明它是由私钥持有人释放的,该私钥对应于它所签署的公钥,然而,没有独立的身份验证,因此它只对验证同一个人产生了两个不同的程序是有用的。
其他人可以使用相同的细节制作类似的证书,但是他们不会拥有您的私钥,并且证书的指纹将不匹配。你的用户不应该信任自签署证书的身份信息,他们应该知道,他们从你那里得到的最后一个程序与他们从你那里得到的新程序相匹配,所以如果第一个程序实际上是你的,那么第二个程序也是。
在不损害您的私钥(只有您有)的情况下,攻击者无法匹配您签名的拇指指纹,因此它们无法真正地将您模拟为警报用户。
也就是说,您的普通用户很可能不承认这一事实,并且只会信任证书提供的任何内容,即使它有不同的拇指指纹。这就是为什么如果您想要这样做的话,确实值得从CA获得代码签名证书。
你可以从一些比较便宜的can那里买到一个非常便宜的。就我个人而言,我是通过StartSSL获得的。这是60美元来验证我的身份,在那之后,我可以以我的名义颁发任意数量的SSL证书和S/Mime证书,并以我的名义获得一份代码签名证书。
https://security.stackexchange.com/questions/71962
复制相似问题