bg-tutorials

如何在Webmin上生成CSR

本教程将向您展示如何在 Webmin 上生成 CSR(证书签名请求)。Webmin 是一款基于浏览器的 Linux 服务器控制面板,因此您有两种实用的方法来创建 CSR:通过 Webmin 内置的 SSL 模块(用于 Webmin 面板本身或 Apache 虚拟主机的图形化表单),或通过 Webmin 内置终端使用 OpenSSL 命令行。OpenSSL 方式最为灵活,可生成密钥和 CSR,适用于任何 Web 服务器(Apache、Nginx、Lighttpd 或 Webmin 管理的其他任何服务器)。

以下步骤假定使用现代版本的 Webmin 2.x 和 OpenSSL 3.x,这是 2026 年每个受支持的 Linux 发行版(Ubuntu 22.04 / 24.04 / 26.04、Debian 12 和 13、RHEL 9 和 10、Rocky 9 和 10、AlmaLinux 9 和 10、openSUSE Leap 15.6 和 Tumbleweed)当前使用的版本。输出结果是采用 SHA-256 签名的标准 PEM 编码 CSR,任何公共证书颁发机构都会接受。

第 1 步:登录 Webmin

在浏览器中打开 Webmin,访问服务器 10000 端口对应的网址:

https://yourwebsite.com:10000

yourwebsite.com 替换为您服务器的主机名或 IP 地址。端口 10000 是 Webmin 的默认端口。使用 root 账户或拥有 SSL 管理权限的 Webmin 用户登录。

第 2 步:打开 Webmin 终端

Webmin 2.x 自带内置终端,无需另外开启 SSH 会话即可使用。在左侧面板中,紧邻刷新模块链接下方,点击终端图标(从左数第二个图标),或按 Alt + K 打开它。系统会显示一个 shell 提示符,以您登录时使用的用户身份运行。

如果您更倾向于从自己的电脑直接建立 SSH 连接,可以连接到同一台服务器,并在其中执行下一步中的命令。结果完全相同。

第 3 步:使用 OpenSSL 生成私钥和 CSR

在终端中运行以下命令。它一步完成创建 2048 位 RSA 密钥和匹配的 CSR,主题信息和主题备用名称(SAN)以内联方式提供,因此 OpenSSL 不会中途停下询问交互式问题:

sudo openssl req -new -newkey rsa:2048 -noenc 
-keyout /etc/ssl/private/yourwebsite.com.key 
-out /etc/ssl/private/yourwebsite.com.csr 
-subj "/C=US/ST=California/L=San Jose/O=Your Company LLC/CN=yourwebsite.com" 
-addext "subjectAltName=DNS:yourwebsite.com,DNS:www.yourwebsite.com"

在 Debian 和 Ubuntu 上,/etc/ssl/private/ 目录已经存在。在 RHEL、Rocky、AlmaLinux 和 Fedora 上,惯例是使用 /etc/pki/tls/private/ 存放密钥,/etc/pki/tls/certs/ 存放 CSR。请选择您的 Web 服务器可以读取的路径,或先将文件保存在您的主目录中,之后再移动。如果目标目录不存在,请先用 sudo mkdir -p /etc/ssl/private 创建它。

该命令各部分的作用如下:

  • -newkey rsa:2048 生成一个新的 2048 位 RSA 密钥。2048 位是公共证书当前的最低要求。若需更大的密钥,可使用 rsa:4096,或改用 ECDSA(见下文)。
  • -noenc 使私钥保持未加密状态,这样 Web 服务器在启动时可以直接读取它,而无需输入密码短语。(在 OpenSSL 1.x 中,对应的选项是 -nodes;在 OpenSSL 3.x 中两者都可以使用。)
  • -keyout-out 分别指定私钥文件和 CSR 文件的名称。
  • -subj 以内联方式提供证书主题信息。请将示例值替换为您的真实信息:
    • C:您的组织合法注册所在国家的两字母代码(例如 US)。
    • ST:完整的省份或州名称(例如 California),不要使用缩写。
    • L:完整的城市名称(例如 San Jose)。
    • O:合法组织名称。对于域名验证(DV)证书,可以省略或设置为您的域名。
    • CN:您要保护的站点的完全限定域名(FQDN)(例如 yourwebsite.com)。
  • -addext “subjectAltName=…” 列出证书需要覆盖的每个主机名。公共 CA 会根据 SAN 列表进行验证,因此这里也应包含通用名称(Common Name)。对于通配符证书,应同时包含通配符和顶级域名:DNS:*.yourwebsite.com,DNS:yourwebsite.com。通配符仅覆盖一级子域名,本身不会自动匹配顶级域名。

如果您更倾向于使用 ECDSA 密钥(体积更小、速度更快,且 P-256 得到广泛支持),可改用以下命令:

sudo openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -noenc 
-keyout /etc/ssl/private/yourwebsite.com.key 
-out /etc/ssl/private/yourwebsite.com.csr 
-subj "/C=US/ST=California/L=San Jose/O=Your Company LLC/CN=yourwebsite.com" 
-addext "subjectAltName=DNS:yourwebsite.com,DNS:www.yourwebsite.com"

每行末尾的反斜杠是 shell 的续行符,因此该命令实际上是一条完整的逻辑指令,为便于阅读被拆分成多行显示。如果您的终端对多行形式处理不佳,可以将整个命令粘贴为单独一行。

第 4 步:保护私钥

列出目录内容,确认两个文件都已创建:

sudo ls -l /etc/ssl/private/yourwebsite.com.*

您应该会看到两个新文件:

  • yourwebsite.com.key:私钥。它必须保留在服务器上,绝不能发送给证书颁发机构,也绝不能通过电子邮件发送或粘贴到任何表单中。任何持有该密钥的人都可以冒充您的网站。
  • yourwebsite.com.csr:证书签名请求。这是您唯一需要提交给 SSL 供应商的文件。

限制私钥的访问权限,使其只能被 root 读取:

sudo chmod 600 /etc/ssl/private/yourwebsite.com.key

在启用了 SELinux 的发行版上(RHEL、Rocky、AlmaLinux、Fedora),在将密钥移动到最终位置之后,请重新应用正确的 SELinux 上下文,例如运行 sudo restorecon -Rv /etc/pki/tls/

第 5 步:验证 CSR(可选,但推荐)

在提交 CSR 之前,确认其中包含正确的主题信息和 SAN,且签名有效:

openssl req -noout -text -verify -in /etc/ssl/private/yourwebsite.com.csr

检查 Subject 行是否与您的信息一致,X509v3 Subject Alternative Name 是否列出了您期望的每个主机名,以及签名检查是否显示 verify OK。签名算法应显示为 sha256WithRSAEncryption(对于 ECDSA 密钥则显示为 ecdsa-with-SHA256)。如果您不想使用命令行,也可以将 CSR 文本粘贴到我们的在线CSR 解码器中,在浏览器中查看相同的字段信息。

第 6 步:复制并提交 CSR

打印 CSR 内容以便复制:

sudo cat /etc/ssl/private/yourwebsite.com.csr

您会看到如下一段文本:

-----BEGIN CERTIFICATE REQUEST-----
MIIBozCB... (a long string of characters)
-----END CERTIFICATE REQUEST-----

复制整个内容块,包括 —–BEGIN CERTIFICATE REQUEST—–—–END CERTIFICATE REQUEST—– 这两行(每个标记两侧各有五个连字符)。在购买 SSL 证书时将其粘贴到订单表单中,并将对应的私钥保留在服务器上。

通过 Webmin 的图形化模块生成 CSR

如果您希望避免使用命令行,Webmin 提供了两种图形化表单来为您创建 CSR。请根据证书的用途选择合适的方式。

针对 Apache 虚拟主机(您的网站)

  • 前往服务器 > Apache Webserver
  • 打开全局配置标签页,点击配置 Apache 模块,勾选 ssl 模块,如果尚未启用,请点击启用所选模块
  • 现有虚拟主机标签页中,点击其地球图标打开端口 443 的虚拟主机(如果没有则新建一个)。
  • 虚拟服务器选项页面上,选择SSL 选项,然后点击创建签名请求
  • 填写表单(国家、州/省、城市、组织、通用名称、电子邮件、密钥大小 2048 位或更高,以及任何主题备用名称),选择 Webmin 应写入 .csr.key 文件的位置,然后点击立即创建

这两个文件将出现在您指定的路径中。使用 .csr 文件提交订单,并将 .key 文件保留在服务器上。

针对 Webmin 面板本身(端口 10000)

如果您只需要为 Webmin 登录界面而非某个网站申请证书,可以从 Webmin 配置模块生成 CSR:

  • 前往Webmin > Webmin Configuration > SSL Encryption
  • 打开创建签名请求标签页。
  • 填写主机名(您访问 Webmin 所用的公开名称)、国家、州/省、城市、组织、电子邮件和密钥大小,然后点击创建

Webmin 会将请求文件和对应的密钥写入 /etc/webmin/ 目录下。CA 签发证书后,请从同一个SSL Encryption页面安装该证书,以取代默认的 /etc/webmin/miniserv.pem 文件。

收到证书之后

一旦证书颁发机构验证了您的 CSR 并签发了证书,请将其安装到服务器上。具体步骤取决于该证书用于哪个服务:

如果您更倾向于在浏览器中完成全图形化的操作流程,也可以使用我们的在线CSR 生成器来构建 CSR。它会在您的浏览器中生成私钥,因此请自行保存该密钥,并在完成安装之前将其移动到服务器上。

常见问题

Webmin 将 CSR 和私钥存储在哪里?

取决于您的设置。使用 OpenSSL 命令时,文件会被写入您通过 -keyout-out 指定的路径。使用 Apache 模块的创建签名请求表单时,输出路径可在表单中自行选择。使用 Webmin > Webmin Configuration > SSL Encryption 时,Webmin 会将文件写入 /etc/webmin/ 目录下。在 Debian 和 Ubuntu 上,密钥的惯例存放位置是 /etc/ssl/private/;在 RHEL、Rocky、AlmaLinux 和 Fedora 上则是 /etc/pki/tls/private/

我必须使用 Webmin 的终端吗,还是可以通过 SSH 连接?

两种方式都可以。Webmin 内置终端(左侧面板中的图标,或按 Alt + K)比较方便,因为您已经登录了;但通过普通 SSH 会话运行相同的 OpenSSL 命令,也会生成完全相同的 CSR 和密钥。您可以选择自己更习惯的方式。

-noenc 和 -nodes 有什么区别?

它们的作用相同:都是告诉 OpenSSL 将私钥以未加密的形式保存在磁盘上,以便 Web 服务器在启动时可以直接读取,而不需要输入密码短语。-nodes 是历史上使用的名称,在 OpenSSL 3.x 中依然可用。-noenc 是 OpenSSL 3.0 中引入的新别名,是今后推荐使用的写法。您可以根据自己的习惯任选其一。

Webmin 生成的 CSR 与其他工具生成的 CSR 是一样的吗?

是的。CSR 是由 PKCS #10 定义的标准 PEM 编码请求,无论在哪里创建,任何 CA 都可以对其签名。无论是在 Webmin 终端中生成的 CSR,还是通过 Apache 模块的创建签名请求表单生成,或是使用我们的在线CSR 生成器生成的,都是同一类型的文件。真正重要的是,与之同时生成的私钥必须保留在您打算安装该证书的服务器上。

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

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

龙飞行的详细图像
撰写人

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