Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

TLS/SSL 证书

介绍

我们通常希望在通信时使用 TLS 连接(也叫 SSL 连接),从而避免“中间人”攻击。Godot 提供了一个连接封装,StreamPeerTLS,它可以接纳一个普通连接并为其增加安全性。HTTPClientHTTPRequest 等类也通过使用这一封装来支持 HTTPS。

Godot 会尝试使用操作系统提供的 TLS 证书捆绑包,但同时也包含了 Mozilla 的 TLS 证书捆绑包作为回退。

你也可以在项目设置中强制使用自己的证书捆绑包:

设置 TLS 证书捆绑包覆盖项目设置

设置 TLS 证书捆绑包覆盖项目设置

设置后,该文件默认会覆盖操作系统提供的捆绑包。该文件中应包含任意数量 PEM 格式的公共证书

获取证书有两种方法:

从证书颁发机构获取证书

获取证书的主要方法是使用证书颁发机构(CA),例如 Let's Encrypt。这一过程比使用自签名证书更为繁琐,但更加“官方”,并且能确保你的身份得到清晰表示。生成的证书也会被诸如网页浏览器等应用程序信任,而自签名证书则需要在客户端进行额外配置才能被视为可信。

这些证书无需在客户端进行任何配置即可工作,因为 Godot 已经在编辑器和导出的项目中捆绑了 Mozilla 证书捆绑包。

生成自签名证书

对于大多数使用场景,建议通过证书颁发机构(CA)来处理,因为像 Let's Encrypt 这样的证书颁发机构提供免费的服务。但是,如果使用证书颁发机构不是一个选项,那么你可以生成自签名证书,并告诉客户端将你的自签名证书视为可信证书。

创建自签名证书的方法是:生成一对私钥和公钥,然后将(PEM 格式的)公钥添加到项目设置中指定的 CRT 文件中。

警告

私钥应该部署到你的服务器上。客户端必须无法访问它:否则,证书的安全性将会被破坏。

警告

在项目设置中将自签名证书指定为 TLS 捆绑包时,会通过证书的 CN 和备用名称强制执行常规的域名验证。有关自定义域名验证的信息,请参阅 TLSOptions

出于开发目的,Godot 可以通过 Crypto.generate_self_signed_certificate 生成自签名证书。

另外,OpenSSL 也提供了关于生成密钥证书的文档。