pfSense book之证书管理

证书管理

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

X.509公钥基础知识介绍

VPN的其中一个身份验证选项是使用X.509密钥,关于X.509和公共密钥基础设施(PKI)的深入讨论超出了本书的范围。本章提供了在pfSense中创建和管理证书所必需的基本知识。

使用PKI,首先创建一个证书颁发机构(CA)。此CA随后在PKI中签署所有单个证书。 VPN的服务器和客户端使用CA的证书来验证所使用的服务器和客户端证书的真实性。 CA的证书可用于验证对证书的签名,但不能签署证书。签署证书需要CA的私钥。 CA私钥的秘密是确保PKI安全的保证。任何有权访问CA私钥的人都可以生成要在PKI上使用的证书,因此必须保证其安全。此密钥绝不会分发给客户端或服务器。

注意:切勿将文件复制到多个客户端,因为这可能会危及PKI的安全。

如果证书已被给定的CA信任,则该证书被认为是有效的。在这种情况下,这意味着从特定CA制作的证书对于使用该CA的任何VPN都将被视为有效。因此,最佳做法是为每个具有不同安全级别的VPN创建一个唯一的CA。例如,如果有两个具有相同安全访问权限的移动端接入VPN,那么对这些VPN使用相同的CA就可以了。但是,如果一个VPN用于用户,另一个VPN用于远程管理,每个VPN都有不同的限制,则应使用不同的CA。

证书吊销列表(CRL)是已被盗用或需要失效的证书列表。只要使用CA的应用程序也使用CRL,吊销证书将导致它被认为不可信。使用其私钥生成CRL并对CA进行签名,因此为了在GUI中为CRL创建或添加证书,CA的私钥必须存在。

证书权限管理

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

创建一个新的证书授权

要创建一个新的CA,请进行如下操作

  • 导航到系统>证书管理,CAs选项卡
  • 点击添加创建一个新的CA。
  • 为CA输入一个描述性名称。 这在整个GUI中用作此CA的标识。
  • 选择最适合如何生成CA的方法。 包括:
  • 创建一个内部证书颁发机构
  • 导入现有的证书颁发机构
  • 创建中间证书颁发机构

创建一个内部认证中心

最常用的方法是创建一个内部证书颁发机构。

  • 选择密钥长度以选择CA在加密方面的“强壮”程度。 密钥越长,它就越安全。 但是,较长的密钥可能需要更多的CPU时间来处理,因此使用最大值并不总是明智的。 默认值2048能较好的平衡安全和性能。
  • 从提供的列表中选择摘要算法。 目前的最佳做法是在可能的情况下使用比SHA1更强大的算法。 SHA256是一个不错的选择。

注意:一些较老或较不复杂的设备(例如支持VPN的VoIP手机)可能仅支持SHA1用于摘要算法。

  • 输入有效期的值以指定CA将有效的天数。 持续时间取决于个人偏好和网站政策。 频繁更换CA更安全,但这也是一个管理难题,因为它需要在CA过期时重新签发新证书。 默认情况下,建议使用3650天,这大约是10年。
  • 为CA中的个性化参数输入专有名称部分的值。 这些通常根据组织的信息填写,或者在个人信息的情况下填写。 这些信息大多是表面化的,用于验证CA的准确性,并将一个CA与另一个区分开来。 不得使用标点符号和特殊字符。
    • 从列表中选择国家代码。 这是ISO认可的国家代码,而不是主机名顶级域名。
    • 输入完全拼出的州或省,而不是缩写。
    • 输入城市。
    • 输入组织名称,通常是公司名称。
    • 输入一个有效的电子邮件地址。
    • 输入公用名称(CN)。 该字段是标识CA的内部名称。 与证书不同,CA的CN不必是主机名或任何特定的。 例如,它可以被称为VPNCA或MyCA。
  • 单击保存

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

保存后如果出现错误,例如无效字符或其他输入问题,刚会有相应的描述说明。纠正错误后,尝试再次保存。

导入现有的证书颁发机构

如果需要导入来自外部的已有CA,可以通过选择导入现有证书颁发机构的方法来完成。 这可以通过两种方式实现:一种是使用其他系统制作的CA,另一种是由其他人制作的可以信任的CA。

  • 输入CA的证书数据。 要信任另一个来源的CA,只需要CA的证书数据。 它通常包含在以.crt或.pem结尾的文件中。 这将是纯文本,并包含如下内容:

-----BEGIN CERTIFICATE-----
[A bunch of random-looking base64-encoded data]
-----END CERTIFICATE-----
  • 如果导入自定义外部CA或能够生成其自己的证书和证书撤销列表的CA,请输入证书私钥。 这通常在以.key结尾的文件中。 这是如下所示的一个纯文本数据:
-----BEGIN RSA PRIVATE KEY-----
[A bunch of random-looking base64-encoded data]
-----END RSA PRIVATE KEY-----
  • 如果输入了私钥,请输入下一个证书的序列号。 这将至关重要的。 CA将依次创建具有唯一序列号的证书。 此值控制从此CA生成的下一个证书的序列号。 每个证书都必须具有唯一的序列号,否则在证书撤销后会出现问题。 如果下一个序列号未知,请尝试估算已从CA创建了多少个证书,然后将该数字设置得足够高,以避免发生冲突。

  • 单击保存

保存后如果出现错误,例如无效字符或其他输入问题,刚会有相应的描述说明。纠正错误后,尝试再次保存。

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

如果CA已由中间人签名而不是直接由根CA签名,则可能需要将根和中间CA一起导入到一个条目中,例如:

-----BEGIN CERTIFICATE-----
[Subordinate/Intermediate CA certificate text]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[Root CA certificate text]
-----END CERTIFICATE-----

创建中间证书颁发机构

中间CA将创建一个能够生成证书的新CA,但依赖于高于其上的另一个CA。要创建一个,请从方法下拉列表中选择创建一个中间证书颁发机构。

注意:更高级的CA必须已经存在于pfSense(已创建或已导入)

  • 使用签名证书授权机构下拉列表选择较高级别的CA来签署此CA。只有存在私钥的CA才会显示,因为这是正确签署此新CA所必需的。
  • 填写与创建内部证书颁发机构相同的其余参数。

编辑证书颁发机构

添加CA后,可以从系统>证书管理,CAs选项卡中找到的CA列表进行编辑。要编辑一个CA, 在行的末尾单击  图标。出现的页面允许像导入CA一样编辑字段。

有关此页面上字段的信息,请参阅导入现有证书颁发机构。 在大多数情况下,此页面是在需要时更正CA的序列号,或者将密钥添加到导入的CA中,以便用于创建和签署证书和CRL。

导出证书颁发机构

系统>证书管理的CAs选项卡的CA列表中,可以导出CA的证书和/或私钥。 在大多数情况下,CA的专用密钥不会被导出,除非将CA移动到新位置或正在进行备份。 将CA用于***或其他用途时,仅导出CA的证书。

注意

如果CA的私钥进入了错误的人手中,则另一方可以生成对CA认为有效的新证书。

导出CA证书, 单击 图标 。要导出CA私钥,单击  图标 。 将鼠标指针悬停在图标上,工具提示将显示要执行的操作以方便确认。 这些文件将以CA的描述性名称作为文件名下载,证书的扩展名为.crt,私钥为.key。

删除证书颁发机构

要删除CA,首先必须将其从主动使用中删除。

  • 检查可以使用CA的区域,例如OpenVPN,IPsec和插件。
  • 删除使用CA的条目或选择其他CA。
  • 导航到系统>证书管理,CAs选项卡。
  • 找到要在列表中删除的CA。
  • 点击CA行的结尾处的
  • 在确认对话框上单击确定。

如果出现错误,请按照提示进行更正,然后重试。

证书管理

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

创建一个新的证书

要创建新证书,请按以下步骤操作:

  • 导航到系统>证书管理,证书选项卡
  • 点击添加创建一个新的证书。
  • 输入证书的描述性名称。 这在整个GUI中用作此证书的标签。
  • 选择最适合证书生成方式的方法。包括:
    • 导入现有证书
    • 创建一个内部证书
    • 创建证书签名请求

导入现有证书

如果需要导入来自外部源的现有证书,可以通过选择导入现有证书的方法来完成。 这对于使用其他系统制作的证书或由第三方提供的证书很有用。

  • 输入证书数据,这是必需的。它通常包含在以.crt结尾的文件中。这将是纯文本,并包含如下内容:

-----BEGIN CERTIFICATE-----
[A bunch of random-looking base64-encoded data]
-----END CERTIFICATE-----
  • 输入也是必需的私钥数据。这通常在以.key结尾的文件中。这将是一个纯文本数据,例如:

-----BEGIN RSA PRIVATE KEY-----
[A bunch of random-looking base64-encoded data]
-----END RSA PRIVATE KEY-----
  • 点击保存完成导入过程。

如果遇到错误,请按照提示说明去解决问题。

创建一个内部证书

最常用的方法是创建一个内部证书。这将使用现有证书颁发机构中的一个颁发新证书。

  • 选择证书将被签署的证书颁发机构。 只有存在私钥的CA才会在这个列表中,因为CA需要私钥才能签署证书。
  • 选择密钥长度以选择证书在加密方面的“强壮”程度。 一般使用默认值2048。
  • 从提供的列表中选择摘要算法。 目前的最佳做法是在可能的情况下使用比SHA1更强大的算法。 SHA256是一个不错的选择。
    • 选择一个符合此证书用途的证书类型。

      • 如果证书将用于VPN服务器或HTTPS服务器,请选择服务器证书。这表明证书内部可能使用了服务器角色,而没有其他证书。

注意:服务器类型证书包括指示它们可用于服务器身份验证的“扩展密钥用法”属性以及Microsoft使用的OID 1.3.6.1.5.5.8.2.2,以表明证书可用作IKE中介。 这些对于Windows 7及更高版本来说需要信任服务器证书以用于某些类型的VPN。 它们还被标记为约束条件,表明它们不是CA,并且nsCertType设置为“server”。

      • 如果证书可以在最终用户容量(如VPN客户端)中使用,但不能用作服务器,请选择“用户证书”。这可以防止用户使用自己的证书来模拟服务器。

注意:用户类型证书包括扩展密钥用法属性,指示它们可用于客户端身份验证。它们也被标记为指示它们不是CA的约束。

      • 选择证书权限来创建中间CA。以这种方式生成的证书将从属于所选的CA。它可以创建自己的证书,但是在使用根CA时也必须包含它。 这也被称为“chaining(链接)”。

    • 输入有效期的值以指定证书有效的天数。 持续时间取决于个人偏好和网站政策。建议使用3650天,这大约是10年。
    • 为证书中的个性化参数输入专有名称部分的值。 这些字段中的大部分都将预先填入来自CA的数据。 这些通常根据组织的信息填写,或者根据个人信息情况进行填写。 不得使用标点符号和特殊字符。
      • 从列表中选择国家代码。 这是ISO认可的国家代码,而不是主机名顶级域名。
      • 输入完全拼出的州或省,而不是缩写。
      • 输入城市名称。
      • 输入组织名称,通常是公司名称。
      • 输入一个有效的电子邮件地址。
      • 输入公用名称(CN)。 该字段是标识证书的内部名称。 与CA不同,证书的CN应该是用户名或主机名。 例如,它可以称为VPNCert,user01或VPNrouter.example.com。

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

  • 如果需要,单击添加备用名称。 备用名称允许证书指定对CN全部有效的多个名称,例如两个不同的主机名、附加的IP地址、URL或电子邮件地址。 如果不需要或目的不明确,该字段可以留空。

    • 输入备用名称的类型。 这必须包含DNS(FQDN或主机名)、IP(IP地址)、URI或电子邮件之一。
    • 输入备用名称的值。 该字段必须包含基于输入类型的适当格式的值。
    • 单击行末尾的,可以删除不需要的备用名称。
    • 对其他的备用名称重复此过程。
  • 单击保存。

如果出现错误,请根据提示修正,并再次保存。

创建证书签名请求

选择证书签名请求的方法会创建一个新的请求文件,该文件可以发送到第三方CA进行签名。 这将用于从受信任的根证书颁发机构获取证书。 一旦选择了此方法,创建此证书的其余参数与创建内部证书的参数相同。

导出证书

系统>证书管理,证书选项卡中的证书列表中,可以导出证书和其私钥。

要导出证书,单击 图标。 导出证书的私钥,单击 图标。要将CA证书,证书和证书的私钥一起导出到PKCS#12文件中, 单击  图标。 要确认正在导出的文件,将鼠标指针悬停在图标上,将会提示要执行的操作。

这些文件将以证书的描述性名称作为文件名下载,证书的扩展名为.crt,私钥为.key,PKCS#12文件为.p12。

删除证书

要删除证书,首先必须将其从活动使用中删除。

  • 检查使用证书的区域,例如WebGUI选项,OpenVPN,IPsec和插件。
  • 使用证书删除条目,或选择另一个证书。
  • 导航到系统”>证书管理,证书选项卡。
  • 找到要在列表中删除的证书
  • 点击证书行最后图标。
  • 在确认对话框上单击确定。

如果出现错误,请按照屏幕上的说明更正问题,然后重试。

用户证书

如果正在使用需要用户证书的VPN,则可以通过以下几种方式之一来创建VPN。确切的方法取决于VPN的身份验证执行的位置以及证书是否已存在。

无认证或外部认证

如果没有用户身份验证,或者正在外部服务器(RADIUS,LDAP等)上执行用户身份验证,请像上述任何其他证书一样制作用户证书。 确保证书类型选择了用户证书,并将通用名称设置为用户的用户名。

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

如果正在对pfSense执行用户认证,则可以在用户管理器内部制作用户证书。

  • 导航到系统>用户管理。
  • 创建一个用户。
  • 填写用户名和密码。
  • 选择在用户证书部分创建用户证书,该部分将显示用于创建用户证书的简单表单。
    • 输入一个简短的描述性名称,可以是用户名或诸如Bob的远程访问***证书等。
    • 为VPN选择合适的证书颁发机构。
    • 如果需要调整密钥长度和使用期限。
  • 完成其他所需的用户详细信息。
  • 点击保存

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

向现有用户添加证书:

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

证书吊销列表管理

证书吊销列表(CRL)是X.509系统的一部分,用于发布不应再受信任的证书列表。这些证书可能已被盗用或需要它失效。使用CA的应用程序(例如Open***)可以选择使用CRL,以便验证连接的客户端证书。使用其私钥生成CRL并对CA进行签名,因此为了在GUI中为CRL创建或添加证书,CA的私钥必须存在。如果CA是外部管理的,并且CA的私钥不在防火墙上,则CRL仍可能在防火墙之外生成并导入。

使用CRL的传统方式是每个CA只有一个CRL,并且只向该CRL添加无效证书。但是,在pfSense中,可能会为单个CA创建多个CRL。在OpenVPN中,可以为不同的VPN实例选择不同的CRL。例如,这可以用来防止特定证书连接到一个实例,同时允许它连接到另一个实例。对于IPsec,所有CRL都会被咨询,并且目前没有与OpenVPN一起存在的选择。

证书吊销列表通过系统>证书管理,证书吊销选项卡进行管理。在此页面上可以添加、编辑、导出或删除CRL条目。该列表将显示所有证书颁发机构以及添加CRL的选项。还会指出CRL是内部还是外部(导入),并显示每个CRL上已吊销多少个证书的数量。

创建一个新的证书吊销列表

创建新的CRL:

  • 导航到证书系统>证书管理,证书吊销选项卡。
  • 找到将要为其创建CRL的CA行。
  • 单击该行末尾的“添加”或“导入CRL”,创建新的CRL。
  • 选择创建内部证书吊销列表。
  • 为CRL输入描述性名称,该名称用于在GUI的列表中标识此CRL。 通常最好包含对CA名称和/或CRL用途的引用。
  • 从证书颁发机构下拉菜单中选择适当的CA。
  • 输入有效期。 默认值为9999天,即将近27年半。
  • 点击保存

浏览器将返回到CRL列表,新条目将显示在列表中。

导入现有的证书吊销列表

从外部来源导入CRL:

  • 导航到系统>证书管理,证书吊销选项卡。
  • 找到将导入CRL的CA行。
  • 单击该行末尾的“添加”或“导入CRL”,创建新的CRL。
  • 选择导入现有证书吊销列表。
  • 为CRL输入描述性名称,该名称用于在GUI的列表中标识此CRL。 通常最好包含对CA名称和/或CRL用途的引用。
  • 从证书颁发机构下拉菜单中选择适当的CA。
  • 输入CRL数据。 这通常是以.crl结尾的文件。 一般包含如下的纯文本数据:
-----BEGIN X509 CRL-----
[A bunch of random-looking base64-encoded data]
-----END X509 CRL-----
  • 点击保存完成导入过程。

如果出现错误,请按照提示说明更正问题,然后重试。

导出证书吊销列表

系统>证书管理,证书吊销选项卡的CRL列表中,还可以导出CRL。 要导出CRL,请单击图标。 下载的文件以CRL的描述性名称作为文件名,扩展名为.crl。

删除证书吊销列表

  • 检查可以使用CRL的区域,例如OpenVPN。
  • 使用CRL删除条目,或者选择另一个CRL。
  • 导航到系统>证书管理器,证书吊销选项卡。
  • 找到要在列表中删除的CRL。
  • 单击CRL行末尾的图标。
  • 在确认对话框上单击确定。

如果出现错误,请按照提示说明更正问题,然后重试。

撤消证书

除非它包含吊销的证书,否则CRL并不是非常有用。通过将证书添加到CRL来吊销证书

  • 导航到系统>证书管理,证书吊销选项卡。
  • 找到要在列表中编辑的CRL。
  • 单击CRL行末尾的图标。 将显示一个页面,列出当前已撤销的证书以及添加新证书的控件。
  • 选择要撤销的证书列表中选择证书。
  • 从下拉列表中选择一个原因以指示证书被吊销的原因。 这些信息不影响证书的有效性,仅仅是信息性的。 该选项可以保留为默认值。
  • 点击添加,证书将被添加到CRL。

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

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

添加或删除证书后,如果任何VPN实例当前正在使用CRL,CRL将被重写,以便CRL更改立即生效。

更新导入的证书吊销列表

更新导入的CRL:

  • 导航到系统>证书管理,证书吊销选项卡。
  • 找到要在列表中编辑的CRL。
  • 单击CRL行末尾的图标。
  • 清除CRL数据框中粘贴的内容,并将其替换为新CRL的内容。
  • 点击保存。

更新导入的CRL后,如果任何VPN实例当前正在使用该CRL,则CRL更改将立即生效。

此条目发表在pfSense分类目录。将固定链接加入收藏夹。