【发布时间】:2014-02-10 08:33:24
【问题描述】:
我有一个官方机构颁发的证书用于 SSL 通信,我可以使用同一个证书来签署我的 EXE 或 DLL。
如果不是,用于签署 EXE、DLL 和其他二进制文件的证书的标准是什么?
【问题讨论】:
标签: c# .net ssl code-signing x509certificate
我有一个官方机构颁发的证书用于 SSL 通信,我可以使用同一个证书来签署我的 EXE 或 DLL。
如果不是,用于签署 EXE、DLL 和其他二进制文件的证书的标准是什么?
【问题讨论】:
标签: c# .net ssl code-signing x509certificate
证书通常具有使用约束、基本约束和扩展约束(扩展密钥使用,EKU)。这取决于您可以使用它的那些设置。这些设置可以包括客户端和服务器授权、代码签名(这是您感兴趣的)、是否可以将您的证书用作中间 CA 等。
以下是可能的 EKU 的一个很好的概述:http://javadoc.iaik.tugraz.at/iaik_jce/current/iaik/x509/extensions/extendedkeyusage.html。和基本约束:http://javadoc.iaik.tugraz.at/iaik_jce/current/iaik/x509/extensions/BasicConstraints.html。 Windows 内置的证书查看器 GUI 以人类可读的形式很好地显示了所有这些约束,因此您无需解码 OID 或奇怪的字段名称。
【讨论】:
正如另一个答案中所说,X.509 证书包括 KeyUsage 和 ExtKeyUsage 扩展,它们描述了证书的用途。
出于商业原因和安全原因,大多数(如果不是全部)证书颁发机构不会颁发对 SSL/TLS 和代码签名都有效的证书。
另一方面,如果您使用自签名证书并在您自己的代码中验证此证书,那么没有什么能阻止您生成将 KeyUsage 设置为所需内容的证书并相应地对其进行验证。
【讨论】: