基于这个答案:https://stackoverflow.com/a/3107645/1559672无需用户验证即可设置 ssl 连接。
我认为我的问题的答案是肯定的,但找不到任何东西来确认/拒绝它。
这个想法是服务器有一个证书,客户端可以通过 CA 验证该证书。然后客户端生成一些 secret 并使用服务器的公钥加密。基于这个共享 secret ,他们生成用于加密/解密的“ key Material ”。建立安全连接后,客户端可以使用用户名/密码验证自己。
这样可以吗?如果是,请给我一些例子或证据。 如果不是,为什么不呢?
最佳答案
The reason of confusion was because of RabbitMQ doc: rabbitmq.com/ssl.html "Connecting without validating certificates" 's example code doesnt define what server certificates or RootCAs are accepted. (RabbitMQ cert is self signed) So I don't get how TLS is set up without that?
加密不依赖于证书。自签名证书仍然是有效证书。
证书的目的是证明远程对等方的身份。您真的能确定您正在与您认为正在与之通话的服务器通话,并且您的连接当前没有被劫持吗?这是通过服务器提供它可能拥有的证书来确保的(公钥/私钥加密验证这一点,只有服务器应该拥有证书的私钥;这里的信任/安全取决于服务器将其私钥保密)。
您如何信任证书?好吧,您可能在受信任的证书存储中有它的副本。您可以使用自签名证书来执行此操作:只需将其放在您信任的商店中;因为你(大概)知道它来自哪里,所以它是值得信赖的。
由于这对于网络上的每个公共(public)站点都是不现实的,因此 public key infrastructure存在它允许您信任有限的已知数量的证书颁发机构,这些证书颁发机构可以签署任意未知方的证书,并且您可以间接信任那些迄今为止未知的证书。
综上所述,加密是一个单独的组件,无论是否使用证书提供的身份验证,都可以设置加密的安全连接。
关于ssl - 是否可以使用带有服务器证书和客户端密码的 SSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35082964/