如果SSL / TLS证书没有真正的签名/ CA,为什么会自签名?

时间:2009-05-16 00:48:14

标签: ssl cryptography ssl-certificate

据我所知,通常SSL(或更确切地说是X.509)证书应该由某个认证机构签署,以确保它是真实的。

在某些情况下,不存在此类签名,例如如果您为测试目的生成证书,或者 认证机构(根证书)。在这些情况下,使用自签名证书。

我的问题:为什么要使用这种奇怪的自签名结构?为什么证书不能简单地没有任何签名?什么包括自签名签名增益?

或者只是因为它在技术上更容易(没有签名的特殊情况)总是在每个证书中都有签名,即使它是无意义的签名?

9 个答案:

答案 0 :(得分:6)

证书有三个主要部分

  1. 身份信息
  2. 公钥
  3. 数字签名
  4. 通过使用私钥加密前两个部分,然后将该加密信息附加到证书的末尾来签署证书。如果您可以使用证书中包含的公钥解密签名,那么您就知道证书是由持有匹配私钥的人签名的。签名将身份信息绑定到公钥。我用我的私钥签署我的证书,这样你只知道我可以阅读你可能用我的公钥加密的邮件。

    现在,除非你真的亲自见过我而且递给我证书,否则你真的不知道身份信息是合法的。证书的最初目的是建立一个信任网络,首先获得你亲自见过的人的证书,然后信任那些有这些人签署的证书的人,然后那些人......

答案 1 :(得分:4)

如果您对证书进行自签名,则向某人证明您实际控制了该签名的密钥 - 即,它是您的证书。

否则,您可以创建一个随机数的公钥,并且符合证书的格式,但不是真正的证书。

答案 2 :(得分:3)

想象一下,您正在建立自己的证书颁发机构,第一个:谁签署您的证书?

了解整个认证过程的方法是将其视为一系列含义:您已向您提供证书。你应该相信吗?您可以信任发行人,也可以查看证书,并同意您信任签名者。如果您不了解签名者,可以将其关注回该签名者的签名者,依此类推。但最终,您将获得自签名证书。

获得证书相对昂贵且可能很复杂,因此有些人直接签署自己的签名机构。由你来决定是否可以信任它们。


有关此问题的一些评论有点愚蠢。您无法在没有签名的情况下签发证书,因为作为有效证书的证书必须具有签名。这就是他们定义的方式。您也可以问为什么在没有指数的情况下不能有浮点数。存在Certs,以便存在一些身份信息的集合以及用于识别发行者以便确定信任的加密机制。如果没有签名,证书的“证书”必不可少的东西就会丢失。


好的,让我们问一些其他问题:

  • 为什么社会安全号码有9位数?为什么你不能拥有5位数的社会安全号码?
  • 为什么邮寄地址有那么愚蠢的邮政编码?
  • 我们真的需要为一个人保留第一个姓氏吗?

让我们再试一次。什么是证书?它是一种数据结构,它将名称绑定到非对称加密密钥的公共端。该结构是“已签名”,这意味着您可以检测是否由签名密钥所有者以外的任何人更改了该结构。因为您可以验证该签名,所以您对证书的真实性有一定程度的信任。因此,有效证书必须具有可验证的签名。

在这种情况下,“信任”意味着您愿意冒险在其他人的权力下无法履行您负责的事情。如果您拥有由Verisign等知名CA签署的证书,则您信任其权力的实体为Verisign;您使用从他们那里以可信赖的方式获得的证书来验证他们是否签署了您正在考虑的证书。

如果您拥有自签名证书,而不是由知名机构签署的证书,那么您说如果您接受证书,您愿意信任自我签名者。您愿意接受的唯一权威是您对自我签名者的直接信任。但是你至少可以确信证书没有损坏,因为你可以验证签名。

所以,现在考虑一个没有任何签名的证书。 (从技术上讲,这被称为“数据项”。)我可能包含名称和公共方面密钥之间的关联,但没有签名,您可以毫无信心地将其修改为方。

看到区别?通过签署的证书,您可以获得双方同意的受信任的第三方。使用自签名证书时,没有第三方,但您可以确信证书未被第三方破坏。只要您信任证书的颁发者,就可以信任它:您可以验证它是由拥有相应密钥另一端的人发布的。

对于未签名的“证书”,您既没有得到受信任的第三方的保证,证明该证书是发给了合适的人,也没有任何保证“证书”一旦发布,就没有被修改由恶意的第三方。这就是为什么按照定义,证书必须具有签名。

答案 3 :(得分:2)

我想这是为了确保您不能“撒谎”证书 - 即,除非私钥持有者同意,否则您无法创建证书。这可以通过CA验证证书所指定的实体是私钥持有者来确保,也可以通过让密钥持有者签署证书本身来确保自签名案例。

答案 4 :(得分:2)

您需要了解RSA加密的工作原理。签名者生成两个加密密钥,一个是私有密钥,一个是公共密钥。它们为您提供公钥,并使用私钥加密数据。拥有公钥后,您就可以验证数据是否由正确的人加密,因为没有其他人拥有其私钥。如果是签名证书,则会有一个信任网,您可以在其中验证相对较少的个人(证书颁发机构)的身份,并且您对第三方的验证信任。根据系统的工作原理,每个证书都必须签名。证书可以由任何人签名,当您不关心签名者的可验证性时,“自签名”证书是最简单的方法。

答案 5 :(得分:1)

两者之间的区别在于谁运行程序来生成证书。一些大公司或一些乔在他的客厅里。整个'签名证书'业务是无稽之谈。证书允许您加密数据,但有大量公司出售您的东西会让您相信这意味着可信赖性和身份。加密并不能保证身份,更重要的是,您可以信任发起人。即使假设他们有100%良好的意图,只需查看新闻。今年有多少大公司遭遇数据泄露?

我自己签署了自己的证书,因此我可以加密我的服务器和任何用户之间的网络流量。我相信所有流量都应该加密,因为没有第三方应该能够看到你做了什么。我相信你应该对隐私有合理的期望。你永远不应该完全信任任何人,特别是任何想要卖给你东西的人。

答案 6 :(得分:1)

证书包含服务器的公钥。自签名证明生成证书的人也拥有私钥。

答案 7 :(得分:1)

证书为您提供有关已签名密钥实体的信息,但它们不会为您提供有关签署密钥的实体的信息。因此,自签名证书至少有一个目的:它们告诉您谁是根密钥的所有者,而无需实现特殊的数据结构。

在我看来,这些东西不应该被称为证书,因为它们具有不同的属性。普通证书不需要安全存储/传输。如果攻击者设法用伪造的证书替换合法证书,那么证书验证应该失败。自签名证书也是如此。如果攻击者有机会替换自签名证书,他/她可以将该证书替换为使用其私钥签名的证书,并且无法通过验证证书来检测伪造证书。

另请注意,自签名证书的逻辑有些倒退。您要做的第一件事就是相信某些公钥是真实的。如果您这样做,您可以了解公钥属于谁。通常人们会想要反过来。您确定可以信任实体。然后,您尝试学习属于该实体的公钥。

在我看来,应该放弃自签名证书。例如,我更喜欢让Microsoft签署的Internet Explorer中的所有根密钥。毕竟,Microsoft确认证书属于合法CA,并且Microsoft决定普通用户应该能够信任这些CA.现在,如果我担心有人篡改我的证书,我所要做的就是检查微软的密钥是否仍属于他们,然后验证每个证书上的签名。

答案 8 :(得分:1)

证书的目的是验证身份。证书的签名者向证书的所有接收者断言他们已经验证了身份信息的真实性,并且它与证书中包含的公钥有关。如果证书未签名,则没有身份验证,因此没有理由使用证书。在这种情况下,您可以使用不需要身份验证的密码,因此不严格要求身份信息。我认为RC4符合这种描述。

您的问题意味着您不需要自我签署证书,因为您知道自己信任。因此,您可以在服务器和客户端之间预先共享证书。从一个假设的加密角度来看,它会起作用;您的身份验证信息将受到保护。但是,非对称密钥加密工具和证书格式都不支持这种用法,因为它不会提供具有预共享密钥的对称密钥密码的任何好处。