自签名证书问题

时间:2009-03-15 13:43:50

标签: certificate root self-signed ca

我正在测试环境中进行自签名证书。这里有关于我正在做什么的更多细节。

http://www.hanselman.com/blog/SigningPowerShellScripts.aspx

我的简要步骤是(目的是根据证书在计算机C和计算机A之间建立信任连接),

  1. 使用makecert.exe使计算机A成为根CA;
  2. 自签署由计算机A作为根CA颁发的证书B;
  3. 在计算机A上安装证书B作为用于进行通信的证书;
  4. 将根CA(compter A)安装/信任到计算机C;
  5. 然后,计算机C将使用证书B信任计算机A的通信。
  6. 我的困惑是,计算机C信任计算机A而没有安装证书B?我认为需要安装根CA证书和另一方证书。有什么意见或想法吗?

    提前谢谢, 乔治

3 个答案:

答案 0 :(得分:2)

至少在语义上你有第2步不正确。如果您正在生成由CA签名的证书,那么它根本不是自签名的,而是由CA签名。

因此,在计算机C上,您只需将生成的CA证书放入受信任的CA存储中。通过这样做,你说你信任它签署的任何东西,在你的案例证书B中。

但是你说你正在使用它来进行通信 - 请注意,如果你使用类似WCF的东西来检查撤销,你需要关闭它,因为你生成的CA不支持这个。

答案 1 :(得分:1)

计算机C必须信任根CA(在计算机A上)。然后,将自动信任由同一根CA颁发的另一台计算机(例如,计算机D)提供的任何证书。

例如,在Windows中,您(默认情况下)已经拥有并信任Verisign的根CA证书。当您导航到使用Verisign证书的HTTPS站点时,您将自动信任它 - 因为您信任Verisign,并且Verisign将证书颁发给HTTPS站点。

IOW - 您只需要信任CA并安装它的证书。

答案 2 :(得分:1)

计算机A实际上不会成为“根CA”。您需要创建根证书,然后将其安装在目标计算机上。

它不像在目标计算机上安装根证书那么简单,因为不同的应用程序可能使用不同的证书库。例如,您需要在Firefox和Explorer中安装根证书。

然后,您可以创建“子”证书 - 由根证书签名 - 目标系统将接受子证书作为有效证书,因为它已由受信任的根证书签名。

证书只是验证某人公钥的一种方式。证书包含纯文本的公钥和由签名者的私钥加密的公钥。要验证证书中发布的公钥,请使用签名者的公钥解密公钥的加密版本,并检查它是否与公钥的纯文本版本相同。

在自签名证书中,您使用私钥加密公钥。因此,自签名证书也是根证书,因为链中没有更高的签名权限。

中级证书也可用于签署其他证书。通过这种方式,证书可以用来建立一个“信任链”,回到一些(至少理论上)可信的根证书。

布鲁斯施奈尔在他的“应用密码学”一书中对此进行了合理的描述。 Peter Gutman在这个链接上有更多彩色的证书描述:

http://www.cs.auckland.ac.nz/~pgut001/pubs/pkitutorial.pdf