8.2. 自动注册
在自动注册中,当用户通过身份验证插件模块中设置的方法成功进行身份验证时,将立即处理最终用户注册请求;不需要代理批准。提供了以下身份验证插件模块:
- 基于目录的注册.最终实体使用其用户 ID 和密码或其 DN 和密码对 LDAP 目录进行身份验证。请参阅 第 8.2.1 节 “设置基于目录的身份验证”。
- 基于 PIN 的注册。最终实体使用其目录条目中设置的用户 ID、密码和 PIN 验证。请参阅 第 8.2.2 节 “设置基于 PIN 的注册”。
- 基于证书的身份验证.某种类型的实体 - 最终用户和其他实体(如服务器或令牌)都使用 CA 发布的证书进行身份验证以证明其身份。这最常用于续订,其中显示原始证书来验证续订过程。请参阅 第 8.2.3 节 “使用基于证书的身份验证”。
AgentCertAuth.如果提交请求的实体作为子系统代理进行身份验证,则此方法会自动批准证书请求。用户通过提供代理证书作为代理进行身份验证。如果显示的证书被子系统识别为代理证书,则 CA 会自动处理证书请求。
这种自动身份验证形式可与证书配置文件关联,以注册服务器证书。
此插件默认是启用的,没有参数。
- 基于文件的无格式注册.专门用于路由器(SCEP)注册,会使用文本文件,其中包含 IP 地址、主机名或其他标识符和密码的列表,通常是随机 PIN。路由器使用其 ID 和 PIN 向 CA 进行身份验证,然后 CA 会将提供的凭证与文本文件中的身份列表进行比较。请参阅 第 8.2.4 节 “配置平面文件身份验证”。
8.2.1. 设置基于目录的身份验证
UidPwdDirAuth
和 UdnPwdDirAuth
插件模块实施基于目录的身份验证。最终用户通过提供其用户 ID 或 DN 和密码以向 LDAP 目录进行身份验证来注册证书。
创建
UidPwdDirAuth
或UdnPwdDirAuth
身份验证插件模块的实例,并配置实例。打开 CA 控制台。
# pkiconsole -d nssdb -n 'optional client cert nickname' https://server.example.com:8443/ca
注意pkiconsole
已被弃用,并将在以后的主发行版本中被新的基于浏览器的 UI 替代。虽然pkiconsole
在发布替代 UI 之前继续可用,但我们鼓励在此鼓励使用命令行与pkiconsole
等效,因为 pki CLI 将继续支持并在将来有新的基于浏览器的 UI 时受到改进。在 Configuration 选项卡中,选择导航树中的 Authentication。
右侧窗格显示 Authentication Instance 选项卡,它列出了当前配置的验证实例。
注意UidPwdDirAuth
插件默认启用。点
。此时会出现 Select Authentication Plug-in Implementation 窗口。
-
选择
UidPwdDirAuth
用于用户 ID 和密码身份验证,或者选择UdnPwdDirAuth
用于 DN 和密码身份验证。 在 Authentication Instance Editor 窗口中填写以下字段:
- 身份验证实例 ID。接受默认实例名称,或者输入新名称。
- dnpattern.指定代表来自目录属性和条目 DN 的主体名称模式的字符串。
- ldapStringAttributes.指定应被视为最终实体的 LDAP 字符串属性列表。如果指定,与这些属性对应的值将从身份验证目录复制到身份验证令牌中,并由证书配置文件用来生成主题名称。为此参数输入值是可选的。
ldapByteAttributes.指定应被视为最终实体的 LDAP 字节(二进制)属性的列表。如果指定,与这些属性对应的值将从身份验证目录中复制到由其他模块使用的身份验证令牌中,如向用户证书添加其他信息。
为此参数输入值是可选的。
- ldap.ldapconn.host.指定身份验证目录的完全限定域名。
- ldap.ldapconn.port.指定身份验证目录侦听请求的 TCP/IP 端口;如果选择了 ldap.ldapconn.secureConn. 复选框,则这应为 SSL 端口号。
- ldap.ldapconn.secureConn.指定身份验证目录侦听证书系统请求的端口的类型、SSL 或非 SSL。如果这是 SSL 端口,请选择。
-
ldap.ldapconn.version.指定 LDAP 协议版本,可以是
2
或3
。默认值为3
,因为比版本 3.x 之后的所有目录服务器都是 LDAPv3。 -
ldap.basedn.指定用于搜索身份验证目录的基本 DN。服务器使用 HTTP 输入中的
uid
字段的值(用户以注册表单输入)和基本 DN 来构造 LDAP 搜索过滤器。 -
ldap.minConns.指定身份验证目录允许的最小连接数。允许的值是
1
到3
。 -
ldap.maxConns.指定身份验证目录允许的最大连接数。允许的值是
3
到10
。
- 点 。身份验证实例已设置并启用。
通过为特定证书设置策略,设置证书配置文件,以用于注册用户。通过在证书配置文件中配置输入来自定义注册表单,并为插件验证用户所需的信息包含输入。如果默认输入不包含需要收集的所有信息,请提交使用第三方工具创建的请求。
有关配置配置集的详情,请参考 第 3.7.2 节 “将 LDAP 目录属性值和其他信息插入到 subject alt name 中”。
设置绑定的 LDAP 连接
有些环境需要禁止对用于身份验证的 LDAP 服务器进行匿名绑定。要在 CA 和 LDAP 服务器之间创建绑定连接,您需要进行以下配置更改:
根据
CS.cfg
中的以下示例设置基于目录的身份验证:auths.instance.UserDirEnrollment.ldap.ldapBoundConn=true auths.instance.UserDirEnrollment.ldap.ldapauth.authtype=BasicAuth auths.instance.UserDirEnrollment.ldap.ldapauth.bindDN=cn=Directory Manager auths.instance.UserDirEnrollment.ldap.ldapauth.bindPWPrompt=externalLDAP externalLDAP.authPrefix=auths.instance.UserDirEnrollment cms.passwordlist=internaldb,replicationdb,externalLDAP
其中 bindPWPrompt 是
password.conf
文件中使用的标签或提示;它也是 cms.passwordlist 和 authPrefix 选项下使用的名称。使用
password.conf
中的密码从CS.cfg
添加标签或提示:externalLDAP=your_password
设置外部授权
也可以配置基于目录的身份验证插件来评估用户的组成员资格以进行身份验证。要设置插件,必须在 CS.cfg
中配置以下选项:
-
groupsEnable 是一个布尔值选项,它允许检索组。默认值为
false
。 - groupBasedn 是组的基本 DN。当它与默认的 basedn 不同时,需要指定它。
-
group 是组的 DN 组件。默认值为
ou=groups
。 -
groupObjectClass 是以下组对象类之一:
groupofuniquenames
,groupofnames
.默认值为groupofuniquenames
。 -
groupUseridName 是组对象成员属性中的用户 ID 属性的名称。默认值为
cn
。 -
useridName 是用户 ID DN 组件的名称。默认值为
uid
。 -
searchGroupUserByUserdn 是一个布尔值选项,它决定是否搜索 userdn 或
${groupUserIdName}=${uid}
属性的组对象成员属性。默认值为true
。
例如:
auths.instance.UserDirEnrollment.pluginName=UidPwdDirAuth auths.instance.UserDirEnrollment.ldap.basedn=cn=users,cn=accounts,dc=local auths.instance.UserDirEnrollment.ldap.groupObjectClass=groupofnames auths.instance.UserDirEnrollment.ldap.groups=cn=groups auths.instance.UserDirEnrollment.ldap.groupsBasedn=cn=accounts,dc=local auths.instance.UserDirEnrollment.ldap.groupsEnable=true auths.instance.UserDirEnrollment.ldap.ldapconn.host=local auths.instance.UserDirEnrollment.ldap.ldapconn.port=636 auths.instance.UserDirEnrollment.ldap.ldapconn.secureConn=true
最后,您必须修改 /instance_path/ca/profiles/ca/profile_id.cfg
文件,以便配置配置集以使用 CS.cfg
中定义的 UserDirEnrollment
auth 实例,如果适当,请根据组提供授权的 ACL。例如:
auth.instance_id=UserDirEnrollment authz.acl=group="cn=devlab-access,ou=engineering,dc=example,dc=com"
8.2.2. 设置基于 PIN 的注册
基于 PIN 的身份验证涉及为 LDAP 目录中的每个用户设置 PIN,将这些 PIN 分发到用户,然后在填充证书请求时提供 PIN 以及其用户 ID 和密码。然后,用户会针对 LDAP 目录使用其用户 ID 和密码以及 LDAP 条目中 PIN 进行身份验证。当用户成功进行身份验证时,会自动处理请求并发出新证书。
证书系统提供了一个工具 setpin
,它将 PIN 的必要模式添加到目录服务器中,并为每个用户生成 PIN。
PIN 工具执行以下功能:
- 将 PIN 的必要模式添加到 LDAP 目录中。
- 添加对设定的 PINs 具有读写权限的 PIN 管理器用户。
- 设置 ACI 以允许在使用 PIN 后进行 PIN 移除,为 PIN 提供读写权限,并阻止用户创建或更改 PIN。
- 在每个用户条目中创建 PIN。
使用 PIN 工具添加 PIN 所需的模式,将 PIN 添加到用户条目中,然后将 PIN 分发到用户。
-
打开
/usr/share/pki/native-tools/
目录。 -
在文本编辑器中打开
setpin.conf
文件。 按照文件中列出的说明进行适当的更改。
通常,需要更新的参数是 Directory 服务器的主机名、目录管理器的绑定密码以及 PIN 管理器的密码。
使用指向
setpin
.confoptfile
选项运行 setpin 命令。# setpin optfile=/usr/share/pki/native-tools/setpin.conf
该工具使用新属性(默认为 pin )和新对象类(默认为
pin
Personpinmanager
用户,并将 ACI 设置为只允许pinmanager
用户修改pin
属性。要为特定用户条目或提供用户定义的 PIN 生成 PIN,请使用列出的条目的 DN 创建输入文件。例如:
dn:uid=bjensen,ou=people,dc=example,dc=com dn:uid=jsmith,ou=people,dc=example,dc=com dn:jtyler,ou=people,dc=example,dc=com ...
-
打开
禁用
setpin
命令的设置模式。注释掉setup
行,或者将值更改为 no。# vim /usr/share/pki/native-tools/setpin.conf setup=no
设置模式创建所需的 uers 和 对象类,但工具在设置模式下不会生成 PIN。
运行
setpin
命令在目录中创建 PIN。TIPtest-run 工具首先没有 写 选项来生成 PIN 列表,而无需实际更改目录。
例如:
# setpin host=yourhost port=9446 length=11 input=infile output=outfile write "binddn=cn=pinmanager,o=example.com" bindpw="password" basedn=o=example.com "filter=(uid=u)" hash=sha256*
WARNING不要将 hash 参数设置为
none
。运行带有hash=none
的setpin
命令会导致 pin 以纯文本形式存储在用户 LDAP 条目中。在完成设置所需的验证方法后,使用输出文件向用户提供 PIN。
确认基于 PIN 的注册可以正常工作后,向用户提供 PIN,以便在注册过程中使用它们。要保护 PIN 的隐私,请使用安全、带外发送方法。为证书配置集中的特定证书设置策略以注册用户。有关证书配置文件策略的详情,请查看 第 3 章 证书配置文件(获取证书的规则)。创建并配置
UidPwdPinDirAuth
身份验证插件的实例。打开 CA 控制台。
# pkiconsole -d nssdb -n 'optional client cert nickname' https://server.example.com:8443/ca
注意pkiconsole
已被弃用,并将在以后的主发行版本中被新的基于浏览器的 UI 替代。虽然pkiconsole
在发布替代 UI 之前继续可用,但我们鼓励在此鼓励使用命令行与pkiconsole
等效,因为 pki CLI 将继续支持并在将来有新的基于浏览器的 UI 时受到改进。在 Configuration 选项卡中,选择导航树中的 Authentication。
右侧窗格显示 Authentication Instance 选项卡,它列出了当前配置的验证实例。
点
。此时会出现 Select Authentication Plug-in Implementation 窗口。
-
选择
UidPwdPinDirAuth
插件模块。 在 Authentication Instance Editor 窗口中填写以下字段:
- 身份验证实例 ID。接受默认实例名称或输入新名称。
- removePin.设置在最终用户成功验证后是否从身份验证目录中删除 PIN。从目录中删除 PIN 会限制用户注册多次,从而防止他们获得多个证书。
-
pinAttr.指定 PIN 的身份验证目录属性。
PIN Generator
工具将 属性设置为setpin.conf
文件中的objectclass
参数的值;此参数的默认值是pin
。 - dnpattern.指定代表来自目录属性和条目 DN 的主体名称模式的字符串。
- ldapStringAttributes.指定应被视为最终实体的 LDAP 字符串属性列表。为此参数输入值是可选的。
ldapByteAttributes.指定应被视为最终实体的 LDAP 字节(二进制)属性的列表。如果指定,与这些属性对应的值将从身份验证目录中复制到由其他模块使用的身份验证令牌中,如向用户证书添加其他信息。
为此参数输入值是可选的。
- ldap.ldapconn.host.指定身份验证目录的完全限定域名。
- ldap.ldapconn.port.指定身份验证目录侦听证书系统请求的 TCP/IP 端口。
- ldap.ldapconn.secureConn.指定身份验证目录侦听请求的端口的类型、SSL 或非 SSL。如果这是 SSL 端口,请选择。
-
ldap.ldapconn.version.指定 LDAP 协议版本,可以是
2
或3
。默认情况下,这是3
,因为所有大于 3.x 的目录服务器版本都是 LDAPv3。 - ldap.ldapAuthentication.bindDN.将用户条目指定为在从身份验证目录中删除 PIN 时要绑定的用户条目。只有在选择了 removePin 复选框时才指定此参数。建议只有一个权限只修改目录中 PIN 属性的独立用户条目。例如,不要使用 Directory Manager 的条目,因为它有修改整个目录内容的权限。
-
密码.提供与
ldap.ldapauthbindDN
参数指定的 DN 关联的密码。保存更改时,服务器将密码存储在单点登录密码缓存中,并将其用于后续启动。只有选择了 removePin 复选框时,才需要设置此参数。 -
ldap.ldapAuthentication.clientCertNickname.指定用于删除 PIN 身份验证的 SSL 客户端身份验证的证书 nickname。确保证书有效,并由在身份验证目录的证书数据库中信任的 CA 签名,并且身份验证目录的
certmap.conf
文件已被配置,以正确地将证书映射到目录中的 DN。这只适用于 PIN 删除。 ldap.ldapAuthentication.authtype.指定身份验证类型、基本身份验证或 SSL 客户端身份验证,以便从身份验证目录中删除 PIN。
- basicAuth 指定基本身份验证。使用此选项时,为 ldap.ldapAuthentication.bindDN 和密码 参数输入正确的值;服务器使用 ldap. ldapAuthentication.bindDN 属性中的 DN 来绑定到目录。
-
SSLclientAuth 指定 SSL 客户端身份验证。使用此选项时,将 ldap.ldapconn.secureConn 参数的值设置为
true
,并将 ldap.ldapAuthentication.clientCertNickname 参数的值设置为用于 SSL 客户端身份验证的证书 nickname。
-
ldap.basedn.指定用于搜索身份验证目录的基本 DN;服务器使用 HTTP 输入中的
uid
字段的值(用户以注册表单输入)和基本 DN 来构造 LDAP 搜索过滤器。 -
ldap.minConns.指定身份验证目录允许的最小连接数。允许的值是
1
到3
。 -
ldap.maxConns.指定身份验证目录允许的最大连接数。允许的值是
3
到10
。
点
。- 通过在证书配置文件中配置输入来自定义注册表单。包含插件验证用户身份所需的信息。如果默认输入不包含需要收集的所有信息,请提交使用第三方工具创建的请求。
8.2.3. 使用基于证书的身份验证
当显示证书验证请求者的身份并自动验证正在提交的请求时,基于证书的身份验证。当原始证书由用户、服务器和应用以及该证书验证请求时,这最常用于续订过程。
在其他情况下,初始请求证书时,使用基于证书的身份验证可能很有用。例如,令牌可能会使用通用证书批量加载,这些证书随后在注册用户证书时用来验证用户,或者用户也可以发出签名证书,然后用来验证其对加密证书的请求。
基于证书的身份验证模块 SSLclientCertAuth
默认启用,在任何自定义证书配置文件中可以引用此身份验证方法。
8.2.4. 配置平面文件身份验证
路由器证书使用随机生成的 PIN 注册和验证。CA 使用 flatFileAuth
身份验证模块来处理包含路由器身份验证凭证的文本文件。
8.2.4.1. 配置 flatFileAuth 模块
已经为 SCEP 注册配置了无格式文件身份验证,但可以编辑平面文件的位置及其身份验证参数。
打开 CA 控制台。
# pkiconsole -d nssdb -n 'optional client cert nickname' https://server.example.com:8443/ca
注意pkiconsole
已被弃用,并将在以后的主发行版本中被新的基于浏览器的 UI 替代。虽然pkiconsole
在发布替代 UI 之前继续可用,但我们鼓励在此鼓励使用命令行与pkiconsole
等效,因为 pki CLI 将继续支持并在将来有新的基于浏览器的 UI 时受到改进。- 在 Configuration 选项卡中,选择导航树中的 Authentication。
选择 flatFileAuth 身份验证模块。
- 单击 。
要更改文件位置和名称,请重置 fileName 字段。
要更改身份验证名称参数,请将 keyAttributes 值重置为 SCEP 注册表单中提交的另一个值,如 CN。您还可以通过逗号分隔多个名称参数,如
UID、CN
。要更改密码参数名称,请重置authAttributes
字段。- 保存编辑。
8.2.4.2. 编辑 flatfile.txt
相同的 flatfile.txt
文件用于验证每个 SCEP 注册。每次向路由器发出新 PIN 时,必须手动更新此文件。
默认情况下,此文件位于 /var/lib/pki/pki-ca/ca/conf/
中,每个身份验证条目指定了两个参数,即站点的 UID (通常是其 IP 地址,可以是 IPv4 或 IPv6)以及路由器发布的 PIN。
UID:192.168.123.123 PIN:HU89dj
每个条目后面必须跟一个空行。例如:
UID:192.168.123.123 PIN:HU89dj UID:12.255.80.13 PIN:fiowIO89 UID:0.100.0.100 PIN:GRIOjisf
如果身份验证条目不用空行分隔,那么当路由器尝试向 CA 进行身份验证时,将失败。例如:
... flatfile.txt entry ... UID:192.168.123.123 PIN:HU89dj UID:12.255.80.13 PIN:fiowIO89 ... error log entry ... [13/Jun/{YEAR}:13:03:09][http-9180-Processor24]: FlatFileAuth: authenticating user: finding user from key: 192.168.123.123 [13/Jun/{YEAR}:13:03:09][http-9180-Processor24]: FlatFileAuth: User not found in password file.