[golang]是否可以不用证书写TLS服务器?

[golang]Is it possible to write TLS server without certificate?

从客户端我已经有了将 InsecureSkipVerify 设置为 true 的 tls 配置。如何为这个客户端编写服务器,它接受任何证书。 tls.config 也可以在服务器中提供帮助吗?比如将 InsecureSkipVerify 设置为 true?

不,正如@JimB 告诉您的那样,TLS 没有证书就无法工作。

道理很简单:TLS 是关于安全和证书的 加密密钥 提供安全性(TLS 使用 so-called "asymmetric cryptography" 其中每一方都有一个密钥 组成 私有和 public 部分; public 部分是发送给另一方的内容 在进行 TLS 握手时)。

但另一方面,TLS 提供的安全性是 two-fold:

  1. 它提供参与方的相互认证 交换.
  2. 它提供传输通道的加密。

证书用于两个方面:它们包含用于 (2) 的加密密钥的事实,以及它们具有 所有者身份 编码的事实 在其中(并由获得特定证书的人验证( 用于 (1).

让我先不讨论 (1) 的详细工作原理 (虽然我真的敦促你阅读一些关于它的理论)但是(1)是什么 你真的想回避。

好处(对您来说)是它的成本低廉:

  • 可以告知 TLS 客户端不要验证服务器的身份。
  • 可以告诉 TLS 服务器做同样的事情(通常这是默认设置 他们运行的模式——这是常规网站的典型模式 例如)。
  • 您可以为您的 TLS 创建 so-called self-signed certificate 服务器。

后者只需要能够生成的东西 X.509 证书; OpenSSL 通常用于此; just google for it.

如果您使用的是 Debian 或 Debian 衍生版(如 Ubuntu、Mint 等) 考虑安装 ssl-cert 包并使用 它提供的 make-ssl-cert 程序。