bg-tutorials

如何在Zimbra上生成CSR

本指南介绍如何在 Zimbra Collaboration Suite (ZCS) 上生成 CSR(证书签名请求)。你有两种方式可选:Zimbra 管理控制台(网页界面)或使用命令行工具 zmcertmgr。这两种方法都会在服务器上创建同一对文件:一个提交给证书颁发机构的 CSR,以及一个保留在 Zimbra 上的匹配私钥。在现代 ZCS 10.x 上,CLI 是更快的途径,并且能让你精确控制 SAN 列表、密钥长度和摘要算法。

Zimbra 将商业 CSR 和密钥保存在固定位置 /opt/zimbra/ssl/zimbra/commercial/ 下。同一时间只能存在一对商业 CSR 和密钥,因此再次运行 createcsr 会覆盖之前的文件。生成 CSR 后,请将两个文件都保存一份副本到安全的地方,然后将 CSR 提交给你的 CA。

前提条件

  • 一台正在运行的 Zimbra Collaboration Suite 服务器。ZCS 10.1.x(Daffodil)是目前广泛部署的版本;下面的步骤同样适用于 ZCS 9.0.x 和 8.8.x。
  • 能够通过 SSH 访问 Zimbra 服务器,并在该主机上拥有 root 或 sudo 权限(用于 CLI 方法)。
  • Zimbra 管理控制台的管理员凭据,地址为 https://server.yourdomain.com:7071(用于网页界面方法)。
  • 邮件客户端连接所使用的完全限定主机名,例如 mail.example.com。这个值会用作通用名称(CN)和第一个使用者备用名称(SAN)。

通过管理控制台在 Zimbra 上生成 CSR

如果你更喜欢图形化操作流程,管理控制台内置的证书安装向导会逐步引导你填写每个字段。在这里生成 CSR 也会在服务器的 /opt/zimbra/ssl/zimbra/commercial/commercial.key 处创建匹配的私钥,这正是后续安装步骤所期望找到它的位置。

第 1 步:登录 Zimbra 管理控制台

打开浏览器,访问 https://server.yourdomain.com:7071,将 server.yourdomain.com 替换为你在 Zimbra 安装过程中设置的服务器名称。使用你在安装过程中创建的管理员账户登录(通常是 [email protected])。

第 2 步:启动证书向导

  • 在左侧导航栏中,点击配置,然后点击证书
  • 点击右上角的齿轮图标(位于帮助旁边),选择安装证书
  • 服务器名称下拉列表中,选择要加固的服务器,然后点击下一步
  • 选择为商业证书颁发机构生成 CSR,然后点击下一步

第 3 步:填写 CSR 详细信息

该向导要求填写的字段与任何 CA 验证并颁发证书所需的字段相同。请使用准确、最新的信息;CSR 与你的企业记录不一致是验证失败的常见原因。

  • 摘要算法:选择 SHA-256。SHA-1 已不再被任何公共 CA 信任。
  • 密钥长度:选择 2048 位(公共最低要求)。如果你的安全策略要求更大的密钥,也可以选择 4096 位。
  • 通用名称:输入用户连接所使用的完全限定主机名,例如 mail.example.com。若要申请通配符证书,请勾选使用通配符通用名称并输入 *.example.com
  • 国家名称:输入你的组织合法注册所在国家的两字母 ISO 3166-1 alpha-2 代码,例如 US
  • 省/州:填写完整的省或州名称,不要使用缩写(例如填写California,而不是 CA)。
  • 城市:你的组织注册所在的城市。
  • 组织名称:公开记录中显示的公司法定名称,例如 Example LLC。对于域名验证(DV)证书,你可以填写你的全名,也可以留空。
  • 组织单位:留空。公共 CA 已不再包含 OU 字段(已被 CA/浏览器论坛弃用)。如果表单不接受空值,可先填写 NA 以便继续;CA 会去除或忽略该字段。
  • 使用者备用名称:如果申请多域名(SAN)证书,请在此处列出所有其他主机名,用英文逗号分隔。对于单一名称或通配符证书,请将此字段留空。

再次检查所有值后,点击下一步。Zimbra 会在服务器上生成 CSR 和密钥。

第 4 步:下载 CSR

点击下载 CSR并保存文件。用任意纯文本编辑器(Notepad、TextEdit 或 vim)打开它,将整个内容块(包括 —–BEGIN CERTIFICATE REQUEST—–—–END CERTIFICATE REQUEST—– 标记)复制粘贴到你的 CA 提供的 SSL 订单表单中。在提交之前,你可以将 CSR 粘贴到我们的CSR 解码器中,确认每个字段都正确无误。

使用命令行在 Zimbra 上生成 CSR

CLI 是在 Zimbra 上生成 CSR 最直接的方式,也是唯一能够通过单条命令完全控制 SAN 列表、密钥长度和摘要算法的方法。你需要以 zimbra 用户身份运行 zmcertmgr;在 ZCS 8.7 及更高版本上,不应以 root 身份运行它。

第 1 步:连接服务器并切换到 zimbra 用户

通过 SSH 连接到 Zimbra 服务器,然后从 root 切换到 zimbra 用户。使用带有空格的连字符;该连字符会加载 Zimbra 的环境变量并设置一个干净的登录 shell:

su - zimbra

之后要返回 root 身份,输入 exit,或从普通账户运行 sudo su

第 2 步:运行 zmcertmgr createcsr

zmcertmgr 工具位于 /opt/zimbra/bin/zmcertmgrcreatecsr comm 子命令会创建一个商业 CSR 及其匹配的密钥。请以 zimbra 用户身份运行下面的命令,全部写在一行(反斜杠只是为了方便阅读而将其拆分为多行):

/opt/zimbra/bin/zmcertmgr createcsr comm -new 
  -keysize 2048 
  -digest sha256 
  -subject "/C=US/ST=California/L=San Jose/O=Example LLC/CN=mail.example.com" 
  -subjectAltNames "mail.example.com"

请将示例中的值替换为你自己的信息。以下是每个参数的作用:

  • comm:创建商业 CSR(相对于 self,后者会生成自签名证书)。
  • -new:生成全新的密钥和 CSR。若不加此参数,zmcertmgr 会尝试重用已有的密钥。
  • -keysize 2048:RSA 密钥长度(以位为单位)。2048 是公共最低要求;如果你的策略有要求,可以使用 4096。
  • -digest sha256:签名摘要算法。SHA-256 是当前标准。
  • -subject “/C=…/CN=…”:可分辨名称。将 CN 设置为主要主机名。省略 OU:公共 CA 已弃用该字段。
  • -subjectAltNames “host1,host2,…”:以逗号分隔的主机名列表,包含证书需要覆盖的所有主机名。也应把 CN 包含在此处:现代 CA 和浏览器是根据 SAN 列表进行验证的,而不是旧版的 CN 字段。

对于覆盖多个主机名的多域名证书,请在 -subjectAltNames 中列出所有主机名:

/opt/zimbra/bin/zmcertmgr createcsr comm -new 
  -keysize 2048 
  -digest sha256 
  -subject "/C=US/ST=California/L=San Jose/O=Example LLC/CN=mail.example.com" 
  -subjectAltNames "mail.example.com,webmail.example.com,smtp.example.com"

对于通配符证书,在 CN 和 SAN 中都使用 *.example.com 的格式。通配符仅覆盖一级子域名(因此 *.example.com 覆盖 mail.example.comwebmail.example.com,但不覆盖 example.com 本身或 a.b.example.com):

/opt/zimbra/bin/zmcertmgr createcsr comm -new 
  -keysize 2048 
  -digest sha256 
  -subject "/C=US/ST=California/L=San Jose/O=Example LLC/CN=*.example.com" 
  -subjectAltNames "*.example.com"

如果你完全不需要任何 SAN(这种情况在现代 CA 中很少见),可以追加 -noDefaultSubjectAltName 来完全抑制 SAN 块:

/opt/zimbra/bin/zmcertmgr createcsr comm -new 
  -keysize 2048 
  -digest sha256 
  -subject "/C=US/ST=California/L=San Jose/O=Example LLC/CN=mail.example.com" 
  -noDefaultSubjectAltName

第 3 步:定位并复制 CSR

Zimbra 会将新生成的 CSR 和密钥写入固定路径:

  • CSR:/opt/zimbra/ssl/zimbra/commercial/commercial.csr
  • 私钥:/opt/zimbra/ssl/zimbra/commercial/commercial.key

在终端中打印 CSR:

cat /opt/zimbra/ssl/zimbra/commercial/commercial.csr

复制整个内容块,包括 —–BEGIN CERTIFICATE REQUEST—–—–END CERTIFICATE REQUEST—– 标记,然后粘贴到你的 CA 提供的 SSL 订单表单中。请将匹配的 commercial.key 保留在服务器上;安装过程中会用到它。

第 4 步:提交前验证 CSR

在提交 CSR 之前,先解码确认 CN、SAN 列表、密钥长度以及组织字段都正确无误。现在发现的一个错字,就能在 CA 验证之后少一次重新颁发的请求。

在服务器上,使用 OpenSSL:

openssl req -in /opt/zimbra/ssl/zimbra/commercial/commercial.csr -noout -text

或者将 CSR 内容块粘贴到我们的CSR 解码器中,获取每个字段的易读解析结果。

后续步骤:安装颁发的证书

一旦 CA 验证了你的 CSR 并颁发证书,请按照我们的如何在 Zimbra 上安装 SSL 证书指南进行部署。安装步骤会使用 Zimbra 在 /opt/zimbra/ssl/zimbra/commercial/commercial.key 处创建的 commercial.key,因此请保留该文件不要移动或删除。

常见问题

应该在管理控制台还是命令行中生成 CSR?

两种方式都可以。使用 zmcertmgr createcsr comm 的 CLI 方式更为直接,能让你通过一条命令完全控制 SAN 列表、密钥长度和摘要算法。如果你更喜欢有引导的表单,管理控制台向导则更适合你。两种方法写入的文件路径完全相同,因此后续的安装流程也是一样的。

Zimbra 会把 CSR 和私钥保存在哪里?

Zimbra 会将商业 CSR 写入 /opt/zimbra/ssl/zimbra/commercial/commercial.csr,并将匹配的私钥写入 /opt/zimbra/ssl/zimbra/commercial/commercial.key。这些路径是固定的;安装步骤会期望在这个确切位置找到密钥。

我可以同时生成多个 CSR 吗?

不可以。Zimbra 同一时间只保存一个商业 CSR 和一个匹配的密钥。再次运行 zmcertmgr createcsr comm -new 会同时覆盖 commercial.csrcommercial.key。如果你仍需要之前的文件,请在重新生成之前先备份这对文件。

我应该以 root 身份还是 zimbra 用户身份运行 zmcertmgr?

应以 zimbra 用户身份运行。使用 su - zimbra(注意连字符两侧的空格,这会加载 Zimbra 环境并设置一个登录 shell)从 root 切换过去。在 ZCS 8.7 及更高版本上以 root 身份运行 CSR 或证书相关命令,可能会导致文件所有权错误,并在服务尝试读取这些文件时出现权限错误。

如何列出我的 Zimbra 证书必须覆盖的所有主机名?

-subjectAltNames 参数中以逗号分隔的字符串列出所有主机名,并将通用名称也包含在 SAN 列表中。例如:-subjectAltNames "mail.example.com,webmail.example.com,smtp.example.com"。现代浏览器和 CA 是根据 SAN 列表进行验证的,而不是旧版的通用名称字段,因此未包含在 SAN 中的主机名将不会被信任。

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

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

龙飞行的详细图像
撰写人

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