Python Openssl 生成证书

2024 年 8 月 29 日 | 4 分钟阅读

引言

自签名证书对于本地开发很有用,但我不建议在生产应用程序中使用。如果您想托管一个公共网站,获取一个可信赖的签名证书可能是更好的解决方案。

当使用自签名证书时,用户在第一次访问时会收到通知,告知您的网站使用的是不受信任的证书。您可以从 GoDaddy 等公司购买一个,或者从 Let's Encrypt 获取免费证书。

如果您只需要自签名证书用于个人使用或测试,请继续了解如何自己签名证书。

完成后,您将需要两个文件:“私钥文件”和“签名证书文件”。在配置 SSL/TLS 服务器时,这两个文件是必需的。私钥绝不能共享。

生成自签名证书

以下步骤用于生成它

  • 生成一个私有的“RSA 密钥”。
  • 使用密钥生成“证书签名请求 (CSR)”。
  • 必须使用该密钥来签名(证书签名请求)。

检查 OpenSSL 是否已安装

要运行这些说明,您必须安装 OpenSSL。要查看它是否已安装,请在命令提示符中键入以下内容

如果收到版本号,则表示已安装。如果收到“无法识别的命令”错误,则必须安装它。Mac 上应该已经安装了,但您可以通过运行 brew 来安装较新版本。

在 Linux 中安装 OpenSSL1

Openssl 很可能已经在 Linux 上安装了。如果没有,您可以使用发行版的包管理器来安装它。例如,在 Debian/Ubuntu 系统上

在 Windows 中安装 OpenSSL

在 http://gnuwin32.sourceforge.net/packages/openssl.htm 下载 Windows 的 GPG 二进制文件。如果您看到有关 openssl 不是可识别命令的错误消息,您可能需要调整 PATH 环境变量以指向新的 openssl/bin 位置。

如果在 Windows 上启动 openssl 后看到以下错误消息

然后将环境变量 OPENSSL CONF 设置为默认(或自定义)openssl.cnf 文件的位置。如果您将 openssl 安装到 C:optopenssl,请按以下方式进行设置

生成私有的 RSA 密钥

为了保护您的私钥,您可以选择有密码或无密码生成。您只需选择其中一个选项。这将生成一个“2048 位 RSA”私钥。

使用密钥生成证书签名请求 (CSR)

使用上一步生成的私钥,我们必须创建一个证书签名请求。证书签名请求可以交互式地准备,也可以通过将附加的证书详细信息作为命令行参数传递来准备。只需选择其中一个选项。

使用密钥签名证书签名请求

最后一步是使用私钥签名请求。在这种情况下,我们使用生成它的同一密钥来签名证书请求。这就是“自签名”一词的由来。

查看证书详细信息

要查看证书的详细信息并验证信息,请运行以下命令

删除私钥的密码短语

要查看证书的详细信息并验证信息,请运行以下命令

生成密钥和证书的单条命令

我们之前回顾了创建自签名证书的步骤,包括生成密钥、编写证书签名请求以及使用同一密钥对其进行签名。

理解这一过程至关重要,但有一个更简单的方法可以在一步完成,而无需创建中间证书签名请求文件。

用于运行 HTTPS 服务器的 Python 脚本

下面的代码演示了如何使用新创建的密钥和证书来启动一个简单的 HTTPS 服务器。运行脚本后,它将启动一个 Web 服务器,该服务器将提供当前目录的内容。