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.key和mywebsite.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 证书. 将复杂的网络安全主题转化为清晰, 引人入胜的内容. 通过有影响力的叙述, 为提高数字安全作出贡献.

Avatar of Sergiu Rosca
Technical Review by Sergiu Rosca

Sergiu Rosca is the core web developer behind SSL Dragon. He manages the technical infrastructure, platform performance, and backend integrations that keep the site running smoothly and securely. At SSL Dragon, Sergiu shares practical insights on web development, site optimization, and technical troubleshooting.

All SSL Dragon installation guides are tested on live server environments and undergo a strict peer-review process to ensure your infrastructure remains secure. Read our full Editorial Policy.