自签名 SSL 证书总比没有好吗?

信息安全 tls
2021-08-11 18:50:36

我有一台服务器,其中托管我自己的内部代码。因为只有我在使用它,所以我生成了一个自签名 SSL 证书和密钥,希望它能给我带来比 HTTP 更多的安全性。

我认为拥有签名证书的主要优点是其他人对证书进行身份验证和验证,即:Verisign 说 sitea.com 是合法的并对其进行认证。然而,既然我并不关心全世界都知道我的网站是有效的,那么自签名证书是否仍然比原始 HTTP 提供更好的安全性?

如果这是不安全的,安装在我的计算机上的经过验证的客户端证书会大大提高安全性吗?我希望这是安全的,如果可能的话,不必每年为一个只有我自己会使用的网站花一大笔钱。

3个回答

自签名证书意味着:

  • 您仍在使用 SSL,因此您使用加密,因此您正在击败被动攻击者:想要看到您的秘密的人将不得不通过安装假服务器或中间人攻击来明显地投入努力。

  • 在客户端,您可以使用“直接信任”,即专门指示您的浏览器信任特定服务器的证书。与服务器的第一个连接易受中间人攻击,但之后您受到保护。请参阅此答案以进行一些讨论。

所以是的,在许多情况下,带有自签名证书的 SSL 比根本没有 SSL 要好得多。当然,“更好”和“好”不是一回事……

客户端证书是关于让服务器相信客户端身份。假服务器能够像真正的服务器一样请求客户端证书,所以这里没有改进。但是,如果真正的服务器被教育需要一个有效的客户端证书(真正的 MitM 是双重模拟:真正的服务器与假客户端对话,而真正的客户端与假服务器;如果服务器需要客户端证书,那么一半的中间人将无法工作,即带有假客户端的部分)。

好吧,如果您相信签署他们自己的证书的实体就是他们所说的那个人,那么它确实提供了更多的安全性。因为那是你,所以它非常简单,假设你可以确定没有其他人可以不受限制地访问该证书。

公共 CA 的证书签名是一种向或多或少完全陌生的人提供身份证明的方法,这些陌生人正试图找到“真正的”Facebook、美国银行或 eBay。在第一次连接时,甚至是第一次连接时,他们无法保证 DNS 服务器返回的 IP 地址是正确的。因此,另一端的服务器发送其证书,将 IP 地址与名称匹配,并提供证明该证书上的数据已由其他人担保的证据,而其他人又拥有由第三方担保的证书,等等,直到少数“受信任的根”,如果您要完全信任任何人,您就别无选择,只能信任。

由于您的服务器和您的客户端可以在安全的环境中“引入”,您可以坐在单个房间的单人椅子上,从服务器的证书存储导出生成的密钥文件并将其作为受信任的个人导入客户端计算机证书,每台机器,电线和拇指驱动器都坐在你面前,这种“第一次”连接实际上是离线发生的。从那时起,当您通过网络远程连接时,您可以验证服务器的身份,因为它提供的正是您的客户端机器被告知信任的证书。这种方法称为“证书固定”,它一直用于像您这样的情况,您控制的一台计算机需要证明它正在与您控制的另一台计算机通信。

一旦您回答了信任问题,使用自签名证书为两台计算机之间的机密性创建的隧道与使用 CA 签名证书创建的隧道没有什么不同。您的客户端使用预定义的密钥交换方法进行非对称加密并发送请求以建立特定类型的对称加密通道,服务器决定是否要使用该方法,如果是,则使用加密信息进行响应,允许客户端在他们的一端完成通道(或者只是一个加密的确认,如果“密钥交换方法”只是让客户端向服务器发送他们想要使用的密钥)。

它比 HTTP 更安全吗?

是的。HTTP 将通过纯文本传输您的数据,而自签名证书将通过加密您的数据来提供保护。

经过验证的证书是否提供了更高的安全性?

我认为没有经过验证的证书可能是一个问题,那就是中间人攻击。如果您的计算机不知道证书是受信任的,通过授权或已存储的证书,有人可能会使用他们自己的 SSL 密钥和证书来拦截流量解密、读取和重新加密。当然,如果您将证书存储在您使用的计算机上作为受信任的,如果它是中间攻击的人,它会显示警报。

您还需要确保您的私钥得到很好的保护,因为您会丢失许多 CA 提供的撤销。