在游戏中使用自签名证书有什么问题?

信息安全 证书 自签名
2021-08-16 19:35:09

在使用需要为其玩家提供帐户的游戏时,我试图了解安全问题。

使用自签名证书有什么问题?

如果我正确理解了这个问题,只是如果服务器私钥被泄露,用户仍然会信任证书,窃取密钥的人可能会窃取他们的密码。(直到游戏使用新证书更新。)

但这是唯一的问题吗?如果是这样,攻击者真的有可能从具有密集防火墙的服务器上窃取私钥(只打开尽可能少的端口吗?)。

当客户想要进行身份验证时,我对游戏的想法如下:

  • 客户端使用自签名证书的公钥使用 RSA 加密其用户名和密码。
  • 客户端将此加密消息发送到服务器。
  • (所以这里技术上只有主服务器可以读取消息,除非自签名证书被泄露)
  • 服务器使用自签名证书中的私钥读取消息
  • 然后在这里服务器做经典的事情,检查数据库是否存在用户名,然后用 bcrypt 之类的东西对密码进行哈希处理并检查密码是否正确,然后他将客户端设置为经过身份验证的状态,现在可以访问其他功能,比如加入游戏服务器,访问服务器列表等...

基本上我需要让客户信任公钥!因为如果主服务器将它的公钥发送给客户端,那么中间的人可以拿走它,为自己生成一个公钥/私钥并发送它的公钥。所以现在客户可能认为他在与服务器交谈,但实际上他与中间的人交谈。我想错了吗?

3个回答

您似乎不了解自签名证书的问题,所以请允许我解释一下。

通常,当人们说“不要使用自签名证书!”时,他们的意思是在 Web 服务器的上下文中,您希望公众通过 Web 浏览器进行连接。在这种情况下,如果使用自签名证书,则会导致错误消息:

自签名证书警告

用户自然会希望忽略警告并继续进行 - 毕竟,这是他们使用您的网站的唯一方式。因此,如果攻击者截获连接并出示他自己的自签名证书,用户将无法看到。毕竟,错误消息被视为过程的自然部分。

其他设置中的自签名证书

公司通常拥有自签名证书作为内部服务的根证书。此证书在内部分发(通常通过 Active Directory),因此受到所有客户端的信任。

这是一个正常的设置并按预期工作。如果攻击者试图拦截连接,则会发生错误,因为他的证书将不受信任。

游戏的自签名证书

假设您有一个管理游戏状态的服务器和一个游戏客户端(可能是本机客户端)。在这种情况下,使用自签名证书没有任何问题。只需与客户端分发证书并将私钥保存在服务器上。

攻击者可以窃取私钥吗?

仅当您的服务器存在漏洞时,攻击者才会这样做。但是,由外部证书颁发机构签署的证书也会存在这种风险。

使用自签名证书有什么问题?

信任的可扩展性。使用自签名证书,每个客户端都必须明确信任服务器证书,并且每当证书更改时,客户端都必须更新。对于公开签署的证书,证书的信任源自对颁发证书颁发机构(即根 CA)的预先存在的信任。

但是,如果客户端只是一个应用程序,并且证书可以直接包含在应用程序中,那么这一切都不是什么大问题。应用程序的正常(安全)更新过程也可用于更新受信任的服务器证书。虽然它不像受信任的根 CA 那样顺利,因为可能总是有一些客户端没有更新,因此没有最新的证书。但是,如果出于不同的原因需要始终保持最新的客户端,那么这个问题也会被隐式处理。

在除信任之外的所有其他方式中,自签名证书可以与公开颁发的证书一样强大。这包括加密属性,如密钥和签名算法和大小。

...是的,攻击者真的有可能从具有密集防火墙的服务器上窃取私钥(只是尽可能少地打开端口?)

如果唯一的安全措施是依靠防火墙,那么安全性可能不会那么高,并且可能会窃取私钥。保护应用程序的安全远不止在其前面放置防火墙。

如果您承诺使用自签名和/或固定 TLS 证书,您将失去使用 CA 签名证书的两个潜在好处:

1. 处理中间人 TLS 连接的网络

出于流量分析的目的,一些用户通过中间人 (MITM) TLS 流量的计算机网络连接到 Internet 。这些用户的计算机信任由 MITM 软件创建的自签名证书。

一组研究人员估计,大约每250 个 TLS 连接中就有 1 个被防火墙软件MITMed。许多学校和雇主 MITM 他们网络上的 TLS 流量。如果您的客户端固定了特定的服务器证书,那么尝试在学校网络上玩您的游戏的学生可能会遇到 TLS 错误。威权政府经常试图对整个国家的 TLS 流量进行 MITM。值得注意的是,哈萨克斯坦政府尝试了 MITM 他们的 TLS 流量但失败了。

如果您想提高可用性,您的客户端应该接受客户端计算机信任的证书。另一方面,您可能想故意让 MITM 难以进行您的游戏 - 无论是为了保护玩家的隐私,还是作为一种反作弊机制。

2. 证书透明度记录

使用 CA 签名证书还有其他安全优势,例如将证书的创建记录到公共证书透明度日志中。证书透明度使恶意行为者更难在没有其他人注意到的情况下颁发客户信任的证书。