当使用带有 SSL 的 Apache 时,“SSLCertificateFile”指令指定的完整证书是否会交给客户端?

当使用带有 SSL 的 Apache 时,“SSLCertificateFile”指令指定的完整证书是否会交给客户端?

当使用带有 SSL 的 Apache 时,“SSLCertificateFile”指令指定的完整证书是否会交给客户端?

如果是,它是否包含私钥和公钥?

答案1

仅将证书(包含公钥和额外信息,例如机器身份,但不包含私钥)发送给客户端。如果有到 CA 的链(通过 或SSLCertificateChainFile通过SSLCACertificatePathSSLCACertificateFile),则应发送证书链。您将看到带有-showcerts选项的完整链openssl s_client

echo | openssl s_client -showcerts -connect www.your.host.example:443

可以,但不必将私钥放在同一个文件中,可以将其分离为SSLCertificateKeyFile

答案2

只向客户端传输公钥。SSLcertificatefile指定公钥,指令 指令SSLcertificateKeyFile用于私钥。

如果您希望确切地查看传输的内容,可以使用 openssl 进行连接并查看证书。 类似这样的命令openssl s_client -connect www.google.org:443将连接到 google,您将看到公共证书以及有关该证书的一些详细信息。

答案3

我花了很长时间才理解这一点,但一旦理解了,就恍然大悟了。

Apache 不会这么做。理由很充分。

您已经看过您发送的那些 CSR 来获取您的 csr 了,对吧?带有信息(通用名称、城市、州等)

嗯,私钥基本上把这些信息都混在一起了,解锁它的唯一方法是使用公钥。你可以像糖果一样把公钥分发出去,但不能把私钥分发出去。

因此,当某人访问您的页面时,您将这些混合数据发送到某个 Web 浏览器,浏览器将使用您的公钥来解码该信息。如果公钥正确,浏览器将看到(常用名称、城市、州等)并知道正在与之交谈的人是合法的。

如果私钥来自某个随机服务器,那么这些混杂数据解密后会变成更多混杂数据。完全是垃圾。此时浏览器就知道它正在与冒名顶替者交谈。

此外,浏览器使用签署原始密钥的人(例如 verisign 或 godaddy)的公钥,因为这些都是知名且值得信赖的来源...他们这样做也是为了确保他们与正确的人交谈。这就是为什么您通常从 Verisign 这样的公司获取证书的原因。

此外 - 您可以签署自己的证书并让您的用户(例如在 AD 域中)信任您,但您必须确保所有用户的机器都信任您的“签名者”。这是下一个级别...

答案4

公钥被发送到客户端,客户端使用该公钥加密数据,只有私钥才能解密数据。

私钥永远不会发送给客户端,这会使加密通信的整个意义荡然无存。

相关内容