SSL 和证书

标签 ssl certificate ssl-certificate

1) 据我所知,只有客户端需要提供证书才能建立 SSL 连接。知道为什么 SSL 不允许这样做吗?

2) 我假设 SSL 连接可以配置为:

  • 只要求服务器提供证书
  • 要求服务端和客户端都提供证书

3) 可能是个愚蠢的问题,但是 SSL 如何“知道”哪一边是客户端,哪一边是服务器?

4) 是否可以在没有 SSL 请求任何证书的情况下建立 SSL 连接?

谢谢

最佳答案

  1. 如果服务器未经过身份验证,您就真的无法拥有专用 channel — 中间人很容易窃听并在两个合法方之间中继流量。如果您没有隐私或身份验证,为什么要使用 SSL?实际上存在“匿名”模式,其中使用公钥加密来商定加密 key ,但客户端或服务器均不提供证书;但是,我从未见过它们被使用,可能是因为它们无法解决中间人窃听攻击。

  2. 是的,服务器提供证书。服务器可以向客户端请求证书。客户端可以使用证书进行响应,也可以忽略该请求。如果请求被忽略,服务器可以选择继续使用匿名客户端,或者终止连接。

  3. 客户端和服务器的角色是在 SSL 握手期间建立的。第一条消息称为 ClientHello。发送此消息的一方是客户端。通常,这是发起 TCP 连接的一方,但不一定是(事实上,SSL 中没有任何内容需要 TCP 作为传输)。

  4. 是的,正如我在 #1 中提到的,SSL 具有“匿名”模式,在这种模式下,任何一方都无法安全地验证另一方。这将在未知方之间提供一个私有(private)的、防篡改的 channel 。然而,由于你不知道 channel 的另一端是谁,你不知道它是一个中间人,他同时进行了两次握手并拦截了你和你之间的所有流量您认为正在与之交谈的一方。为了阻止这种情况,您必须在 SSL 之上有一个身份验证协议(protocol),为了安全起见,它不可避免地最终看起来很像经过身份验证的 SSL。

关于SSL 和证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4270392/

相关文章:

.htaccess - htaccess 将 301 https www 重定向到非 www

javascript - Node.js 不允许来自 api 的 CA 证书?

ssl - msmdpump.dll 忽略基本身份验证

ssl - Zscaler 中级证书

c# - .NET 不信任我的自签名证书,但 IE 信任?

kubernetes - 更新 Istio-IngressGateway TLS 证书

GSM 调制解调器的 ssl 证书

ssl - 具有 2 个中间 CA 的 nginx 客户端身份验证

ios - 申请进入应用商店后如何更改生产证书(.p12)

ssl - 子域的通配符证书和链式证书有什么区别?