本教程将向您展示如何在 Virtualmin(运行于 Webmin 之上的开源主机控制面板)上生成 CSR(证书签名请求)。
图形化表单会为您完成所有工作:它会在服务器上生成一个 2048 位(或更大)的 RSA 私钥,写入包含您的主体信息和任何主题备用名称的 PKCS #10 请求,并将两个文件以 ssl.csr 和 ssl.key 的形式存储在虚拟服务器的主目录中。然后您将 CSR 提交给证书颁发机构,而对应的私钥永远不会离开服务器。
以下步骤适用于 Virtualmin 7.x(当前稳定版本系列),该版本使用管理 SSL 证书页面来处理虚拟服务器证书,并内置了 Let’s Encrypt 集成。如果您的虚拟服务器是全新的,请在下单前先生成 CSR;如果您已经拥有先前订单的 CSR 和证书,请直接跳转到在 Virtualmin 上安装证书部分。
第一步:登录 Virtualmin 并选择虚拟服务器
在浏览器中打开 Virtualmin(默认 URL 是服务器上的 Webmin 端口):
https://yourserver.example.com:10000
以 root 身份或 Virtualmin 主管理员身份登录。在左上角的下拉菜单(虚拟服务器选择器)中,选择您要保护的域名。Virtualmin 会将每个配置页面的作用范围限定于所选的虚拟服务器,因此您在下一步中生成的 CSR 属于该域名,并会写入该域名自己的主目录中。
如果您需要为 Virtualmin 面板本身(端口 10000 上的登录页面)生成证书,请改用Webmin,然后进入Webmin Configuration,再进入SSL Encryption,具体请参考我们的如何在 Webmin 上生成 CSR指南。本指南其余部分涉及的是网站证书,这也是最常见的情况。
第二步:打开签名请求标签页
在下拉菜单中选中正确的虚拟服务器后,进入Server Configuration,然后进入Manage SSL Certificate。打开的页面顶部有一排标签。打开Signing Request标签页(较旧的 Virtualmin 6 版本中标记为Create Signing Request)。
同样的表单也可以从Manage Virtual Server,然后Setup SSL Certificate,再Create Signing Request进入。这两个入口都会打开同一个对话框。
第三步:填写 CSR 详细信息
填写表单时只能使用标准 ASCII 字符;非拉丁字母和带重音符号的字符会导致大多数证书颁发机构拒绝该请求。
- Server name:您要保护的完全限定域名(FQDN),例如 www.example.com。Virtualmin 会在框中预填虚拟服务器的域名;如果您希望证书覆盖不同的主机名(例如裸域名或子域名),可以更改此项。对于通配符证书,在裸域名前加上星号:*.example.com。此值会写入证书的公用名(Common Name)。
- Email address:一个有效的联系邮箱。部分证书颁发机构会用它发送验证通知;该地址不会出现在颁发的证书中。
- Department(组织单位):请留空。CA/浏览器论坛已逐步取消公开信任证书中的 OU 属性,因此您在此处输入的任何值都会在颁发过程中被剔除。
- Organization:您公司的完整法定名称,须与注册信息完全一致,例如 Your Company LLC。这是组织验证(OV)和扩展验证(EV)证书的必填项。对于域名验证(DV)证书,此字段不会被验证,因此如果您没有注册实体,填写一个简短的占位内容即可。
- City or Location:您组织注册所在的城市,须完整书写(例如 Los Angeles,而不是 LA)。
- State:完整的州或省名称(例如 California),不要使用缩写。
- Country:您所在国家的两字母 ISO 3166-1 代码(例如 US、GB、DE)。
- Key size:2048 位是目前所有公共 CA 都接受的最低要求,也是安全的默认值。仅在您的策略要求更大密钥时才选择3072或4096;代价是 TLS 握手速度会略微变慢。
- Alternate hostnames(主题备用名称):列出证书必须覆盖的每个额外主机名,每行一个或用空格分隔。如果您的公用名是 www.example.com,请始终包含裸域名(这样证书也能覆盖 example.com);如果您的公用名是裸域名,则应包含 www 变体。现代浏览器会忽略公用名,仅根据 SAN 列表进行验证,因此如果留空,生成的证书将不会被浏览器信任用于任何额外主机名。
请仔细检查每一项。如果 CSR 与验证数据不符,CA 会拒绝该请求,而带有拼写错误的 CSR 意味着您需要重新生成并提交新的请求。
第四步:生成 CSR
点击Generate CSR Now。Virtualmin 会在服务器上创建私钥和对应的 CSR,并将两者打印到屏幕上。CSR 的格式如下:
-----BEGIN CERTIFICATE REQUEST-----
MIIC4DCCAcgCAQAwgZoxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlh
... (many lines of base64) ...
-----END CERTIFICATE REQUEST-----
私钥显示在 CSR 下方的另一个独立框中,由 -----BEGIN PRIVATE KEY----- 和 -----END PRIVATE KEY----- 行框住。您不需要复制它:Virtualmin 已经将其保存到了服务器上。在后台,这两个文件都会被写入虚拟服务器的主目录,通常路径如下:
/home/<user>/domains/<yourdomain>/ssl.csr
/home/<user>/domains/<yourdomain>/ssl.key
请将私钥留在原处。CA 永远不会看到它,当您在Update Certificate and Key标签页上安装颁发的证书时,Virtualmin 会自动将其与证书配对。
第五步:复制 CSR 并提交给证书颁发机构
选中完整的 CSR 内容块,包括 -----BEGIN CERTIFICATE REQUEST----- 和 -----END CERTIFICATE REQUEST----- 这两行(每个标记两侧各有五个连字符)。复制它并粘贴到您 SSL 订单表单的 CSR 字段中。CA 会从请求中读取主体信息、SAN 列表和公钥,然后颁发与之匹配的证书。
在提交之前,最好确认该请求包含您预期的值。将 CSR 文本粘贴到我们的CSR 解码器中,即可在浏览器中查看公用名、SAN 列表、密钥大小和签名算法。请确认公用名与访问者使用的主机名一致,并确认每个所需的名称都出现在主题备用名称列表中。在此处发现拼写错误可以避免日后的重新颁发流程。
替代方案:使用 Virtualmin 的 Let’s Encrypt 集成跳过 CSR
如果您只需要免费的域名验证证书,则可以完全跳过手动生成 CSR 的步骤。Virtualmin 内置了 Let’s Encrypt 客户端,可以在无需任何手动文件处理的情况下请求、安装并自动续期证书。
- 在同一个Server Configuration,然后Manage SSL Certificate页面中,打开SSL Providers标签页(较旧版本中标记为Let’s Encrypt)。
- 在Request certificate for下选择要覆盖的域名,在Domain names listed here下添加额外的域名,如果 Virtualmin 管理您的 DNS 且您希望将所有子域名纳入同一证书,请勾选Also request wildcard certificate。
- 保持Automatically renew certificate启用状态。Let’s Encrypt 证书有效期为 90 天,自动续期功能可以确保证书始终保持有效,无需手动操作。
- 点击Request Certificate。颁发过程需要几秒到几分钟不等,之后 Virtualmin 会自动将证书安装到虚拟服务器上。
Let’s Encrypt 仅颁发域名验证证书。如果您需要组织验证、扩展验证、更长的保修期或专属支持服务,请使用上文所述的手动 CSR 流程,并向商业 CA 下单。
CA 颁发证书后的后续步骤
当证书颁发机构验证完 CSR 并通过电子邮件发来您的证书后,请返回Manage SSL Certificate页面,在Update Certificate and Key标签页粘贴已签名的证书,然后在CA Certificate标签页粘贴中间证书链。完整的分步说明请参见我们的如何在 Virtualmin 上安装 SSL 证书指南。之后,使用同一页面上的Copy to …按钮,将证书应用到Webmin、Usermin、Postfix、Dovecot和ProFTPd,使面板和邮件服务能够呈现与网站相同的受信任证书。
如果您希望避开控制面板,直接在浏览器中离线生成 CSR,我们的CSR 生成器可以通过一个简单的表单生成支持 SAN 的 PKCS #10 请求。其代价是私钥会与 CSR 一同在您的浏览器中生成,因此您需要自行下载并保存该密钥,并在完成安装前将其移动到服务器上。


