自签名证书和由认证机构生成的证书有什么区别?

4
我想知道自签名证书和由认证机构生成的证书之间的区别。我可以轻松地为域xyz.com创建自签名证书,那么这个证书和由CA生成的证书有什么区别?
场景假设一个网站xyz.com使用发给它的证书进行保护,并且只能被拥有该证书的客户端访问。
我也可以为xyz.com创建自签名证书,那么我的服务器将如何处理这个伪造的证书?

1
对于那些正在关闭此问题的人,我几乎同意这应该在serverfault.com上发布,但同时开发人员使用PKI时应该知道这些信息。 - Matthew Whited
1
你对谁的身份感兴趣?你是想确定客户端是否是它所声称的那个人,还是想确定服务器是否是它所声称的那个人? - Sami Koivu
5个回答

7
如果CA的证书已经安装在您的浏览器中,则当你的浏览器遇到某个声称由某个CA签名的证书时,它可以验证它确实是由该CA签名的。 CA本身通常在某种方式下验证您的身份,然后签署您的证书。
您的自签名证书只是由您自己的CA签名。没有人验证证书实际上属于它所声称的人。 你 可以 将自己的CA根证书安装到浏览器中。这样,你就不会收到关于证书的烦人警告消息。其他用户通常不会安装您自己的CA根证书,仍将收到警告。

假设在 xyz.com 上有一个安全服务。如果我创建了一个自签名的虚拟证书,颁发给 xyz.com。在这种情况下,我可以期望托管 xyz.com 的服务器会将我的证书检测为无效证书吗? - Ram
@Ram - 服务器并不关心证书;客户端才是关心证书的人。 - GalacticCowboy
这里是有关CA和PKI更多细节的维基页面:http://en.wikipedia.org/wiki/Public_key_infrastructure - Matthew Whited

4

证书本身没有区别。重要的是CA作为可信第三方。也就是说,客户端可能不知道你是谁,但如果他们信任CA并且CA为你背书,那么他们可以信任你。关键不在于证书本身,而在于CA提供的信任链。


2
CA还会对您的身份进行一些验证,因此在使用网站时它们增加了额外的信心水平。自签名证书可能无法在客户端浏览器上获得完整的“挂锁”图标。

1
为了补充其他答案,操作系统预安装了来自Microsoft或其他可信机构的一些根证书。如果您的证书由其中之一签名,则不会显示警告。如果证书是由操作系统不识别的CA签名的,则会显示警告。

0
自签名证书和由CA颁发的证书之间的主要区别在于信任链。如果您签署自己的证书,那么当您或其他人使用它时,他们将必须明确地信任您签署证书的服务器。这样做的方法是将证书添加到浏览器中的“受信任CA根”列表中(即Firefox,或Microsoft的MSIE或Chrome的CAPI存储),或者Java应用程序的cacerts文件中。否则,您的自签名证书将不被信任,并且您将根据该环境中的安全设置(即Java或特定浏览器)收到“警告”或错误消息。
对于由CA签名的证书,如果签署证书的CA或CA的受信任根(签署该CA的证书的根)已经在相关的信任存储中(即浏览器或Java的cacerts文件)中,则不会收到该警告。 Microsoft和Oracle(针对Java)不断更新受信任的CA并管理CRL(证书吊销列表),用于已被破坏或吊销的CA或机构。
通常,这些受信任的CA之一(如verisign,entrust等)会收取$$以签署和发布证书,有效期越长,收费越高。

自签名证书是免费的,可以颁发很长一段时间(虽然不建议这样做)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接