bg-tutorials

如何在 Proxmox 上生成 CSR

本指南将向您展示如何在 Proxmox VE 上生成 CSR(证书签名请求)。由于 Proxmox 虚拟环境基于 Debian 构建,您需要通过 SSH 在命令行中使用 OpenSSL 工具来创建 CSR,该工具在每个节点上都已预先安装。此过程在 Proxmox VE 8.x 和更新的 9.x 系列上是相同的。

CSR 是您在订购 SSL/TLS 证书时发送给证书颁发机构(CA)的编码请求。生成 CSR 时还会同时创建一个匹配的私钥。该密钥保留在 Proxmox 节点上,永远不会发送给 CA,因此请务必妥善保管:证书只能与其配对的确切密钥一起使用。

手动 CSR 与内置 ACME 客户端的比较

Proxmox VE 包含一个内置的 ACME 客户端(账户位于Datacenter > ACME下,域名则在每个节点的Node > Certificates下添加),可以从 Let’s Encrypt 请求并自动续订免费证书。如果您只需要保护 Proxmox 网页界面和一个可公开访问的主机名,那么这种自动化方式是更简单的选择,而且它会自动续订。

如果您要从商业 CA 购买证书,或需要 ACME 不发行的类型(例如组织验证、扩展验证或通配符证书),或者内部策略要求您自己控制密钥和请求,那么仍需要手动生成 CSR。本教程的其余部分将介绍该手动流程。

第一步:创建 CSR 和私钥

通过 SSH 连接到您的 Proxmox 节点(或在 Proxmox 网页界面中打开Shell控制台)。OpenSSL 已经预先安装。如果由于某种原因缺失,请先安装它:

sudo apt-get update && sudo apt-get install openssl

在提示符下,运行以下命令一步生成 CSR 及其私钥:

openssl req -new -newkey rsa:2048 -nodes -keyout mywebsite.key -out mywebsite.csr -addext "subjectAltName=DNS:mywebsite.com,DNS:www.mywebsite.com"

mywebsite替换为可以标识您域名的名称,以便日后容易识别这些文件。以下是命令各部分的作用说明:

  • req -new 创建一个新的证书请求。
  • -newkey rsa:2048 生成一个新的 2048 位 RSA 私钥。RSA 2048 是公共证书目前的最低要求;您也可以使用rsa:4096来生成更大的密钥,或改用现代的椭圆曲线密钥(请参阅下方常见问题)。
  • -nodes 使私钥保持未加密状态,以便 Proxmox 服务在启动时可以直接读取它,无需输入密码短语。
  • -keyout mywebsite.key 写入私钥。请将此文件保留在节点上,绝不要与他人共享。
  • -out mywebsite.csr 写入您将提交给 CA 的 CSR。

现代版本的 OpenSSL 默认使用 SHA-256 对请求进行签名,这正是每个公共 CA 所要求的。无需添加旧版摘要算法标志。

第二步:提供有关您的域名和公司的所需信息

接下来,OpenSSL 会提示您输入构成证书专有名称(Distinguished Name)的详细信息。请逐一填写:

  • 国家名称:您所在国家的官方两字母代码,例如US
  • 州或省:您公司注册所在州或省的全称,例如Alabama
  • 城市或地区:您公司所在城市的全称,例如Mobile
  • 组织名称:您公司的完整法定名称,例如Your Company LLC。对于域名验证(DV)证书,此项可留空。
  • 组织单位名称:请留空。此字段在公共 SSL/TLS 证书中已被弃用,CA 会将其去除。
  • 通用名称:您想要保护的完全限定域名(FQDN),例如proxmox.yoursite.com。对于通配符证书,请在域名前加上星号,例如*.yoursite.com
  • 电子邮箱地址:一个有效的电子邮箱地址(大多数 CA 中此项为可选)。
  • 质询密码:请留空。这是一个遗留字段,公共 CA 会忽略它。
  • 可选的公司名称:请留空。

此时 OpenSSL 会将 CSR 和私钥写入您运行命令所在的目录。列出文件以确认它们已被创建:

ls

您应该会看到mywebsite.keymywebsite.csr(或您选择的其他名称)。

第三步:提交前验证 CSR

在将请求发送给 CA 之前,请检查这些信息是否正确以及签名是否有效。通用名称中的一个拼写错误就意味着需要重新签发证书,因此这10秒钟的检查非常值得:

openssl req -noout -text -verify -in mywebsite.csr

确认Subject行显示的通用名称和组织信息正确无误,公钥大小符合预期,并且 OpenSSL 报告自签名验证通过。如果您更倾向于在浏览器中查看请求内容,可以将其粘贴到我们的CSR 解码器中,该工具会在线显示相同的解码字段。

第四步:将 CSR 提交给您的证书颁发机构

使用任意文本编辑器打开 CSR 文件:

cat mywebsite.csr

在 SSL 订购过程中,复制文件的全部内容,包括—–BEGIN CERTIFICATE REQUEST—–—–END CERTIFICATE REQUEST—–这两行,并将其粘贴到您的 SSL 供应商网站上的 CSR 输入框中。如果遗漏了其中任何一行标记,或每侧的五个连字符中的任何一个,CA 都会拒绝该请求。

在 CA 验证 CSR 并签发您的证书后,请按照我们的Proxmox SSL 安装说明将其安装到节点上。您需要将签发的证书与保留在服务器上的mywebsite.key文件配对使用。

常见问题

Proxmox 上的私钥存储在哪里?

私钥会被写入您运行 OpenSSL 命令时所在的目录中,文件名为您传递给-keyout的名称(例如mywebsite.key)。它永远不会离开节点,也永远不会发送给 CA。请妥善保管并备份它,因为签发的证书只能与这个确切的密钥配合使用。

我能在 Proxmox 上创建 ECDSA CSR 而不是 RSA 吗?

可以。椭圆曲线(ECDSA)密钥在相同安全级别下比 RSA 更小、更快,并且所有主要 CA 都支持它。使用一条命令生成密钥和 CSR:
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -nodes -keyout mywebsite.key -out mywebsite.csr -addext "subjectAltName=DNS:mywebsite.com,DNS:www.mywebsite.com"
prime256v1曲线(也称为 P-256)是一个安全的默认选择。其余流程,包括第二步中的提示,都是相同的。

如果 Proxmox 已经内置了 ACME 客户端,我还需要生成 CSR 吗?

不需要。对于可公开访问的主机名上的免费 Let’s Encrypt 证书,位于Datacenter > ACME下的内置 ACME 客户端会自动处理请求并续订证书,无需手动生成 CSR。当您要从商业 CA 购买证书,或需要默认 ACME 设置不发行的 OV、EV 或通配符证书时,才需要手动生成 CSR。

如何查看我的 CSR 内容?

运行openssl req -noout -text -in mywebsite.csr可以直接在节点上打印解码后的字段(Subject、密钥大小以及任何主题备用名称)。添加-verify标志还可以在提交请求前确认自签名是否有效。

立即订购 SSL 证书, 可节省 10% 的费用!

快速发行, 强大加密, 99.99% 的浏览器信任度, 专业支持和 25 天退款保证. 优惠券代码 SAVE10

龙飞行的详细图像
撰写人

经验丰富的内容撰稿人, 擅长 SSL 证书. 将复杂的网络安全主题转化为清晰, 引人入胜的内容. 通过有影响力的叙述, 为提高数字安全作出贡献.