pfSense book之证书管理

本文摘要证书管理证书权限管理证书管理证书吊销列表X.509 公钥基础知识介绍VPN 的身份验证可选 X.509 密钥,本章仅提供在 pfSense 中创建和管理证书所需的基础知识。使用 PKI 时需先创建一个证书颁发机构(CA),该 CA 随后签署 PKI 中的所有单个证书。VPN 的服务器和客户端使用 CA 证书验证所收到的服务器/客户端证书的真实性。CA 证书可用于验证签名,但不能签署证书——签署证书...

证书管理

  • 证书权限管理
  • 证书管理
  • 证书吊销列表

X.509 公钥基础知识介绍

VPN 的身份验证可选 X.509 密钥,本章仅提供在 pfSense 中创建和管理证书所需的基础知识。

使用 PKI 时需先创建一个证书颁发机构(CA),该 CA 随后签署 PKI 中的所有单个证书。VPN 的服务器和客户端使用 CA 证书验证所收到的服务器/客户端证书的真实性。CA 证书可用于验证签名,但不能签署证书——签署证书需要 CA 的私钥。CA 私钥的机密性是整个 PKI 安全的基础,任何能接触到私钥的人都可为该 PKI 生成证书,因此必须保证其安全,永远不分发给客户端或服务器。

注意:切勿将私钥文件复制到多个客户端,这会危及 PKI 安全。

若证书被给定的 CA 信任,则该证书被视为有效。也就是说,一个特定 CA 签发的证书会被所有使用该 CA 的 VPN 视为有效。因此最佳实践是为不同安全等级的 VPN 创建唯一的 CA。例如,两个安全级别相同的移动接入 VPN 可以共用一个 CA,但若一个 VPN 用于普通用户,另一个用于远程管理且具有不同限制,则应使用不同的 CA。

证书吊销列表(CRL)是被盗用或需要使其失效的证书列表。只要使用 CA 的应用程序同时使用 CRL,吊销的证书便会被视为不可信。CRL 使用 CA 的私钥生成并签名,因此在 GUI 中创建或导入 CRL 时,CA 的私钥必须存在。

证书权限管理

证书颁发机构(CA)通过 系统 > 证书管理,CAs 选项卡 进行管理。在此页面可添加、编辑、导出或删除 CA。

创建新的证书颁发机构

  • 导航到 系统 > 证书管理,CAs 选项卡
  • 点击 添加 新建 CA。
  • 输入一个描述性名称,该名称会在整个 GUI 中标识此 CA。
  • 选择 CA 的生成方式,包括:

    • 创建内部证书颁发机构
    • 导入现有证书颁发机构
    • 创建中间证书颁发机构

创建内部认证中心

最常用的方式是创建内部 CA。

  • 选择密钥长度,决定 CA 的加密强度。密钥越长越安全,但长密钥会消耗更多 CPU 时间,不宜一味选择最大。默认值 2048 可较好地平衡安全与性能。
  • 从提供的列表中选择摘要算法。目前的最佳实践是在条件允许时使用比 SHA1 更强大的算法,SHA256 是不错的选择。

注意:一些较老或简化的设备(如支持 VPN 的 VoIP 话机)可能仅支持 SHA1 摘要算法。

  • 输入“有效期”天数,指定 CA 的有效时长。时长取决于个人偏好和站点策略。频繁更换 CA 更安全,但会带来管理负担(过期时需重新签发所有证书)。默认推荐 3650 天(约 10 年)。
  • 填写专有名称(Distinguished Name)中的诸个字段,用于个性化参数。这些信息通常根据组织信息填写,多为形式化,用于区分不同 CA。切勿使用标点和特殊字符。

    • 从列表中选择国家代码(ISO 标准国家代码,不是顶级域名)。
    • 输入完整拼写的州或省名称(不要缩写)。
    • 输入城市。
    • 输入组织名称,通常是公司名。
    • 输入有效的电子邮件地址。
    • 输入公用名称 (CN)。它是标识 CA 的内部名称。与证书不同,CA 的 CN 不必是主机名,可任意命名,例如 “VPNCA” 或 “MyCA”。
  • 单击 保存

注意:虽然技术有效,但请避免在 CN 中使用空格。

保存后若出现错误(如无效字符或其它输入问题),会显示相应说明。纠正错误后重新保存。

导入现有证书颁发机构

从外部导入已有 CA 时,选择“导入现有证书颁发机构”方式。这适用于由其他系统制作的 CA 或需要信任的第三方 CA。

  • 输入 CA 的证书数据。若仅需信任某个外部 CA,只需提供证书数据。通常它是以 .crt.pem 结尾的纯文本文件,内容类似:
-----BEGIN CERTIFICATE-----
[一段 base64 编码的随机数据]
-----END CERTIFICATE-----
  • 如果导入的 CA 是自定义且需要生成证书和吊销列表,则需输入证书私钥。私钥通常位于 .key 文件中,内容类似:
-----BEGIN RSA PRIVATE KEY-----
[一段 base64 编码的随机数据]
-----END RSA PRIVATE KEY-----
  • 若输入了私钥,请填写下一个证书的序列号。这至关重要:CA 会按序为证书分配唯一序列号,此值决定了从该 CA 生成的下一个证书的序列号。每个证书必须拥有唯一序列号,否则吊销时会出现问题。如果下一个序列号未知,可估算该 CA 已颁发的证书数量,并设置一个足够高的值以避免冲突。
  • 单击 保存

保存后若出现错误,按提示修正后重新保存。

导入链接或嵌套的证书颁发机构

如果 CA 由中间人签名,而非根 CA 直接签名,可能需要将根 CA 和中间 CA 证书一起导入到同一条目,格式如下:

-----BEGIN CERTIFICATE-----
[下级/中间 CA 证书文本]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[根 CA 证书文本]
-----END CERTIFICATE-----

创建中间证书颁发机构

中间 CA 会创建一个可签发证书的新 CA,但它自身依赖于上层 CA。从方法下拉菜单中选择“创建中间证书颁发机构”。

注意:上层 CA 必须已存在于 pfSense 中(已创建或已导入)。

  • 使用“签名证书授权机构”下拉菜单选择用于签署此中间 CA 的上层 CA。只有包含私钥的 CA 才会显示,因为签署过程必需私钥。
  • 其余参数与创建内部 CA 相同。

编辑证书颁发机构

添加 CA 后,可在 系统 > 证书管理 的 CAs 选项卡编辑。要编辑某个 CA,单击该行末尾的 编辑图标 图标。

此页面上的字段信息可参考“导入现有证书颁发机构”。多数情况下,该页面用于在必要时修正 CA 的序列号,或向导入的 CA 添加私钥,以便用于签发证书和 CRL。

导出证书颁发机构

系统 > 证书管理 的 CAs 选项卡中,可导出 CA 的证书和/或私钥。一般情况下,不应导出 CA 私钥,除非需要迁移 CA 或进行备份。若仅将 CA 用于验证等目的,只需导出 CA 证书。

注意:如果 CA 私钥落入他人之手,对方可生成被该 CA 视为有效的新证书。

导出 CA 证书时,点击 证书图标 图标;导出私钥时,点击 密钥图标 图标。

删除证书颁发机构

删除 CA 前,必须先从所有正在使用它的地方移除:

  • 检查 OpenVPN、IPsec 以及插件等可能使用 CA 的区域。
  • 删除引用该 CA 的条目,或替换为其他 CA。
  • 导航到 系统 > 证书管理,CAs 选项卡
  • 在列表中找到要删除的 CA。
  • 单击该行末尾的 删除图标 图标。
  • 在确认对话框中点击确定。

若出现错误,按提示修正后重试。

证书管理

证书通过 系统 > 证书管理,证书选项卡 进行管理。在此可添加、编辑、导出或删除证书。

创建新的证书

  • 导航到 系统 > 证书管理证书选项卡
  • 点击 添加 新建证书。
  • 输入证书的描述性名称,该名称会在整个 GUI 中用作标签。
  • 选择证书生成方式,包括:

    • 导入现有证书
    • 创建内部证书
    • 创建证书签名请求

导入现有证书

从外部导入已有证书时,选择“导入现有证书”方法。适用于使用其他系统制作的证书或由第三方提供的证书。

  • 输入证书数据(必需)。通常为 .crt 结尾的纯文本文件,内容类似:
-----BEGIN CERTIFICATE-----
[一段 base64 编码的随机数据]
-----END CERTIFICATE-----
  • 输入私钥数据(必需)。通常为 .key 结尾的纯文本文件,内容类似:
-----BEGIN RSA PRIVATE KEY-----
[一段 base64 编码的随机数据]
-----END RSA PRIVATE KEY-----
  • 点击 保存 完成导入。

若出现错误,按提示说明解决问题。

创建内部证书

最常用的方法,使用已有的 CA 签发新证书。

  • 选择用于签署证书的证书颁发机构。列表中仅显示包含私钥的 CA。
  • 选择密钥长度,通常使用默认值 2048。
  • 选择摘要算法,建议优先选用 SHA256 等比 SHA1 更强的算法。
  • 选择符合证书用途的类型:

    • 服务器证书:用于 VPN 服务器或 HTTPS 服务器。该类型包含“扩展密钥用法”属性标识服务器身份验证,以及 Microsoft OID 1.3.6.1.5.5.8.2.2 表示可用于 IKE 中介。Windows 7 及更高版本需要此属性以信任服务器证书。同时标记为约束条件表明不是 CA,且 nsCertType 设为 “server”。
    • 用户证书:用于终端用户(如 VPN 客户端),不能作为服务器使用,可防止用户证书模拟服务器。该类包含客户端身份验证的扩展密钥用法,并标记为不是 CA 的约束。
    • 证书权限:用于创建中间 CA。以此方式生成的证书将从属于所选 CA,虽能签发自己的证书,但在与根 CA 一起验证时必须同时包含,也称为“链式”结构。
  • 输入有效期天数,推荐 3650 天(约 10 年)。
  • 填写专有名称各字段,多数会从 CA 预填。同样禁止使用标点和特殊字符。

    • 选择国家代码(ISO 标准)。
    • 输入完整省份名称。
    • 输入城市名称。
    • 输入组织名称。
    • 输入电子邮件地址。
    • 输入公用名称 (CN)。证书的 CN 应为用户名或主机名,如 “VPNCert”、“user01” 或 “VPNrouter.example.com”。

注意:尽管技术上有效,但应避免在 CN 中使用空格。

  • 如需添加备用名称,点击 添加图标 图标添加。备用名称允许证书指定多个对 CN 均有效的名称,如不同主机名、附加 IP 地址、URL 或电子邮件地址。如无需要或目的不明,可留空。

    • 选择备用名称类型:DNS (FQDN 或主机名)、IP、URI 或电子邮件。
    • 输入对应类型的值。
    • 单击行末尾的删除图标可移除不需要的备用名称。
  • 单击 保存

若出现错误,按提示修正后再次保存。

创建证书签名请求

选择“证书签名请求”方法会创建一个请求文件,可发送给第三方 CA 进行签名,适用于从受信根 CA 获取证书。其它参数与创建内部证书相同。

导出证书

系统 > 证书管理 的证书选项卡中,可导出证书及私钥。

要导出证书,点击证书图标;导出私钥,点击密钥图标;以 PKCS#12 格式导出,点击 存档图标 图标。

下载的文件以证书描述性名称命名,扩展名分别为 .crt.key.p12

删除证书

删除证书前,必须先从使用它的地方移除:

  • 检查 WebGUI 选项、OpenVPN、IPsec 及插件等。
  • 删除使用该证书的条目或更换为其他证书。
  • 导航到 系统 > 证书管理,证书选项卡
  • 找到要删除的证书。
  • 单击行末尾的删除图标。
  • 在确认对话框中点击确定。

若出现错误,按屏幕提示修正后重试。

用户证书

使用需要用户证书的 VPN 时,可根据身份验证所在位置以及证书是否已存在来选择创建方式。

无认证或外部认证

如果没有用户身份验证,或在外部服务器(RADIUS、LDAP 等)上进行验证,可直接按前述方式制作用户证书。确保证书类型选择“用户证书”,并将公用名称设置为用户的用户名。

本地身份验证 / 创建用户同时创建证书

若由 pfSense 执行用户身份验证,可在用户管理器内直接创建用户证书:

  • 导航到 系统 > 用户管理
  • 创建一个用户,填写用户名和密码。
  • 在“用户证书”部分选择“创建用户证书”,将显示创建用户证书的简化表单。

    • 输入简短的描述性名称,可以是用户名或如“Bob 的远程访问 * 证书”等。
    • 选择合适的证书颁发机构。
    • 如有必要,调整密钥长度和有效期。
  • 完成其他用户详细信息。
  • 点击 保存

本地认证 / 向现有用户添加证书

  • 导航到 系统 > 用户管理
  • 点击编辑图标编辑该用户。
  • 在“用户证书”下点击添加图标。
  • 根据需要创建新证书,或选择“选择现有证书”。

证书吊销列表管理

证书吊销列表(CRL)用于发布不应再受信任的证书清单。CRL 使用 CA 私钥生成并签名,因此在 GUI 中为 CRL 创建或添加证书时,CA 的私钥必须存在。若 CA 由外部管理且私钥不在防火墙上,仍可生成 CRL 并导入。

传统用法是每个 CA 只有一个 CRL,仅将失效证书加入其中。但在 pfSense 中,一个 CA 可创建多个 CRL。OpenVPN 可为不同 VPN 实例选择不同 CRL,例如阻止特定证书连接某个实例而允许连接另一个。对于 IPsec,则会查询所有 CRL,且不支持像 OpenVPN 那样的选择性配置。

证书吊销列表通过 系统 > 证书管理,证书吊销选项卡 管理。在此页面可添加、编辑、导出或删除 CRL 条目。列表显示所有 CA 以及添加 CRL 的选项,并注明 CRL 是内部还是外部(导入),同时展示每个 CRL 上已吊销的证书数量。

创建新的证书吊销列表

  • 导航到 系统 > 证书管理证书吊销选项卡
  • 找到要为其创建 CRL 的 CA 行。
  • 单击该行末尾的添加图标,新建 CRL。
  • 选择“创建内部证书吊销列表”。
  • 为 CRL 输入描述性名称,建议包含 CA 名称和/或用途。
  • 从证书颁发机构下拉菜单中选择合适的 CA。
  • 输入有效期,默认 9999 天(约 27 年半)。
  • 点击 保存

页面将返回 CRL 列表,新条目会出现在其中。

导入现有的证书吊销列表

从外部导入 CRL:

  • 导航到 系统 > 证书管理证书吊销选项卡
  • 找到将导入 CRL 的 CA 行。
  • 单击该行末尾的添加图标,导入 CRL。
  • 选择“导入现有证书吊销列表”。
  • 输入描述性名称,并选择合适的 CA。
  • 输入 CRL 数据。通常为 .crl 结尾的纯文本文件,内容类似:
-----BEGIN X509 CRL-----
[一段 base64 编码的随机数据]
-----END X509 CRL-----
  • 点击 保存 完成导入。

若出现错误,按提示修正后重试。

导出证书吊销列表

系统 > 证书管理 的证书吊销选项卡中,点击 下载图标 图标即可导出 CRL。

删除证书吊销列表

  • 检查 OpenVPN 等可能使用 CRL 的区域。
  • 移除使用该 CRL 的条目或切换为其他 CRL。
  • 导航到 系统 > 证书管理证书吊销选项卡
  • 找到要删除的 CRL。
  • 单击该行末尾的删除图标。
  • 在确认对话框上点击确定。

若出现错误,按提示修正后重试。

撤销证书

将证书添加到 CRL 即可吊销:

  • 导航到 系统 > 证书管理证书吊销选项卡
  • 找到要编辑的 CRL,单击该行末尾的编辑图标。页面会列出当前已吊销的证书及添加新证书的功能。
  • 从“选择要撤销的证书”列表中选择证书。
  • 从下拉菜单中选择吊销原因(仅信息性,不影响有效性),可保留默认值。
  • 点击 添加,证书即被加入 CRL。

在当前页面也可从 CRL 中删除证书:

  • 导航到 系统 > 证书管理证书吊销选项卡
  • 点击要编辑的 CRL 行的编辑图标。
  • 在列表中找到证书,单击删除图标将其从 CRL 移除。
  • 在确认对话框点击确定。

添加或删除证书后,若任何 VPN 实例正使用该 CRL,CRL 将被重写,更改立即生效。

更新导入的证书吊销列表

更新导入的 CRL:

  • 导航到 系统 > 证书管理证书吊销选项卡
  • 找到要编辑的 CRL,单击编辑图标。
  • 清空 CRL 数据框中的内容,粘贴新 CRL 的内容。
  • 点击 保存

更新导入的 CRL 后,若正被 VPN 实例使用,更改立即生效。

觉得内容不错?我要

评论 暂无评论
暂无评论,快来抢沙发吧~