0

我在我的测试环境中做自签名证书。这是有关我在做什么的更多详细信息。

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

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

  1. 使用 makecert.exe 使计算机 A 成为根 CA;
  2. 自签名证书 B,由计算机 A 作为根 CA 颁发;
  3. 在计算机A上安装证书B作为通信时使用的证书;
  4. 在计算机 C 中安装/信任根 CA(计算机 A);
  5. 然后计算机 C 将信任计算机 A 使用证书 B 进行的通信。

我的困惑是,计算机 C 在不安装证书 B 的情况下信任计算机 A?我认为根CA的证书和对方的证书都需要安装。有什么意见或想法吗?

提前谢谢,乔治

4

3 回答 3

2

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

因此,在机器 C 上,您只需将生成的 CA 证书放在受信任的 CA 存储中。通过这样做,您表示您信任它签署的任何内容,在您的情况下是证书 B。

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

于 2009-03-15T14:29:57.120 回答
1

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

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

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

于 2009-03-15T14:24:28.147 回答
1

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

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

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

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

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

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

Bruce Schneier 在他的《应用密码学》一书中对此进行了合理的描述。Peter Gutman 在此链接中对证书进行了更丰富多彩的描述:

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

于 2009-03-15T14:44:14.807 回答