规划、安装和部署指南
为 Red Hat Certificate System 10.4 更新
Marc Muehlfeld
Petr Bokoč
Filip Hanzelka
Tomáš Čapek
Aneta Petrová
Ella Deon Ballard
摘要
部分 I. 规划如何部署 Red Hat Certificate System
第 1 章 Public-Key Cryptography 简介
- 窃听
- 信息保持不变,但其隐私泄露。例如,某人可以收集信用卡号码、记录敏感对话或拦截分类信息。
- 篡改
- 传输中的信息会被更改或替换,然后发送到接收者。例如,某人可以更改好或改变个人恢复的订单。
- 模拟(Impersonation)
- 信息传递给作为预期接收者的人员。模拟可以采用两种形式:
- 欺骗.个人可以假定成为其他人。例如:一个人可以假定使用电子邮件地址 jdoe@example.net,或者计算机可以假地将自己识别为名为 www.example.net 的站点。
- Misrepresentation。个人或组织可以代表自己。例如:当名为 www.example.net 的网站实际上收到信用卡付款但从未发送任何良好时,可以将其作为在线电影存储。
- 加密和解密
- 加密和解密允许两个通信方互相发送的信息。在发送方之前,发送方加密或 scrambles 信息。接收器在收到信息后解密或取消评分。在传输过程中,加密的信息不适用于入侵者。
- 篡改检测
- 篡改检测允许接收方验证信息在传输中没有被修改。检测到任何修改或替换数据的尝试。
- 身份验证
- 身份验证允许接收者通过确认发件人的身份来确定其来源。
- nonRepudiation
- nonRepudiation 可防止发送信息的发送者在以后不会发送信息。
1.1. 加密和解密
1.1.1. symmetric-Key 加密
图 1.1. symmetric-Key 加密
1.1.2. 公钥加密
图 1.2. 公钥加密
1.1.3. Key Length 和 Encryption Strength
1.2. 数字签名
- 哈希的值对于散列数据是唯一的。对数据的任何更改(甚至删除或更改单个字符)都会生成不同的值。
- 散列数据的内容无法从哈希中推断出来。
图 1.3. 使用数字签名来验证数据完整性
1.3. 证书和验证
1.3.1. 一个证书标识了 someone 或 something
1.3.2. 身份验证确认一个身份
- 基于密码的身份验证
- 基于证书的验证
1.3.2.1. 基于密码的身份验证
- 用户已经信任服务器,无需身份验证,或基于 SSL/TLS 服务器身份验证。
- 用户请求由服务器控制的资源。
- 服务器需要客户端身份验证,然后允许访问所请求的资源。
图 1.4. 使用密码向服务器验证客户端
- 当服务器从客户端请求身份验证时,客户端会显示一个对话框,请求该服务器的用户名和密码。
- 客户端在网络上发送名称和密码,可以是纯文本或加密的 SSL/TLS 连接。
- 服务器在其本地密码数据库中查找名称和密码(如果匹配),则接受它们作为验证用户身份的证据。
- 服务器决定识别的用户是否允许访问所请求的资源,如果允许客户端访问它。
1.3.2.2. 基于证书的身份验证
图 1.5. 使用证书将客户端验证到服务器
- 客户端软件维护一个私钥数据库,该密钥对应于为该客户端发布的任何证书中的公钥。客户端在第一次在给定会话中需要访问这个数据库时(如首次尝试访问启用了证书的 SSL/TLS 服务器时),客户端会要求提供密码。输入此密码后,用户不需要为其余会话再次输入它,即使访问其他启用了 SSL/TLS 的服务器也是如此。
- 客户端解锁 private-key 数据库,检索用户证书的私钥,并使用该私钥从客户端和服务器的输入随机生成数据。这个数据和数字签名是私钥的有效性的证据。数字签名只能使用该私钥创建,并可以根据签名数据使用对应的公钥进行验证,这对 SSL/TLS 会话是唯一的。
- 客户端通过网络发送用户的证书和随机生成的数据。
- 服务器使用证书和签名数据来验证用户的身份。
- 服务器可以执行其他身份验证任务,例如检查客户端提供的证书存储在 LDAP 目录中的用户条目中。然后,服务器会评估识别的用户是否允许访问所请求的资源。此评估过程可以使用各种标准授权机制,可能在 LDAP 目录或公司数据库中使用其他信息。如果评估的结果是正数,服务器则允许客户端访问请求的资源。
1.3.3. 使用证书
1.3.3.1. SSL/TLS
1.3.3.2. 签名和加密的电子邮件
1.3.3.3. 单点登录
1.3.3.4. 对象签名
1.3.4. 证书类型
s
://server.example.com:8443/ca/ee/ca
)提供。
表 1.1. 常见证书
证书类型 | 使用 | 示例 |
---|---|---|
客户端 SSL/TLS 证书 | 用于通过 SSL/TLS 向服务器进行客户端身份验证。通常,假设客户端的身份与个人的身份相同,如员工。有关 SSL/TLS 客户端证书用于客户端验证的方式的信息,请参阅 第 1.3.2.2 节 “基于证书的身份验证”。客户端 SSL/TLS 证书也可以用作单点登录的一部分。 |
银行为客户提供 SSL/TLS 客户端证书,允许银行的服务器识别客户帐户并授权访问客户帐户。
公司提供了一个新员工的 SSL/TLS 客户端证书,允许公司的服务器识别该员工并授权对公司服务器的访问权限。
|
服务器 SSL/TLS 证书 | 用于通过 SSL/TLS 向客户端进行服务器身份验证。在不进行客户端身份验证的情况下,可以使用服务器身份验证。加密 SSL/TLS 会话需要服务器身份验证。如需更多信息,请参阅 第 1.3.3.1 节 “SSL/TLS”。 | 参与电子商业业的互联网通常会支持基于证书的服务器身份验证,以建立加密的 SSL/TLS 会话,并确保客户处理公司标识的网站。加密的 SSL/TLS 会话可确保通过网络发送的个人信息(如信用卡号)无法轻松截获。 |
s/MIME 证书 | 用于签名和加密的电子邮件。与 SSL/TLS 客户端证书一样,假设客户端的身份与个人的身份相同,如员工。单个证书可以同时用作 S/MIME 证书和 SSL/TLS 证书;请参阅 第 1.3.3.2 节 “签名和加密的电子邮件”。s/MIME 证书也可以用作单点登录的一部分。 | 公司部署组合 S/MIME 和 SSL/TLS 证书,以专门验证员工身份,从而允许签名的电子邮件和 SSL/TLS 客户端身份验证,但不加密电子邮件。另一个公司只发出 S/MIME 证书以签发和加密处理敏感财务或法律问题的电子邮件。 |
CA 证书 | 用于识别 CA。客户端和服务器软件使用 CA 证书来确定可信任哪些其他证书。如需更多信息,请参阅 第 1.3.6 节 “CA 证书如何建立信任”。 | Mozilla Firefox 中存储的 CA 证书确定可以验证哪些其他证书。管理员可以通过控制存储在每个用户的 Firefox 副本中的 CA 证书来实施企业安全策略。 |
对象签名证书 | 用于识别 Java 代码、JavaScript 脚本或其他签名文件的签名者。 | 软件公司经常为通过互联网分发的软件签名,为用户提供一些保证,确保该软件是公司的合法产品。使用证书和数字签名也可以让用户识别和控制下载的软件对计算机的访问权限类型。 |
1.3.4.1. CA 签署证书
1.3.4.2. 其他签名证书
1.3.4.3. SSL/TLS 服务器和客户端证书
1.3.4.4. 用户证书
1.3.4.5. dual-Key Pairs
1.3.4.6. 跨证书
1.3.5. 证书内容
1.3.5.1. 证书数据格式
1.3.5.1.1. 二进制
- DER 编码的证书.这是单个二进制 DER 编码的证书。
- PKCS #7 证书链.这是一个 PKCS #7 SignedData 对象。SignedData 对象中的唯一重要字段是证书;例如,签名和内容将被忽略。PKCS #7 格式允许一次下载多个证书。
- Netscape 证书序列.这是在 PKCS #7 ContentInfo 结构中下载证书链的更简单格式,嵌套一系列证书。contentType 字段的值应该是 netscape-cert-sequence,而 content 字段具有以下结构:
CertificateSequence ::= SEQUENCE OF Certificate
此格式允许同时下载多个证书。
1.3.5.1.2. 文本
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
1.3.5.2. 区分名称
uid=doe, cn=John Doe,o=Example Corp.,c=US
1.3.5.3. Typical 证书
- data 部分
- 本节包括以下信息:
- 证书支持的 X.509 标准的版本号。
- 证书的序列号。CA 发布的每个证书都有一个序列号,该序列号在该 CA 发布的证书之间是唯一的。
- 有关用户公钥的信息,包括所用的算法和密钥本身的表示形式。
- 发布证书的 CA 的 DN。
- 证书有效的期间;例如,2004 年 11 月 15 日下午 1:00 到 1:00 p.m 之间的时段。2022 年 11 月 15 日。
- 证书主题的 DN (也称为主题名称);例如,在 SSL/TLS 客户端证书中,这是用户的 DN。
- 可选 的证书扩展,它可能会提供客户端或服务器使用的额外数据。例如:
- Netscape 证书类型扩展表示证书类型,如 SSL/TLS 客户端证书、SSL/TLS 服务器证书或签名电子邮件的证书
- 主题备用名称(SAN)扩展将证书链接到一个或多个主机名
证书扩展也可以用于其他目的。
- 签名部分
- 本节包括以下信息:
- 发布 CA 用来创建自己的数字签名的加密算法或密码。
- CA 的数字签名,将证书中的所有数据哈希到一起,并使用 CA 的私钥对其进行加密。
Certificate: Data: Version: v3 (0x2) Serial Number: 3 (0x3) Signature Algorithm: PKCS #1 MD5 With RSA Encryption Issuer: OU=Example Certificate Authority, O=Example Corp, C=US Validity: Not Before: Fri Oct 17 18:36:25 1997 Not After: Sun Oct 17 18:36:25 1999 Subject: CN=Jane Doe, OU=Finance, O=Example Corp, C=US Subject Public Key Info: Algorithm: PKCS #1 RSA Encryption Public Key: Modulus: 00:ca:fa:79:98:8f:19:f8:d7:de:e4:49:80:48:e6:2a:2a:86: ed:27:40:4d:86:b3:05:c0:01:bb:50:15:c9:de:dc:85:19:22: 43:7d:45:6d:71:4e:17:3d:f0:36:4b:5b:7f:a8:51:a3:a1:00: 98:ce:7f:47:50:2c:93:36:7c:01:6e:cb:89:06:41:72:b5:e9: 73:49:38:76:ef:b6:8f:ac:49:bb:63:0f:9b:ff:16:2a:e3:0e: 9d:3b:af:ce:9a:3e:48:65:de:96:61:d5:0a:11:2a:a2:80:b0: 7d:d8:99:cb:0c:99:34:c9:ab:25:06:a8:31:ad:8c:4b:aa:54: 91:f4:15 Public Exponent: 65537 (0x10001) Extensions: Identifier: Certificate Type Critical: no Certified Usage: TLS Client Identifier: Authority Key Identifier Critical: no Key Identifier: f2:f2:06:59:90:18:47:51:f5:89:33:5a:31:7a:e6:5c:fb:36: 26:c9 Signature: Algorithm: PKCS #1 MD5 With RSA Encryption Signature: 6d:23:af:f3:d3:b6:7a:df:90:df:cd:7e:18:6c:01:69:8e:54:65:fc:06: 30:43:34:d1:63:1f:06:7d:c3:40:a8:2a:82:c1:a4:83:2a:fb:2e:8f:fb: f0:6d:ff:75:a3:78:f7:52:47:46:62:97:1d:d9:c6:11:0a:02:a2:e0:cc: 2a:75:6c:8b:b6:9b:87:00:7d:7c:84:76:79:ba:f8:b4:d2:62:58:c3:c5: b6:c1:43:ac:63:44:42:fd:af:c8:0f:2f:38:85:6d:d6:59:e8:41:42:a5: 4a:e5:26:38:ff:32:78:a1:38:f1:ed:dc:0d:31:d1:b0:6d:67:e9:46:a8: d:c4
-----BEGIN CERTIFICATE----- MIICKzCCAZSgAwIBAgIBAzANBgkqhkiG9w0BAQQFADA3MQswCQYDVQQGEwJVUzER MA8GA1UEChMITmV0c2NhcGUxFTATBgNVBAsTDFN1cHJpeWEncyBDQTAeFw05NzEw MTgwMTM2MjVaFw05OTEwMTgwMTM2MjVaMEgxCzAJBgNVBAYTAlVTMREwDwYDVQQK EwhOZXRzY2FwZTENMAsGA1UECxMEUHViczEXMBUGA1UEAxMOU3Vwcml5YSBTaGV0 dHkwgZ8wDQYJKoZIhvcNAQEFBQADgY0AMIGJAoGBAMr6eZiPGfjX3uRJgEjmKiqG 7SdATYazBcABu1AVyd7chRkiQ31FbXFOGD3wNktbf6hRo6EAmM5/R1AskzZ8AW7L iQZBcrXpc0k4du+2Q6xJu2MPm/8WKuMOnTuvzpo+SGXelmHVChEqooCwfdiZywyZ NMmrJgaoMa2MS6pUkfQVAgMBAAGjNjA0MBEGCWCGSAGG+EIBAQQEAwIAgDAfBgNV HSMEGDAWgBTy8gZZkBhHUfWJM1oxeuZc+zYmyTANBgkqhkiG9w0BAQQFAAOBgQBt I6/z07Z635DfzX4XbAFpjlRl/AYwQzTSYx8GfcNAqCqCwaSDKvsuj/vwbf91o3j3 UkdGYpcd2cYRCgKi4MwqdWyLtpuHAH18hHZ5uvi00mJYw8W2wUOsY0RC/a/IDy84 hW3WWehBUqVK5SY4/zJ4oTjx7dwNMdGwbWfpRqjd1A== -----END CERTIFICATE-----
1.3.6. CA 证书如何建立信任
1.3.6.1. CA 层次结构
图 1.6. 证书颁发机构层次结构示例
1.3.6.2. 证书链
图 1.7. 证书链示例
- 每个证书后跟其签发者的证书。
- 每个证书都包含该证书签发者的名称(DN),它与链中下一个证书的主题名称相同。
- 每个证书都使用其签发者的私钥签名。签名可以使用签发者的证书中的公钥进行验证,这是链中的下一个证书。
1.3.6.3. 验证证书链
- 针对 verifier 的系统时钟提供的当前时间检查证书有效期。
- 签发者的证书位于。源可以是该客户端或服务器上 verifier 的本地证书数据库,也可以是主题提供的证书链,如 SSL/TLS 连接。
- 证书签名请求使用签发者证书中的公钥进行验证。
- 将服务的主机名与 Subject Alternative Name (SAN)扩展进行比较。如果证书没有这样的扩展,则会将主机名与主题的 CN 进行比较。
- 系统会验证证书的基本约束要求,即证书是 CA 以及允许它签名的子公司数量。
- 如果签发者的证书被验证器的证书在验证器的证书数据库中信任,则验证会在这里成功停止。否则,会检查签发者的证书,以确保它包含证书类型扩展中的相应从属 CA,并且链验证从这个新证书开始。图 1.8 “验证到根 CA 的证书链” 提供了此过程的示例。
图 1.8. 验证到根 CA 的证书链
图 1.9. 验证证书链到中间 CA
图 1.10. 无法验证的证书链
1.3.7. 证书状态
1.4. 证书生命周期
1.4.1. 证书颁发
1.4.2. 证书过期和续订
- 验证证书是否存在于目录中
- 可以配置服务器,以便身份验证过程检查目录是否存在所呈现的证书。当管理员撤销证书时,证书可以从目录中自动删除,使用该证书的后续身份验证尝试将失败,即使证书在所有其他方面都保持有效。
- 证书撤销列表(CRL)
- 撤销的证书列表( CRL )可以定期发布到目录中。CRL 可以作为身份验证过程的一部分进行检查。
- 实时状态检查
- 每当提供证书进行身份验证时,也可以直接检查发出 CA。这个过程有时被称为实时状态检查。
- 在线证书状态协议
- 可以配置在线证书状态协议(OCSP)服务来确定证书的状态。
1.5. 密钥管理
第 2 章 Red Hat Certificate System 简介
2.1. 证书系统子系统检查
- 名为 Certificate Manager 的证书颁发机构。CA 是 PKI 的核心;它发出并撤销所有证书。证书管理器也是证书系统的核心。通过建立可信子系统 的安全域,它会建立和管理其他子系统之间的关系。
- 密钥恢复机构( KRA)。证书基于特定且唯一的密钥对创建。如果私钥丢失,则该密钥用于访问(如加密电子邮件)的数据也会丢失,因为它无法访问。KRA 存储密钥对,以便可以根据恢复的密钥生成新的相同证书,即使私钥丢失或损坏,也可以访问所有加密的数据。注意在以前的证书系统版本中,KRA 也被称为数据恢复管理器(DRM)。有些代码、配置文件条目、Web 面板和其他资源可能仍然使用术语 DRM 而不是 KRA。
- 在线证书状态协议(OCSP )响应器。OCSP 验证证书是否有效且未过期。此函数也可以由 CA 完成,它具有内部 OCSP 服务,但使用外部 OCSP 响应程序会降低发布 CA 的负载。
- 令牌密钥服务 (TKS)。TKS 根据令牌 CCID、私有信息和定义的算法生成密钥。TPS 使用这些派生的密钥来格式化令牌并在令牌中注册证书。
- 令牌处理系统 (TPS)。TPS 与外部令牌(如智能卡)直接交互,并通过本地客户端、企业安全客户端(ESC)管理这些令牌上的密钥和证书。当存在令牌操作时,ESC 会联系 TPS,并且 TPS 根据需要与 CA、KRA 或 TKS 交互,然后以企业安全客户端的方式将信息发回到令牌。
- 令牌管理系统或 TMS 环境,用于管理智能卡。这需要一个 CA、TKS 和 TPS,它有一个可选的 KRA 用于服务器端密钥生成。
- 传统的 非令牌管理系统 或非TMS 环境,用于管理智能卡之外的环境中使用的证书,通常是在软件数据库中。非TMS 至少需要一个 CA,但非TMS 环境也可以使用 OCSP 响应器和 KRA 实例。
2.2. 证书系统子系统概述
2.2.1. 独立和共享实例
- 单独的 PKI 实例作为基于 Java 的 Apache Tomcat 实例运行。
- 单独的 PKI 实例包含一个 PKI 子系统(CA、KRA、OCSP、TKS 或 TPS)。
- 如果在同一物理机或虚拟机(VM)上共存,则单独的 PKI 实例必须使用唯一的端口。
- 共享 PKI 实例也作为基于 Java 的 Apache Tomcat 实例运行。
- 包含单个 PKI 子系统的共享 PKI 实例与单独的 PKI 实例相同。
- 共享 PKI 实例可能包含每种 PKI 子系统之一的组合:
- 仅限 CA
- 仅限 TKS
- CA 和 KRA
- CA 和 OCSP
- TKS 和 TPS
- CA、KRA、TKS 和 TPS
- CA, KRA, OCSP, TKS, 和 TPS
- etc.
- 共享 PKI 实例允许其实例中包含的所有子系统共享同一端口。
- 如果多个端口位于同一台物理机或虚拟机上,则共享 PKI 实例必须使用唯一端口。
2.2.2. 实例安装前提条件
2.2.2.1. 目录服务器实例可用性
2.2.2.2. PKI 软件包
- 以下基本软件包组成了证书系统的核心,并包括在基本 Red Hat Enterprise Linux 软件仓库中:
- pki-core
- pki-base
- pki-base-java
- pki-ca
- pki-javadoc
- pki-kra
- pki-server
- pki-symkey
- pki-tools
- 以下列出的软件包在基本 Red Hat Enterprise Linux 订阅频道 中不可用。要安装这些软件包,您必须附加一个 Red Hat Certificate System 订阅池并启用 RHCS 存储库。如需更多信息,请参阅 第 6.8 节 “附加红帽订阅并启用证书系统软件包存储库”。
- pki-core
- pki-console
- pki-ocsp
- pki-tks
- pki-tps
- redhat-pki
- redhat-pki: 包含 pki-core 模块的所有软件包。如果要单独选择 redhat-pki 软件包,建议禁用 pki-core 模块。
- redhat-pki-console-theme
- redhat-pki-server-theme
#
dnf install redhat-pki
2.2.2.3. 实例安装和配置
- 从纯文本配置文件(
/etc/pki/default.cfg
)读取其默认name=value
对。 - 以互动方式或自动覆盖指定的任何对,并以 Python 字典的形式存储最终结果。
- 执行一系列有序的 scriptlet 来执行子系统和实例安装。
- 配置 scriptlet 将 Python 字典打包为 JavaScript Object Notation (JSON)数据对象,然后传递给基于 Java 的配置 servlet。
- 配置 servlet 利用此数据来配置新的 PKI 子系统,然后将控制权传递回 pkispawn 可执行文件,从而完成 PKI 设置。最终部署文件的副本保存在
/var/lib/pki/instance_name/ <subsystem> /registry/<subsystem>/deployment.cfg
中
pkispawn
手册页。
/etc/pki/default.cfg
是一个纯文本文件,其中包含在上述过程开始时读取的默认安装和配置值。它由 name=value
对组成,分为 [DEFAULT]
, [Tomcat]
, [CA]
, [KRA]
, [OCSP]
, [TKS]
, 和 [TPS]
部分。
-s
选项与 pkispawn 搭配使用,并且指定子系统名称,则仅读取该子系统的部分。
name=value
对将覆盖 [Tomcat]
部分中的对,后者又覆盖 [DEFAULT]
部分中的对。默认对可以通过交互式输入或指定 PKI 实例配置文件中的对覆盖。
name=value
对时,它们可以存储在任何位置并随时指定。这些文件在 pkispawn man page 中被称为 myconfig.txt
,但它们通常被称为 .ini
文件,或者通常被称为 PKI 实例配置文件。
pki_default.cfg
手册页。
/usr/share/java/pki/pki-certsrv.jar
中的 Java 字节码组成,作为 com/netscape/certsrv/system/ConfigurationRequest.class
。Servlet 使用 pkispawn 从配置脚本处理作为 JSON 对象传递的数据,然后使用与 com/netscape/certsrv/system/ConfigurationResponse.class
在相同的文件中提供的 Java bytecode 来返回到 pkispawn。
root
用户身份在命令行上运行 pkispawn 命令:
#
pkispawn
#
mkdir -p /root/pki- 使用文本编辑器(如 vim )创建名为
/root/pki/ca.cfg
的配置文件,其内容如下:[DEFAULT] pki_admin_password=<password> pki_client_pkcs12_password=<password> pki_ds_password=<password>
#
pkispawn -s CA -f /root/pki/ca.cfg
pkispawn
手册页。
2.2.2.4. 实例删除
/var/lib/pki/instance_name/ <subsystem> /registry/<subsystem> /deployment.cfg
),使用 read-in 文件来删除 PKI 子系统,然后在没有额外的子系统时删除 PKI 实例。如需更多信息,请参阅 pkidestroy
手册页。
#
pkidestroy
Subsystem (CA/KRA/OCSP/TKS/TPS) [CA]:
Instance [pki-tomcat]:
Begin uninstallation (Yes/No/Quit)? Yes
Log file: /var/log/pki/pki-ca-destroy.20150928183547.log
Loading deployment configuration from /var/lib/pki/pki-tomcat/ca/registry/ca/deployment.cfg.
Uninstalling CA from /var/lib/pki/pki-tomcat.
rm '/etc/systemd/system/multi-user.target.wants/pki-tomcatd.target'
Uninstallation complete.
#
pkidestroy -s CA -i pki-tomcat
Log file: /var/log/pki/pki-ca-destroy.20150928183159.log
Loading deployment configuration from /var/lib/pki/pki-tomcat/ca/registry/ca/deployment.cfg.
Uninstalling CA from /var/lib/pki/pki-tomcat.
rm '/etc/systemd/system/multi-user.target.wants/pki-tomcatd.target'
Uninstallation complete.
2.2.3. 执行管理(systemctl)
2.2.3.1. 启动、停止、重启和获取状态
#
systemctl start <unit-file>@instance_name.service
#
systemctl status <unit-file>@instance_name.service
#
systemctl stop <unit-file>@instance_name.service
#
systemctl restart <unit-file>@instance_name.service
pki-tomcatd
Withwatchdog
disabledpki-tomcatd-nuxwdog
Withwatchdog
enabled
watchdog
服务的详情,请参考 Red Hat Certificate System Administration Guide中的 第 2.3.10 节 “密码和 Watchdog (nuxwdog)” 和使用证书系统 Watchdog Service 部分。
2.2.3.2. 自动启动实例
systemctl
工具管理服务器上每个进程的自动启动和关闭设置。这意味着,当系统重启时,一些服务可以被自动重启。系统单元文件控制服务启动,以确保服务以正确顺序启动。systemd
服务和 systemctl
工具信息包括在 为 Red Hat Enterprise Linux 8配置基本系统设置 指南中。
systemctl
管理,因此这个工具可以设置是否自动重启实例。创建证书系统实例后,它会在引导时启用。这可以通过使用 systemctl
来更改:
#
systemctl disable pki-tomcatd@instance_name.service
#
systemctl enable pki-tomcatd@instance_name.service
2.2.4. 进程管理(pki-server 和 pkidaemon)
2.2.4.1. pki-server 命令行工具
pki-server
man page 以获得使用信息。
$
pki-server [CLI options] <command> [command parameters]
$
pki-server
$
pki-server ca$
pki-server ca-audit
--help
选项:
$
pki-server--help
$
pki-server ca-audit-event-find--help
2.2.4.2. 使用 pki-server 启用和禁用已安装的子系统
pki-server
工具。
#
pki-server subsystem-disable -i instance_id subsystem_id
#
pki-server subsystem-enable -i instance_id subsystem_id
ca
、kra
、tks
、ocsp
或 tps
。
pki-tomcat
的实例中禁用 OCSP 子系统:
#
pki-server subsystem-disable -i pki-tomcat ocsp
#
pki-server subsystem-find -i instance_id
#
pki-server subsystem-find -i instance_id subsystem_id
2.2.4.3. pkidaemon 命令行工具
pkidaemon {start|status} instance-type [instance_name]
- pkidaemon status tomcat - 提供状态信息,如 on/off、端口、系统上所有 PKI 子系统的每个 PKI 子系统的 URL。
- pkidaemon status tomcat instance_name - 提供状态信息,如 on/off、端口、特定实例的每个 PKI 子系统的 URL。
- pkidaemon start tomcat instance_name.service - 使用 systemctl 内部使用。
pkidaemon
手册页。
2.2.4.4. 查找子系统 Web 服务 URL
https://server.example.com:8443/ca/services
pkidaemon status instance_name
https://server.example.com:8443/ca/ee/ca
https://192.0.2.1:8443/ca/services https://[2001:DB8::1111]:8443/ca/services
表 2.1. 默认 Web 服务页面
port | 用于 SSL/TLS | 用于客户端身份验证[a] | Web 服务 | Web 服务位置 |
---|---|---|---|---|
证书管理器 | ||||
8080 | 否 | 结束实体 | ca/ee/ca | |
8443 | 是 | 否 | 结束实体 | ca/ee/ca |
8443 | 是 | 是 | 代理 | ca/agent/ca |
8443 | 是 | 否 | 服务 | ca/services |
8443 | 是 | 否 | 控制台(Console) | pkiconsole https://host:port/ca |
密钥恢复授权机构 | ||||
8080 | 否 | 结束实体[b] | kra/ee/kra | |
8443 | 是 | 否 | 结束实体[b] | kra/ee/kra |
8443 | 是 | 是 | 代理 | kra/agent/kra |
8443 | 是 | 否 | 服务 | kra/services |
8443 | 是 | 否 | 控制台(Console) | pkiconsole https://host:port/kra |
在线证书状态管理器 | ||||
8080 | 否 | 结束实体[c] | ocsp/ee/ocsp | |
8443 | 是 | 否 | 结束实体[c] | ocsp/ee/ocsp |
8443 | 是 | 是 | 代理 | ocsp/agent/ocsp |
8443 | 是 | 否 | 服务 | ocsp/services |
8443 | 是 | 否 | 控制台(Console) | pkiconsole https://host:port/ocsp |
令牌密钥服务 | ||||
8080 | 否 | 结束实体[b] | tks/ee/tks | |
8443 | 是 | 否 | 结束实体[b] | tks/ee/tks |
8443 | 是 | 是 | 代理 | tks/agent/tks |
8443 | 是 | 否 | 服务 | tks/services |
8443 | 是 | 否 | 控制台(Console) | pkiconsole https://host:port/tks |
令牌处理系统 | ||||
8080 | 否 | 未安全的服务 | tps/tps | |
8443 | 是 | 安全服务 | tps/tps | |
8080 | 否 | 企业安全客户端电话主页 | tps/phoneHome | |
8443 | 是 | 企业安全客户端电话主页 | tps/phoneHome | |
8443 | 是 | 是 | 管理、代理和 Operator 服务 [d] | tps/ui |
[b]
虽然此子系统类型具有端实体端口和接口,但这些最终用户服务无法通过 Web 浏览器访问,因为其他最终用户服务是:
[c]
虽然 OCSP 有端实体端口和接口,但这些最终用户服务无法通过 Web 浏览器访问,因为其他最终用户服务是:最终用户 OCSP 服务可通过发送 OCSP 请求来访问。
[d]
代理、管理员和操作器服务都通过同一 Web 服务页面访问。每个角色只能访问仅对该角色成员可见的特定部分。
|
2.2.4.5. 启动证书系统控制台
pkiconsole
工具通过 SSL/TLS 端口连接到子系统实例来打开控制台。这个工具使用以下格式:
pkiconsole https://server.example.com:admin_port/subsystem_type
ca
、kra
、ocsp
或 tks
。例如,这将打开 KRA 控制台:
pkiconsole https://server.example.com:8443/kra
https://192.0.2.1:8443/ca https://[2001:DB8::1111]:8443/ca
2.3. 证书系统架构概述
2.3.1. Java Application Server
server.xml
中。以下链接提供有关 Tomcat 配置的更多信息: https://tomcat.apache.org/tomcat-8.0-doc/config/
web.xml
文件中,该文件在 Java Servlet 3.1 规范中定义。详情请查看 https://www.jcp.org/en/jsr/detail?id=340。
CS.cfg
中。
2.3.2. Java 安全管理器
pki_security_manager=false
选项)创建,则安全管理器会被禁用。
# pki-server stop instance_name
或(如果使用nuxwdog
watchdog)# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- 打开
/etc/sysconfig/instance_name
文件,并设置SECURITY_MANAGER="false"
# pki-server start instance_name
或(如果使用nuxwdog
watchdog)# systemctl start pki-tomcatd-nuxwdog@instance_name.service
/usr/share/pki/server/conf/catalina.policy /usr/share/tomcat/conf/catalina.policy /var/lib/pki/$PKI_INSTANCE_NAME/conf/pki.policy /var/lib/pki/$PKI_INSTANCE_NAME/conf/custom.policy
/var/lib/pki/instance_name/conf/catalina.policy
中。
2.3.3. 接口
2.3.3.1. Servlet 接口
web.xml
文件中定义。同一文件还定义每个 servlet 的 URL 和访问 servlet 的安全要求。请参阅 第 2.3.1 节 “Java Application Server” 了解更多信息。
2.3.3.2. 管理界面
2.3.3.3. 端到端接口
2.3.3.4. Operator Interface
2.3.4. REST 接口
web.xml
中找到。有关 RESTEasy 的更多信息,请访问 http://resteasy.jboss.org/。
- CA 证书服务:
http:// <host_name>: <port> /ca/rest/certs/
- KRA 密钥服务:
http:// <host_name>:<port> /kra/rest/agent/keys/
- TKS 用户服务:
http:// <host_name>:<port> /tks/rest/admin/users/
- TPS 组服务:
http:// <host_name>:<port> /tps/rest/admin/groups/
{ "id":"admin", "UserID":"admin", "FullName":"Administrator", "Email":"admin@example.com", ... }
- 用户名和密码
- 客户端证书
/usr/share/pki/ca/conf/auth-method.properties
中定义。
/usr/share/pki/ <subsystem> /conf/acl.properties
中的 ACL 资源。
2.3.5. JSS
2.3.6. tomcatjss
tomcatjss
的 JAR 文件作为 Tomcat 服务器 HTTP 引擎和 JSS 之间的桥接,Java 接口用于 NSS 执行的安全操作。tomcatjss 是一个 Java 安全套接字扩展(JSSE)实现,使用 Tomcat 的 Java 安全服务(JSS)实现。
- 服务器已启动。
- Tomcat 指向为证书系统安装创建侦听套接字需要的位置。
server.xml
文件已被处理。此文件中的配置告知系统使用 Tomcatjs 实施的套接字工厂。- 对于每个请求的套接字,Tomcajss 会在创建套接字时读取和处理包含的属性。生成的套接字的行为是因为已被这些参数要求。
- 服务器运行后,我们所需的一组侦听套接字等待进入基于 Tomcat 的证书系统的连接。
server.xml
文件的详情,请参考 第 14.4 节 “Tomcat Engine 和 Web 服务的配置文件”。
2.3.7. PKCS #11
2.3.7.1. NSS 软令牌(内部令牌)
/var/lib/pki/instance_name/alias
目录中。
- 默认内部 PKCSROX 模块,它附带两个令牌:
- 内部加密服务令牌,执行所有加密操作,如加密、解密和哈希。
- 内部密钥存储令牌("Certificate DB 令牌"),它处理与存储证书和密钥的证书和密钥数据库文件的所有通信。
- FIPS 140 模块。这个模块符合对加密模块实现的 FIPS 140 政府标准。FIPS 140 模块包含一个内置 FIPS 140 证书数据库令牌,它处理加密操作以及与证书和密钥数据库文件的通信。
2.3.7.2. 硬件安全模块(HSM、外部令牌)
pkcs11.txt
数据库中跟踪。当系统
有变化时,modutil 实用程序用于修改此文件,如安装用于签名操作的硬件加速器。有关 modutil
的更多信息,请参阅 Mozilla Developer 网页上的网络安全服务(NSS)。
2.3.8. 证书系统序列号管理
2.3.8.1. 序列号范围
- 当前序列号管理基于分配顺序序列号的范围。
- 当超过定义的阈值时,实例会请求新的范围。
- 实例在分配给实例后存储有关新获取范围的信息。
- 实例继续使用旧的范围,直到所有数字都用尽,然后移动到新范围。
- 克隆的子系统通过复制冲突来同步其范围分配。
- 在克隆过程中,当前 master 范围的一部分被传送到一个新的克隆。
- 如果传输的范围低于定义的阈值,新的克隆可能会请求新的范围。
[CA]
部分,并根据需要在该部分下添加以下 name=value
对。以下示例中显示了 /etc/pki/default.cfg
中已存在的默认值:
[CA] pki_serial_number_range_start=1 pki_serial_number_range_end=10000000 pki_request_number_range_start=1 pki_request_number_range_end=10000000 pki_replica_number_range_start=1 pki_replica_number_range_end=100
2.3.8.2. 随机序列号管理
[CA]
部分并在该部分下添加以下 name=value
对,可以在 CA 实例安装时选择随机序列号:
[CA] pki_random_serial_numbers_enable=True
2.3.9. 安全域
2.3.10. 密码和 Watchdog (nuxwdog)
instance_dir>/conf/password.conf
。同时,标识字符串存储在主配置文件中 CS.cfg
中,作为参数 cms.passwordlist
的一部分。
CS.cfg
受 Red Hat Enterprise Linux 的保护,且只能被 PKI 管理员访问。没有密码存储在 CS.cfg
中。
password.conf
。
password.conf
中。LDAP 发布是一个示例,新为发布目录配置的 Directory Manager 密码被输入 password.conf
。
password.conf
文件。重启时,nuxwdog watchdog 程序将提示管理员输入所需的密码,使用参数 cms.passwordlist
(如果使用 cms.tokenList
),作为要提示的密码列表。然后,在内核密钥环中由 nuxwdog 缓存密码,以允许从服务器崩溃自动恢复。当出现不受控制的关闭(crash)时,会发生此自动恢复(自动子系统重启)。如果管理员控制的关闭,管理员将再次提示输入密码。
2.3.11. 内部 LDAP 数据库
2.3.12. Security-Enhanced Linux (SELinux)
图 2.1. CA SELinux 端口策略
- 每个子系统实例的文件和目录使用特定的 SELinux 上下文标记。
- 每个子系统实例的端口使用特定的 SELinux 上下文标记。
- 所有证书系统进程都在特定于子系统的域中进行限制。
- 每个域具有特定的规则,用于定义授权域的操作。
- SELinux 策略中没有指定的访问权限都会被拒绝访问证书系统实例。
pkispawn
时,用来配置证书系统子系统,与该子系统关联的文件和端口都会使用所需的 SELinux 上下文标记。使用 pkidestroy
删除特定子系统时,这些上下文将被删除。
pki_tomcat_t
域。证书系统实例是 Tomcat 服务器,pki_tomcat_t
域扩展了标准 tomcat_t
Tomcat 域的策略。服务器上的所有证书系统实例共享相同的域。
unconfined_t
)中运行,然后过渡到 pki_tomcat_t
域。然后,这个进程具有某些访问权限,如对标记为 pki_tomcat_log_t
的日志文件进行写入访问,对标记为 pki_tomcat_etc_rw_t
的配置文件进行读写访问,或者对 http_port_t
端口打开和写入。
2.3.13. self-tests
#
pki-server subsystem-enable <subsystem>
2.3.14. 日志
pki_subsystem_log_path
中指定的任何目录中。 常规审计日志位于日志目录中,使用其他类型的日志进行日志,而签名的审计日志则写入 /var/log/pki/instance_name/subsystem_name/signedAudit
。可以通过修改配置来更改日志的默认位置。
2.3.14.1. 审计日志
2.3.14.2. 调试日志
[date:time] [processor]: servlet: message
[10/Jun/2022:05:14:51][main]: Established LDAP connection using basic authentication to host localhost port 389 as cn=Directory Manager
[06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.requestowner$ value=KRA-server.example.com-8443
例 2.1. CA 证书请求日志消息
[06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.profileapprovedby$ value=admin [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.cert_request$ value=MIIBozCCAZ8wggEFAgQqTfoHMIHHgAECpQ4wDDEKMAgGA1UEAxMBeKaBnzANBgkqhkiG9w0BAQEFAAOB... [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.profile$ value=true [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.cert_request_type$ value=crmf [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.requestversion$ value=1.0.0 [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.req_locale$ value=en [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.requestowner$ value=KRA-server.example.com-8443 [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.dbstatus$ value=NOT_UPDATED [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.subject$ value=uid=jsmith, e=jsmith@example.com [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.requeststatus$ value=begin [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.auth_token.user$ value=uid=KRA-server.example.com-8443,ou=People,dc=example,dc=com [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.req_key$ value=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDreuEsBWq9WuZ2MaBwtNYxvkLP^M HcN0cusY7gxLzB+XwQ/VsWEoObGldg6WwJPOcBdvLiKKfC605wFdynbEgKs0fChV^M k9HYDhmJ8hX6+PaquiHJSVNhsv5tOshZkCfMBbyxwrKd8yZ5G5I+2gE9PUznxJaM^M HTmlOqm4HwFxzy0RRQIDAQAB [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.auth_token.authmgrinstname$ value=raCertAuth [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.auth_token.uid$ value=KRA-server.example.com-8443 [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.auth_token.userid$ value=KRA-server.example.com-8443 [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.requestor_name$ value= [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.profileid$ value=caUserCert [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.auth_token.userdn$ value=uid=KRA-server.example.com-4747,ou=People,dc=example,dc=com [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.requestid$ value=20 [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.auth_token.authtime$ value=1212782378071 [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.req_x509info$ value=MIICIKADAgECAgEAMA0GCSqGSIb3DQEBBQUAMEAxHjAcBgNVBAoTFVJlZGJ1ZGNv^M bXB1dGVyIERvbWFpbjEeMBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4X^M DTA4MDYwNjE5NTkzOFoXDTA4MTIwMzE5NTkzOFowOzEhMB8GCSqGSIb3DQEJARYS^M anNtaXRoQGV4YW1wbGUuY29tMRYwFAYKCZImiZPyLGQBARMGanNtaXRoMIGfMA0G^M CSqGSIb3DQEBAQUAA4GNADCBiQKBgQDreuEsBWq9WuZ2MaBwtNYxvkLPHcN0cusY^M 7gxLzB+XwQ/VsWEoObGldg6WwJPOcBdvLiKKfC605wFdynbEgKs0fChVk9HYDhmJ^M 8hX6+PaquiHJSVNhsv5tOshZkCfMBbyxwrKd8yZ5G5I+2gE9PUznxJaMHTmlOqm4^M HwFxzy0RRQIDAQABo4HFMIHCMB8GA1UdIwQYMBaAFG8gWeOJIMt+aO8VuQTMzPBU^M 78k8MEoGCCsGAQUFBwEBBD4wPDA6BggrBgEFBQcwAYYuaHR0cDovL3Rlc3Q0LnJl^M ZGJ1ZGNvbXB1dGVyLmxvY2FsOjkwODAvY2Evb2NzcDAOBgNVHQ8BAf8EBAMCBeAw^M HQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMCQGA1UdEQQdMBuBGSRyZXF1^M ZXN0LnJlcXVlc3Rvcl9lbWFpbCQ=
[07/Jul/2022:06:25:40][http-11180-Processor25]: OCSPServlet: OCSP Request: [07/Jul/2022:06:25:40][http-11180-Processor25]: OCSPServlet: MEUwQwIBADA+MDwwOjAJBgUrDgMCGgUABBSEWjCarLE6/BiSiENSsV9kHjqB3QQU
2.3.14.3. 安装日志
/var/log/pki/
目录中创建一个,格式为 pki-subsystem_name-spawn.timestamp.log
。
例 2.2. CA 安装日志
========================================================================== INSTALLATION SUMMARY ========================================================================== Administrator's username: caadmin Administrator's PKCS #12 file: /root/.dogtag/pki-tomcat/ca_admin_cert.p12 Administrator's certificate nickname: caadmin Administrator's certificate database: /root/.dogtag/pki-tomcat/ca/alias To check the status of the subsystem: systemctl status pki-tomcatd@pki-tomcat.service To restart the subsystem: systemctl restart pki-tomcatd@pki-tomcat.service The URL for the subsystem is: https://localhost.localdomain:8443/ca PKI instances will be enabled upon system boot ==========================================================================
2.3.14.4. Tomcat 错误和访问日志
- admin.timestamp
- catalina.timestamp
- catalina.out
- host-manager.timestamp
- localhost.timestamp
- localhost_access_log.timestamp
- manager.timestamp
2.3.14.5. 自助测试日志
CS.cfg
文件中的设置来配置。本节中有关日志的信息与此日志无关。有关自测试的更多信息,请参阅 第 2.6.5 节 “自助测试”。
2.3.14.6. journalctl
Logs
systemd
捕获并通过 journalctl
实用程序公开。
# journalctl -u pki-tomcatd@instance_name.service
nuxwdog
服务:
# journalctl -u pki-tomcatd-nuxwdog@instance_name.service
# journalctl -f -u pki-tomcatd@instance_name.service
nuxwdog
服务:
# journalctl -f -u pki-tomcatd-nuxwdog@instance_name.service
2.3.15. 实例布局
/etc/pki/instance_name/server.xml
中,后者是特定于实例的,但 CA servlet 在 /usr/share/pki/ca/webapps/ca/WEB-INF/web.xml
中定义,后者由系统上的所有服务器实例共享。
2.3.15.1. 证书系统的文件和目录位置
pki-tomcat
; true 值是在使用 pkispawn
创建子系统时指定的。
表 2.2. Tomcat 实例信息
设置 | 值 |
---|---|
主目录 | /var/lib/pki/pki-tomcat |
配置目录 | /etc/pki/pki-tomcat |
配置文件 |
/etc/pki/pki-tomcat/server.xml
/etc/pki/pki-tomcat/password.conf
|
安全数据库 | /var/lib/pki/pki-tomcat/alias |
子系统证书 |
SSL 服务器证书
子系统证书 [a]
|
日志文件 | /var/log/pki/pki-tomcat |
Web 服务文件 |
/usr/share/pki/server/webapps/ROOT - Main page
/usr/share/pki/server/webapps/pki/admin - Admin templates
/usr/share/pki/server/webapps/pki/js - JavaScript 库
|
[a]
子系统证书始终由安全域发布,以便需要客户端身份验证的域级别操作基于此子系统证书。
|
/var/lib/pki/instance_name/conf/
目录是到 /etc/pki/instance_name/
目录的符号链接。
2.3.15.2. CA 子系统信息
pki-tomcat
; true 值是在使用 pkispawn
创建子系统时指定的。
表 2.3. CA 子系统信息
设置 | 值 |
---|---|
主目录 | /var/lib/pki/pki-tomcat/ca |
配置目录 | /etc/pki/pki-tomcat/ca |
配置文件 | /etc/pki/pki-tomcat/ca/CS.cfg |
子系统证书 |
CA 签名证书
OCSP 签名证书(用于 CA 的内部 OCSP 服务)
审计日志签名证书
|
日志文件 | /var/log/pki/pki-tomcat/ca |
安装日志 | /var/log/pki/pki-ca-spawn.YYYYMMDDhhmmss.log |
配置集文件 | /var/lib/pki/pki-tomcat/ca/profiles/ca |
电子邮件通知模板 | /var/lib/pki/pki-tomcat/ca/emails |
Web 服务文件 |
/usr/share/pki/ca/webapps/ca/agent - Agent 服务
/usr/share/pki/ca/webapps/ca/admin - Admin 服务
/usr/share/pki/ca/webapps/ca/ee - 最终用户服务
|
2.3.15.3. KRA 子系统信息
pki-tomcat
; true 值是在使用 pkispawn
创建子系统时指定的。
表 2.4. KRA 子系统信息
设置 | 值 |
---|---|
主目录 | /var/lib/pki/pki-tomcat/kra |
配置目录 | /etc/pki/pki-tomcat/kra |
配置文件 | /etc/pki/pki-tomcat/kra/CS.cfg |
子系统证书 |
传输证书
存储证书
审计日志签名证书
|
日志文件 | /var/log/pki/pki-tomcat/kra |
安装日志 | /var/log/pki/pki-kra-spawn.YYYYMMDDhhmmss.log |
Web 服务文件 |
/usr/share/pki/kra/webapps/kra/agent - Agent 服务
/usr/share/pki/kra/webapps/kra/admin - Admin services
|
2.3.15.4. OCSP 子系统信息
pki-tomcat
; true 值是在使用 pkispawn
创建子系统时指定的。
表 2.5. OCSP 子系统信息
设置 | 值 |
---|---|
主目录 | /var/lib/pki/pki-tomcat/ocsp |
配置目录 | /etc/pki/pki-tomcat/ocsp |
配置文件 | /etc/pki/pki-tomcat/ocsp/CS.cfg |
子系统证书 |
OCSP 签名证书
审计日志签名证书
|
日志文件 | /var/log/pki/pki-tomcat/ocsp |
安装日志 | /var/log/pki/pki-ocsp-spawn.YYYYMMDDhhmmss.log |
Web 服务文件 |
/usr/share/pki/ocsp/webapps/ocsp/agent - Agent 服务
/usr/share/pki/ocsp/webapps/ocsp/admin - Admin services
|
2.3.15.5. TKS 子系统信息
pki-tomcat
; true 值是在使用 pkispawn
创建子系统时指定的。
表 2.6. TKS 子系统信息
设置 | 值 |
---|---|
主目录 | /var/lib/pki/pki-tomcat/tks |
配置目录 | /etc/pki/pki-tomcat/tks |
配置文件 | /etc/pki/pki-tomcat/tks/CS.cfg |
子系统证书 | 审计日志签名证书 |
日志文件 | /var/log/pki/pki-tomcat/tks |
安装日志 | /var/log/pki/pki-tomcat/pki-tks-spawn.YYYYMMDDhhmmss.log |
2.3.15.6. TPS 子系统信息
pki-tomcat
; true 值是在使用 pkispawn
创建子系统时指定的。
表 2.7. TPS 子系统信息
设置 | 值 |
---|---|
主目录 | /var/lib/pki/pki-tomcat/tps |
配置目录 | /etc/pki/pki-tomcat/tps |
配置文件 | /etc/pki/pki-tomcat/tps/CS.cfg |
子系统证书 | 审计日志签名证书 |
日志文件 | /var/log/pki/pki-tomcat/tps |
安装日志 | /var/log/pki/pki-tps-spawn.YYYYMMDDhhhmmss.log |
Web 服务文件 | /usr/share/pki/tps/webapps/tps - TPS 服务 |
2.3.15.7. 共享证书系统子系统文件位置
表 2.8. 子系统文件位置
目录位置 | 内容 |
---|---|
/usr/share/pki | 包含用于创建证书系统实例的常用文件和模板。除了所有子系统的共享文件外,子文件夹中还有特定于子系统的文件:
|
/usr/bin | 包含 pkispawn 和 pkidestroy 实例配置脚本,以及由证书系统子系统共享的 Java、原生和安全性。 |
/usr/share/java/pki | 包含由本地 Tomcat Web 应用程序共享的 Java 归档文件,并由证书系统子系统共享。 |
2.4. 使用证书系统的 PKI
2.4.1. 发布证书
2.4.1.1. 注册过程
2.4.1.1.1. 使用用户界面注册
- 最终实体以其中一个注册表提供信息并提交请求。从最终实体收集的信息可以自定义表单,具体取决于收集以存储在证书中的信息,或针对与表单关联的身份验证方法进行身份验证。该表单会创建一个请求,然后提交到证书管理器。
- 注册表单会触发公钥和私钥的创建,或为请求创建双密钥对。
- 最终实体在提交请求前提供身份验证凭据,具体取决于身份验证类型。这可以是 LDAP 身份验证、基于 PIN 的身份验证或基于证书的身份验证。
- 请求提交至代理批准的注册过程或自动过程。
- 代理批准的进程(不包括最终用户身份验证)将请求发送到代理服务接口中的请求队列,其中代理必须处理请求。然后,代理可以修改请求的部分,更改请求的状态、拒绝请求或批准请求。可以设置自动通知,以便在请求出现在队列中时将电子邮件发送到代理。另外,可以将自动化作业设置为发送队列内容列表,以便在预配置的调度时代理。
- 涉及最终用户身份验证的自动化过程(涉及最终用户身份验证)会在端点实体成功验证后立即处理证书请求。
- 表单在提交表单时从 LDAP 目录中收集有关末尾实体的信息。对于基于证书的注册,可以使用表单的默认值来收集用户 LDAP ID 和密码。
- 与表单关联的证书配置文件决定了要发布的证书的各个方面。根据证书配置文件,评估请求来确定请求是否满足约束集、是否提供了所需信息以及新证书的内容。
- 表单也可以请求用户导出私钥。如果使用此 CA 设置 KRA 子系统,则会请求最终用户的密钥,并将归档请求发送到 KRA。此过程通常不需要来自端点实体的交互。
- 证书请求可能被拒绝,因为它不符合证书配置文件或身份验证要求,或者发布证书。
- 证书被传送到最终实体。
- 在自动注册中,证书会立即发送给用户。由于注册通常通过 HTML 页面,因此证书将返回为对另一个 HTML 页面的响应。
- 在代理批准的注册中,证书可以通过序列号或最终用户接口上请求 Id 来检索。
- 如果设置了通知功能,则可获取证书的链接将发送到最终用户。
- 当证书发布或被拒绝时,可以向最终实体发送自动通知。
- 新证书存储在证书管理器的内部数据库中。
- 如果为证书管理器设置了发布,则证书将发布到文件或 LDAP 目录中。
- 内部 OCSP 服务在收到证书状态请求时检查内部数据库中的证书状态。
2.4.1.1.2. 使用命令行注册
2.4.1.1.2.1. 使用 pki
实用程序注册
- pki-cert(1) man page
- Red Hat Certificate System Administration Guide 中的 命令行界面 部分。
2.4.1.1.2.2. 使用 CMC 注册
- 使用工具(如
PKCS10Client
或CRMFPopClient
)生成 PKCS #10 或 CRMF 证书签名请求(CSR)。注意如果在密钥恢复代理(KRA)中启用了密钥归档,请使用带有 KRA 的 Privacy Enhanced Mail (PEM)格式的 KRA 的传输证书的CRMFPopClient
工具,格式为kra.transport
文件。 - 使用
CMCRequest
工具将 CSR 转换为 CMC 请求。CMCRequest
工具使用配置文件作为输入。例如,此文件包含到 CSR 的路径和 CSR 格式。详情请查看 CMCRequest(1) man page。 - 使用
HttpClient
实用程序将 CMC 请求发送到 CA。httpclient 使用带有设置的配置文件,如 CMC 请求文件的路径和 servlet。如果 HttpClient 命令成功,工具会从 CA 接收一个 PKCS #7 链,其中包含 CMC 状态控制。如需有关实用程序提供哪些参数的详细信息,请输入不带任何参数的 HttpClient 命令。 - 使用
CMCResponse
工具检查由HttpClient
生成的 PKCS #7 文件的颁发结果。如果请求成功,CMCResponse
以可读格式显示证书链。详情请查看 CMCResponse(1) man page。 - 将新证书导入到应用程序中。详情请参阅您要导入证书的应用程序的说明。注意
HttpClient
检索的证书采用 PKCS #7 格式。如果应用程序只支持 Base64 编码的证书,请使用BtoA
实用程序转换证书。此外,某些应用程序需要以 Privacy Enhanced Mail (PEM)格式的证书标头和页脚。如果需要它们,请在转换证书后手动将它们添加到 PEM 文件中。
2.4.1.1.2.2.1. 没有 POP 的 CMC 注册
HttpClient
工具会收到 EncryptedPOP
CMC 状态,该状态由 CMCResponse 命令显示。在这种情况下,再次输入 CMCRequest
命令,在配置文件中使用不同的参数。
2.4.1.1.2.2.2. 签名的 CMC 请求
- 如果代理为请求签名,请将配置集中的验证方法设置为 CMCAuth。
- 如果用户为请求签名,请将配置集中的验证方法设置为 CMCUserSignedAuth。
2.4.1.1.2.2.3. 未签名的 CMC 请求
CMCUserSignedAuth
身份验证插件时,您必须使用未签名的 CMC 请求与 Shared Secret 身份验证机制结合使用。
自签名 CMC 请求
。
2.4.1.1.2.2.4. 共享 Secret 工作流
由最终用户创建的共享 Secret (首选)
- 最终用户从 CA 管理员获取颁发保护证书。
- 最终用户使用
CMCSharedToken
工具来生成共享 secret 令牌。注意p
选项设置在 CA 和用户之间共享的密码短语,而不是令牌的密码。 - 最终用户向管理员发送
CMCSharedToken
工具生成的加密共享令牌。 - 管理员将共享令牌添加到用户的 LDAP 条目的
shrTok
属性中。 - 最终用户使用密码短语在传递给
CMCRequest
工具的配置文件中设置witness.sharedSecret
参数。
由 CA 管理员创建的共享 Secret
- 管理员使用
CMCSharedToken
工具为用户生成共享 secret 令牌。注意p
选项设置在 CA 和用户之间共享的密码短语,而不是令牌的密码。 - 管理员将共享令牌添加到用户的 LDAP 条目的
shrTok
属性中。 - 管理员与用户共享密语。
- 最终用户使用密码短语在传递给
CMCRequest
工具的配置文件中设置witness.sharedSecret
参数。
2.4.1.1.2.2.5. 简单的 CMC 请求
HttpClient
工具的配置文件中设置以下内容:
servlet=/ca/ee/ca/profileSubmitCMCSimple?profileId=caECSimpleCMCUserCert
2.4.1.2. 证书配置文件
- X.509 版本 3 兼容的证书
- Unicode 支持证书主题名称和签发者名称
- 支持空证书主题名称
- 支持自定义主题名称组件
- 支持自定义扩展
profile id > ; .cfg格式存储在 <instance 目录>/ca/profiles/ca
中。可以使用正确的 pkispawn 配置参数进行基于 LDAP 的配置集。
2.4.1.3. 证书注册身份验证
2.4.1.4. 跨证书
2.4.2. 续订证书
2.4.3. 发布证书和 CRL
2.4.4. 撤销证书和检查状态
2.4.4.1. 吊销证书
- 最终用户页面。详情请查看 Red Hat Certificate System Administration Guide 中的 Certificate Revocation Pages 部分。
- 命令行上的
CMCRequest
工具。详情请参阅 Red Hat Certificate System Administration Guide 中的 执行 CMC Revocation 部分。 - 命令行中的
pki
工具。详情请查看 pki-cert(1) man page。
2.4.4.2. 证书状态
2.4.4.2.1. CRL
2.4.4.2.2. OCSP 服务
- 将 CA 设置为发布包含授权信息访问扩展的证书,用于标识可查询证书状态的 OCSP 响应程序。
- CA 定期向 OCSP 响应程序发布 CRL。
- OCSP 响应器维护它从 CA 接收的 CRL。
- 兼容 OCSP 的客户端会发送请求,其中包含将证书标识到 OCSP 响应程序以进行验证所需的所有信息。应用程序从被验证的证书中的授权信息访问扩展值确定 OCSP 响应器的位置。
- OCSP 响应器确定请求是否包含处理它所需的所有信息。如果没有或未为请求的服务启用它,则会发送拒绝通知。如果它有足够的信息,它会处理请求并发回一个报告,说明证书的状态。
2.4.4.2.2.1. OCSP 响应签名
- 签发正在检查其状态的证书的 CA。
- 带有客户端信任的公钥的响应程序。这样的响应者称为 可信响应器。
- 一个响应程序,包含由 CA 直接向它发布的证书,用于撤销证书并发布 CRL。此证书由响应者拥有此证书,表示 CA 已授权响应者为 CA 撤销的证书发布 OCSP 响应。此类响应程序称为 CA 设计的响应程序或 CA 授权响应器。
2.4.4.2.2.2. OCSP 响应
- 良好或验证的 .指定对状态查询的正响应,这意味着证书尚未被撤销。它不一定意味着签发证书,或者在证书的有效性间隔内。响应扩展可用于传达由响应者有关证书状态的断言的附加信息。
- 已撤销 .指定证书已被撤销,可以是永久或临时撤销。
2.4.4.2.2.3. OCSP 服务
- 内置在证书管理器中的 OCSP
- 在线证书状态管理器子系统
2.4.5. 归档、恢复和轮转密钥
2.4.5.1. 归档密钥
- 客户端密钥生成 :使用此机制,客户端将以 CRMF 格式生成 CSR,并将请求提交到 CA (具有正确的 KRA 设置),以进行注册和密钥存档。请参阅 Red Hat Certificate System Administration Guide 中的使用 CRMFPopClient 创建 CSR 部分。
- 服务器端密钥生成 :使用此机制,正确配备证书注册配置文件将触发 KRA 上生成的 PKI 密钥,从而可以选择与新发布的证书一起存档。请参阅 Red Hat Certificate System Administration Guide 中的使用 Server-Side Key Generation 生成 CSR 部分。
- 当密钥恢复代理根据密钥 ID 搜索时,只返回与该 ID 对应的键。
- 当代理根据用户名搜索时,所有属于该所有者的存储密钥都会被返回。
- 当代理根据证书中的公钥搜索时,仅返回对应的私钥。
- 传输密钥对和对应的证书。
- 存储密钥对。
图 2.2. Client-Side Key Generation 中的 Key Archival Process Works
- 客户端生成 CRMF 请求,并通过 CA 的注册门户提交它。
- 客户端的私钥嵌套在 CRMF 请求中,只能由 KRA 解封。
- 检测它是带有密钥归档选项的 CRMF 请求,CA 会将请求转发到 KRA 的私钥存档。
- KRA 解密 / 取消打包用户私钥,并在确认私钥与公钥对应后,KRA / 在将其存储在其内部 LDAP 数据库中之前再次加密 /。
- 成功存储私钥后,KRA 会对 CA 响应,确认密钥已成功存档。
- CA 会向请求发送 Enrollment Profile Framework,以进行证书信息内容创建和验证。当一切通过后,都会发出证书并将其发回到其响应中的后端实体。
2.4.5.2. 恢复密钥
图 2.3. 异步恢复
pki
工具来复制此行为。如需更多信息,请参阅 pki(1) 和 pki-key(1) man page 或运行 CRMFPopClient --help 和 man CMCRequest。
pki
工具支持启用存储和检索这些其他类型的 secret 的选项。
2.4.5.3. KRA 传输密钥轮转
- 生成新的 KRA 传输密钥和证书
- 将新传输密钥和证书传输到 KRA 克隆
- 使用新的 KRA 传输证书更新 CA 配置
- 更新 KRA 配置,使其仅使用新的传输密钥和证书
- 生成新的 KRA 传输密钥和证书
- 请求 KRA 传输证书。
- 停止 KRA:
# pki-server stop pki-kra
或(如果使用nuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@pki-kra.service
- 进入 KRA NSS 数据库目录:
# cd /etc/pki/pki-kra/alias
- 创建 子目录并将所有 NSS 数据库文件保存到其中。例如:
mkdir nss_db_backup cp *.db nss_db_backup
- 使用
PKCS10Client
工具创建新请求。例如:# PKCS10Client -p password -d '.' -o 'req.txt' -n 'CN=KRA Transport 2 Certificate,O=example.com Security Domain'
或者,使用certutil
工具。例如:# certutil -d . -R -k rsa -g 2048 -s 'CN=KRA Transport 2 Certificate,O=example.com Security Domain' -f password-file -a -o transport-certificate-request-file
- 在 CA End-Entity 页面的 Manual Data Recovery Manager 传输证书注册 页中提交传输证书请求。
- 通过检查 End-Entity 检索页面中的请求状态,等待提交请求的代理批准检索证书。
- 通过 CA Agent Services 接口批准 KRA 传输证书。
- 检索 KRA 传输证书。
- 进入 KRA NSS 数据库目录:
# cd /etc/pki/pki-kra/alias
- 通过检查 End-Entity 检索页面中的请求状态,等待提交请求的代理批准检索证书。
- 新的 KRA 传输证书可用后,将其 Base64 编码的值粘贴到文本文件中,例如名为
cert-serial_number.txt
的文件。不要包括标头(-----BEGIN CERTIFICATE-----
)或页脚(-----END CERTIFICATE-----
)。
- 导入 KRA 传输证书。
- 进入 KRA NSS 数据库目录:
# cd /etc/pki/pki-kra/alias
- 将传输证书导入到 KRA NSS 数据库中:
# certutil -d . -A -n 'transportCert-serial_number cert-pki-kra KRA' -t 'u,u,u' -a -i cert-serial_number.txt
- 更新 KRA 传输证书配置。
- 进入 KRA NSS 数据库目录:
# cd /etc/pki/pki-kra/alias
- 验证新的 KRA 传输证书是否已导入:
# certutil -d . -L # certutil -d . -L -n 'transportCert-serial_number cert-pki-kra KRA'
- 打开
/var/lib/pki/pki-kra/kra/conf/CS.cfg
文件并添加以下行:kra.transportUnit.newNickName=transportCert-serial_number cert-pki-kra KRA
- 将新传输密钥和证书传播到 KRA 克隆
- 启动 KRA:
# pki-server start pki-kra
或(如果使用nuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@pki-kra.service
- 提取新的传输密钥和证书以传播到克隆。
- 进入 KRA NSS 数据库目录:
# cd /etc/pki/pki-kra/alias
- 停止 KRA:
# pki-server stop pki-kra
或(如果使用nuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@pki-kra.service
- 验证新的 KRA 传输证书是否存在:
# certutil -d . -L # certutil -d . -L -n 'transportCert-serial_number cert-pki-kra KRA'
- 导出 KRA 新传输密钥和证书:
# pk12util -o transport.p12 -d . -n 'transportCert-serial_number cert-pki-kra KRA'
- 验证导出的 KRA 传输密钥和证书:
# pk12util -l transport.p12
- 在每个 KRA 克隆中执行这些步骤:
- 将
transport.p12
文件(包括传输密钥和证书)复制到 KRA 克隆位置。 - 进入克隆 NSS 数据库目录:
# cd /etc/pki/pki-kra/alias
- 停止 KRA 克隆:
# pki-server stop pki-kra
或(如果使用nuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@pki-kra.service
- 检查克隆 NSS 数据库的内容:
# certutil -d . -L
- 导入克隆的新传输密钥和证书:
# pk12util -i transport.p12 -d .
- 在克隆上的
/var/lib/pki/pki-kra/kra/conf/CS.cfg
文件中添加以下行:kra.transportUnit.newNickName=transportCert-serial_number cert-pki-kra KRA
- 启动 KRA 克隆:
# pki-server start pki-kra
或(如果使用nuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@pki-kra.service
- 使用新的 KRA 传输证书更新 CA 配置
- 格式化新的 KRA 传输证书以包含在 CA 中。
- 获取在前面的过程中获取 KRA 传输证书时创建的
cert-serial_number.txt
KRA 传输证书文件。 - 将
cert-serial_number.txt
中包含的 Base64 编码的证书转换为单行文件:# tr -d '\n' < cert-serial_number.txt > cert-one-line-serial_number.txt
- 对 CA 及其所有与上述 KRA 对应的克隆执行以下操作:
- 停止 CA:
# pki-server stop pki-ca
或(如果使用nuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@pki-ca.service
- 在
/var/lib/pki/pki-ca/ca/conf/CS.cfg
文件中,找到以下行中包含的证书:ca.connector.KRA.transportCert=certificate
将该证书替换为cert-one-line-serial_number.txt
中包含的证书。 - 启动 CA:
# pki-server start pki-ca
或(如果使用nuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@pki-ca.service
注意虽然 CA 及其克隆都使用新的 KRA 传输证书更新,但完成转换的 CA 实例使用新的 KRA 传输证书,但尚未更新的 CA 实例继续使用旧的 KRA 传输证书。由于对应的 KRA 及其克隆已更新为同时使用这两个传输证书,因此不会停机。- 更新 KRA 配置,使其仅使用新的传输密钥和证书
- 对于 KRA 及其每个克隆,请执行以下操作:
- 进入 KRA NSS 数据库目录:
# cd /etc/pki/pki-kra/alias
- 停止 KRA:
# pki-server stop pki-kra
或(如果使用nuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@pki-kra.service
- 验证新的 KRA 传输证书是否已导入:
# certutil -d . -L # certutil -d . -L -n 'transportCert-serial_number cert-pki-kra KRA'
- 打开
/var/lib/pki/pki-kra/kra/conf/CS.cfg
文件,并查找以下行中包含的nickName
值:kra.transportUnit.nickName=transportCert cert-pki-kra KRA
将nickName
值替换为以下行中包含的newNickName
值:kra.transportUnit.newNickName=transportCert-serial_number cert-pki-kra KRA
因此,CS.cfg
文件包含这一行:kra.transportUnit.nickName=transportCert-serial_number cert-pki-kra KRA
- 从
/var/lib/pki/pki-kra/kra/conf/CS.cfg
中删除以下行:kra.transportUnit.newNickName=transportCert-serial_number cert-pki-kra KRA
- 启动 KRA:
# pki-server start pki-kra
或(如果使用nuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@pki-kra.service
2.5. 使用证书系统进行智能卡令牌管理
图 2.4. TMS 如何管理智能卡
2.5.1. 令牌密钥服务(TKS)
2.5.1.1. 主密钥和密钥设置
CS.cfg
)中有一组条目。每个 TPS 配置集都包含一个配置,用于将其注册到匹配密钥派生过程的适当 TKS keySet,这基本上负责在 TMS 和智能卡令牌之间建立由一组特定于会话的密钥保护的安全频道。
2.5.1.2. Key Ceremony (Shared Key Transport)
2.5.1.3. 密钥更新(密钥更改)
2.5.1.4. APDU 和安全频道
- 命令 A PDU 由 TPS 发送到智能卡
- 响应 A PDU,由智能卡发送给 TPS,作为命令 APDU 的响应
2.5.2. 令牌处理系统(TPS)
2.5.2.1. CoolKey Applet
2.5.2.2. 令牌操作
- Token Format - 格式操作负责将正确的 Coolkey 小程序安装到令牌中。小程序提供了一个平台,稍后可以放置后续的加密密钥和证书。
- 令牌注册 - 注册操作会导致智能卡使用所需的加密密钥和加密证书填充。本材料允许智能卡的用户参与诸如安全网站访问和安全邮件等操作。支持两种类型的注册,这些注册在全局配置:
- 内部注册 - 由配置集 映射 解析器决定的 TPS 配置集注册。
- 外部注册 - 由 TPS 配置集注册,由用户的 LDAP 记录中的条目决定。
- Token PIN Reset - 令牌 PIN 重置操作允许用户指定用来登录到令牌的新 PIN,使其可用于执行加密操作。
- Key Generation - 每个 PKI 证书由一个公钥/私钥对组成。在 Red Hat Certificate System 中,可以通过两种方式生成密钥,具体取决于 TPS 配置集配置 :
- Token Side Key Generation - PKI 密钥对在智能卡令牌中生成。在令牌端生成密钥对 不允许 进行密钥归档。
- Server Side Key Generation - PKI 密钥对在 TMS 服务器端生成。然后,密钥对会使用 Secure Channel 发回到令牌。在服务器端生成密钥对允许密钥归档。
- 证书续订 - 此操作允许之前注册的令牌在重新使用同一密钥时重新发布令牌中的证书。当旧证书到期并且您希望创建新证书但维护原始密钥材料时,这非常有用。
- 证书撤销 - 证书撤销可根据 TPS 配置集配置或基于令牌状态触发。通常,只有发布的证书的 CA 可以撤销证书,这可能意味着重新创建 CA 无法撤销某些证书。但是,可以在将令牌的撤销请求路由到已停用的 CA 时,仍然会将所有其他请求路由,如注册至新的活动 CA。这种机制被称为撤销 路由。
- 令牌密钥更改 - 由格式操作触发的关键 更改操作,从而能够将令牌的内部密钥从默认开发人员密钥集更改为由令牌处理系统的部署者控制的新密钥。这通常在任何实际的部署场景中完成,因为开发人员密钥集更适合测试情况。
- 小程序更新 - 在 TMS 部署过程中,可以根据需要更新或降级 Coolkey 智能卡小程序。
2.5.2.3. TPS 配置文件
- 格式化或注册令牌的步骤。
- 在操作成功完成后,已完成的令牌中包含的属性。
- TPS 如何连接到用户的身份验证 LDAP 数据库?
- 此令牌操作是否需要用户身份验证?如果是,将使用什么身份验证管理器?
- TPS 如何连接到要获取证书的证书系统 CA?
- 如何在此令牌中生成私钥和公钥?它们是否在令牌端或服务器端生成?
- 生成私钥和公钥时要使用的密钥大小(以位为单位)?
- 哪个证书注册配置文件(由 CA 置备)用于在这个令牌上生成证书?注意此设置将决定要写入令牌的证书的最终结构。根据证书中包含的扩展,可以为不同的使用创建不同的证书。例如,一个证书可以特殊化数据加密,另一个证书可用于签名操作。
- 令牌上需要哪个 Coolkey 小程序版本?
- 在此令牌中,将放置多少个证书用于注册操作?
- 内部注册 - 在这种情况下,TPS 配置集(
tokenType
)由配置集 Mapping Resolver 决定。这个基于过滤器的解析器可以配置为考虑令牌提供的任何数据,并确定目标配置集。 - 外部注册 - 使用外部注册时,配置集(仅在名称中 - 实际的配置文件仍然在 TPS 中定义,其方式与内部注册使用的相同方式在每个用户的 LDAP 记录中指定,该记录在身份验证过程中获得)。这允许 TPS 从存储用户信息的外部注册目录服务器获取密钥注册和恢复信息。这可让您控制覆盖 TPS 内部注册机制固有的注册、撤销和恢复策略。与外部注册相关的用户 LDAP 记录属性名称可以配置。当需要"组证书"的概念时,外部注册非常有用。在这种情况下,组中的所有用户都可以在其 LDAP 配置文件中配置特殊的记录来下载共享证书和密钥。
2.5.2.4. 令牌数据库
2.5.2.4.1. 令牌状态和转换
2.5.2.4.1.1. 令牌状态
表 2.9. 可能的令牌状态
Name | 代码 | 标签 |
---|---|---|
格式化 | 0 | 格式化(未初始化) |
DAMAGED | 1 | 物理损坏的 |
PERM_LOST | 2 | 永久丢失 |
暂停 | 3 | 暂停(临时丢失) |
ACTIVE | 4 | Active |
已终止 | 6 | 已终止 |
未格式化的 | 7 | 未格式化的 |
5 (
之前属于已删除的状态)的状态。
2.5.2.4.1.2. 使用图形或命令行界面的令牌状态转换完成
FORMATTED
更改为 ACTIVE
或 DAMAGED
,但它不能从 FORMATTED
过渡到 UNFORMATTED
。
tokendb.allowedTransitions
属性中,tps.operations.allowedTransitions
属性控制由令牌操作触发的转换。
/usr/share/pki/tps/conf/CS.cfg
配置文件中。
2.5.2.4.1.2.1. 使用命令行或图形界面的令牌状态转换
tokendb.allowedTransitions
属性中描述了 TPS 配置文件允许的所有可能转换:
tokendb.allowedTransitions=0:1,0:2,0:3,0:6,3:2,3:6,4:1,4:2,4:3,4:6,6:7
current code> 格式编写: <new code>
。这些代码在 表 2.9 “可能的令牌状态” 中进行了描述。默认配置在 /usr/share/pki/tps/conf/CS.cfg
中保留。
表 2.10. 可能的手动令牌状态转换
转换 | 当前状态 | 下一个状态 | 描述 |
---|---|---|---|
0:1 | 格式化 | DAMAGED | 这个令牌已被物理损坏。 |
0:2 | 格式化 | PERM_LOST | 这个令牌已被永久丢失。 |
0:3 | 格式化 | 暂停 | 这个令牌已被暂停(临时丢失)。 |
0:6 | 格式化 | 已终止 | 此令牌已被终止。 |
3:2 | 暂停 | PERM_LOST | 这个暂停的令牌已永久丢失。 |
3:6 | 暂停 | 已终止 | 这个暂停的令牌已被终止。 |
4:1 | ACTIVE | DAMAGED | 这个令牌已被物理损坏。 |
4:2 | ACTIVE | PERM_LOST | 这个令牌已被永久丢失。 |
4:3 | ACTIVE | 暂停 | 这个令牌已被暂停(临时丢失)。 |
4:6 | ACTIVE | 已终止 | 此令牌已被终止。 |
6:7 | 已终止 | 未格式化的 | 重复使用此令牌。 |
FORMATTED
,然后成为 SUSPENDED
,则它只能返回 FORMATTED
状态。如果令牌最初是 ACTIVE
,然后变为 SUSPENDED
,它只能返回 ACTIVE
状态。
表 2.11. 令牌状态转换自动触发
转换 | 当前状态 | 下一个状态 | 描述 |
---|---|---|---|
3:0 | 暂停 | 格式化 | 找到这个暂停(临时丢失)令牌。 |
3:4 | 暂停 | ACTIVE | 找到这个暂停(临时丢失)令牌。 |
2.5.2.4.1.3. 使用令牌操作的令牌状态转换
tokendb.allowedTransitions
属性描述使用令牌操作的所有可能转换:
tps.operations.allowedTransitions=0:0,0:4,4:4,4:0,7:0
current code> 格式编写: <new code>
。这些代码在 表 2.9 “可能的令牌状态” 中进行了描述。默认配置在 /usr/share/pki/tps/conf/CS.cfg
中保留。
表 2.12. 使用令牌操作可能的令牌状态转换
转换 | 当前状态 | 下一个状态 | 描述 |
---|---|---|---|
0:0 | 格式化 | 格式化 | 这允许重新格式化令牌或升级令牌中的小程序/密钥。 |
0:4 | 格式化 | ACTIVE | 这允许注册令牌。 |
4:4 | ACTIVE | ACTIVE | 这允许重新注册一个活跃的令牌。可能对外部注册很有用。 |
4:0 | ACTIVE | 格式化 | 这允许格式化活跃的令牌。 |
7:0 | 未格式化的 | 格式化 | 这允许格式化空白或之前使用的令牌。 |
2.5.2.4.1.4. 令牌状态和转换标签
/usr/share/pki/tps/conf/token-states.properties
配置文件中。默认情况下,该文件包含以下内容:
# Token states UNFORMATTED = Unformatted FORMATTED = Formatted (uninitialized) ACTIVE = Active SUSPENDED = Suspended (temporarily lost) PERM_LOST = Permanently lost DAMAGED = Physically damaged TEMP_LOST_PERM_LOST = Temporarily lost then permanently lost TERMINATED = Terminated # Token state transitions FORMATTED.DAMAGED = This token has been physically damaged. FORMATTED.PERM_LOST = This token has been permanently lost. FORMATTED.SUSPENDED = This token has been suspended (temporarily lost). FORMATTED.TERMINATED = This token has been terminated. SUSPENDED.ACTIVE = This suspended (temporarily lost) token has been found. SUSPENDED.PERM_LOST = This suspended (temporarily lost) token has become permanently lost. SUSPENDED.TERMINATED = This suspended (temporarily lost) token has been terminated. SUSPENDED.FORMATTED = This suspended (temporarily lost) token has been found. ACTIVE.DAMAGED = This token has been physically damaged. ACTIVE.PERM_LOST = This token has been permanently lost. ACTIVE.SUSPENDED = This token has been suspended (temporarily lost). ACTIVE.TERMINATED = This token has been terminated. TERMINATED.UNFORMATTED = Reuse this token.
2.5.2.4.1.5. 自定义允许令牌状态转换
/var/lib/pki/instance_name/tps/conf/CS.cfg
中编辑以下属性:
tokendb.allowedTransitions
用于自定义使用命令行或图形界面执行的允许转换列表TPS.operations.allowedTransitions
,以使用令牌操作自定义允许的转换列表
/usr/share/pki/tps/conf/CS.cfg
中。
2.5.2.4.1.6. 自定义令牌状态和转换标签
/usr/share/pki/tps/conf/token-states.properties
复制到您的实例文件夹(/var/lib/pki/instance_name/tps/conf/CS.cfg
),并根据需要更改列出的标签。
token-states.properties
文件。
2.5.2.4.1.7. 令牌活动日志
表 2.13. TPS 活动日志事件
活动 | 描述 |
---|---|
add | 添加了令牌。 |
格式 | 令牌已被格式化。 |
注册 | 令牌已注册。 |
recovery | 令牌已被恢复。 |
续订 | 令牌已续订。 |
pin_reset | 令牌 PIN 被重置。 |
token_status_change | 使用命令行或图形界面更改令牌状态。 |
token_modify | 修改了令牌。 |
delete | 令牌已删除。 |
cert_revocation | 令牌证书已被撤销。 |
cert_unrevocation | 令牌证书被取消撤销。 |
2.5.2.4.2. 令牌策略
RE_ENROLL=YES;RENEW=NO;FORCE_FORMAT=NO;PIN_RESET=NO;RESET_PIN_RESET_TO_NO=NO;RENEW_KEEP_OLD_ENC_CERTS=YES
2.5.2.5. 映射 Resolver
FilterMappingResolver
是默认由 TPS 提供的唯一映射解析器实现。它允许您为每个 映射 定义一组映射和目标结果。每个映射都包含一组过滤器,其中:
- 如果输入过滤器参数传递映射 中的所有 过滤器,则会分配
目标值
。 - 如果输入参数失败,则会跳过该映射,并按顺序尝试下一个映射。
- 如果过滤器没有指定的值,它将始终通过。
- 如果过滤器具有指定的值,则输入参数必须完全匹配。
- 定义映射的顺序非常重要。传递的第一个映射被视为已解析,并返回到调用者。
FilterMappingResolver
运行。FilterMappingResolver
支持以下输入过滤器参数:
appletMajorVersion
- 令牌上 Coolkey 小程序的主要版本。appletMinorVersion
- 令牌上 Coolkey applet 的次要版本。keySet
ortokenType
keySet
- 可以设置为客户端请求中的扩展。如果指定了扩展,必须与过滤器中的值匹配。keySet 映射解析器用于在使用外部注册时确定 keySet 值。当支持多个密钥集(例如,不同的智能卡令牌供应商)时,外部注册环境中需要 Key Set Mapping Resolver。在 TKS 中标识 master 密钥需要 keySet 值,这对于建立安全频道至关重要。当用户的 LDAP 记录填充了集合 tokenType (TPS 配置集)时,它不知道哪个卡最终会进行注册,因此 keySet 无法预先确定。keySetMappingResolver
有助于通过允许 keySet 在身份验证前解决 keySet 来解决此问题。tokenType
- okenType 可以设置为客户端请求中的扩展。如果指定扩展,则必须匹配过滤器中的值。当前为内部注册环境确定了 tokenType (也称为 TPS Profile)。
tokenATR
- 令牌回答(ATR)。tokenCUID
- "start" 和 "end" 定义令牌的卡唯一 ID (CUID)的范围必须回退到传递此过滤器。
2.5.2.6. TPS 角色
- TPS Administrator - 允许此角色:
- 管理 TPS 令牌
- 查看 TPS 证书和活动
- 管理 TPS 用户和组
- 更改常规 TPS 配置
- 管理 TPS 验证器和连接器
- 配置 TPS 配置集和配置集映射
- 配置 TPS 审计日志记录
- TPS Agent - 允许此角色:
- 配置 TPS 令牌
- 查看 TPS 证书和活动
- 更改 TPS 配置集的状态
- TPS Operator - 允许此角色:
- 查看 TPS 令牌、证书和活动
2.5.3. TKS/TPS 共享 Secret
2.5.4. 企业安全客户端(ESC)
2.6. Red Hat Certificate System Services
2.6.1. 通知
2.6.2. Jobs
2.6.3. 日志记录
2.6.4. Auditing
2.6.5. 自助测试
2.6.6. 用户、授权和访问控制
2.6.6.1. 默认管理角色
- 管理员可以为 子系统执行任何管理或配置任务。
- 代理,执行 PKI 管理任务,如批准证书请求、管理令牌注册或恢复密钥。
- 审核员,可以查看和配置审计日志。
pkispawn
工具时,在 Red Hat Certificate System 实例创建过程中创建管理用户处理管理员和代理特权。此 bootstrap 管理员默认使用 caadmin
用户名,但可以被传递给 pkispawn 命令的配置文件中的 pki_admin_uid
参数覆盖。bootstrap 管理员的目的是创建第一个管理员和代理用户。此操作需要管理员特权来优化用户和组,以及代理特权来发布证书。
2.6.6.2. 内置子系统信任角色
2.7. 克隆
2.7.1. 关于 Cloning
图 2.5. 克隆示例
- DNS 循环(round-robin),一种用于管理在多个不同服务器间分布负载的网络拥塞功能。
- 粘性 SSL/TLS,这使得返回到系统的用户能够路由之前使用的相同主机。
[Tomcat]
部分并在该部分中添加以下 name=value
对:
[Tomcat] pki_clone_setup_replication=False pki_clone_reindex_data=False
2.7.2. 准备克隆
p12
文件,然后在安装克隆子系统时使用该文件。此命令不安装或设置克隆子系统,而是为安装准备它。以下是如何使用 pki-server SUBSYSTEM-clone-prepare 命令导出子系统证书的示例。
例 2.3. 导出子系统证书
[root@pki1 ~]$
pki-server ca-clone-prepare --i topology-02-CA --pkcs12-file /tmp/caclone.p12 --pkcs12-password SECret.123
-----------------------------------------------------
Added certificate "subsystemCert cert-topology-02-CA"
-----------------------------------------------------
--------------------------------------------------------
Added certificate "caSigningCert cert-topology-02-CA CA"
--------------------------------------------------------
----------------------------------------------------------
Added certificate "ocspSigningCert cert-topology-02-CA CA"
----------------------------------------------------------
-----------------------------------------------------------
Added certificate "auditSigningCert cert-topology-02-CA CA"
-----------------------------------------------------------
p12
文件是否包含证书。在以下示例中,pki pkcs12-cert-find 的输出返回四个证书:
[root@pki1 ~]$
pki pkcs12-cert-find --pkcs12-file /tmp/caclone.p12 --pkcs12-password SECret.123
---------------
4 entries found
---------------
Certificate ID: 4649cef11b90c78d126874b91654de98ded54073
Serial Number: 0x4
Nickname: subsystemCert cert-topology-02-CA
Subject DN: CN=Subsystem Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org
Issuer DN: CN=CA Signing Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org
Trust Flags: u,u,u
Has Key: true
Certificate ID: a304cf107abd79fbda06d887cd279fb02cefe438
Serial Number: 0x1
Nickname: caSigningCert cert-topology-02-CA CA
Subject DN: CN=CA Signing Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org
Issuer DN: CN=CA Signing Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org
Trust Flags: CTu,Cu,Cu
Has Key: true
Certificate ID: 4a09e057c1edfee40f412551db1959831abe117d
Serial Number: 0x2
Nickname: ocspSigningCert cert-topology-02-CA CA
Subject DN: CN=CA OCSP Signing Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org
Issuer DN: CN=CA Signing Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org
Trust Flags: u,u,u
Has Key: true
Certificate ID: 3f42f88026267f90f59631d38805cc60ee4c711a
Serial Number: 0x5
Nickname: auditSigningCert cert-topology-02-CA CA
Subject DN: CN=CA Audit Signing Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org
Issuer DN: CN=CA Signing Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org
Trust Flags: u,u,Pu
Has Key: true
p12
文件,您现在可以设置克隆子系统。
2.7.3. 为 CA 克隆
begin*Number
和 end*Number
属性中定义,为请求和证书序列号定义单独的范围。例如:
dbs.beginRequestNumber=1 dbs.beginSerialNumber=1 dbs.enableSerialManagement=true dbs.endRequestNumber=9980000 dbs.endSerialNumber=ffe0000 dbs.replicaCloneTransferNumber=5
CS.cfg
文件的任何更改(如添加 KRA 连接或创建自定义配置集)都不会复制到克隆的配置中。
2.7.4. 克隆 KRA
2.7.5. 克隆其他子系统
2.7.6. 克隆和密钥存储
pkispawn
配置文件中指定 pki_backup_keys
和 pki_backup_password
参数,将系统密钥和证书备份到 PKCS detailed 文件。详情请查看 pki_default.cfg(5) man page 中的 BACKUP PARAMETERS
部分。
PKCS12Export
工具将其提取到 PKCSall 文件中,如 第 10.1 节 “从软件数据库备份子系统密钥” 所述。
password 和 pki_clone_pkcs12
_path
参数在 pkispawn
配置文件中定义其位置和密码,请参阅 pkispawn(8) man page 中的 安装克隆
部分。特别是,请确保 pkiuser
用户可以访问 PKCScriu 文件,并且它具有正确的 SELinux 标签。
- 复制所有必需的密钥和证书,但 SSL/TLS 服务器密钥和证书除外。保留这些证书的 nickname。此外,将 master 实例中的所有必要可信根证书复制到克隆实例,如链或交叉对证书。
- 如果令牌基于网络,那么令牌只需要使用密钥和证书;不需要复制密钥和证书。
- 在使用基于网络的硬件令牌时,请确保在硬件令牌上启用高可用性功能,以避免出现单点故障。
2.7.7. LDAP 和端口注意事项
- 如果 master 使用 SSL/TLS 连接到其数据库,则克隆使用 SSL/TLS,并且 master/clone 目录服务器数据库使用 SSL/TLS 连接进行复制。
- 如果 master 使用标准连接到其数据库,则克隆必须使用标准连接,而目录服务器数据库 可以使用 未加密的连接进行复制。
- 如果 master 使用标准连接到其数据库,则克隆必须使用标准连接,但 可以选择将 Start TLS 用于 master/clone Directory Server 数据库进行复制。启动 TLS,通过标准端口打开安全连接。注意要使用 Start TLS,目录服务器仍必须配置为接受 SSL/TLS 连接。这意味着,在配置克隆前,必须在 Directory Server 上安装服务器证书和 CA 证书,且必须启用 SSL/TLS。
2.7.8. 副本 ID 号
dbs.beginReplicaNumber=1 dbs.endReplicaNumber=95
2.7.9. 自定义配置和克隆
CS.cfg
文件中。
CS.cfg
文件中,但不会将这个连接器信息添加到克隆 CA 配置中。如果包含密钥归档的证书请求提交到 master CA,则使用 CA-KRA 连接器信息将密钥归档转发到 KRA。如果请求提交到克隆 CA,则不会识别 KRA,并且禁止密钥存档请求。
第 3 章 支持的标准和协议
3.1. TLS、ECC 和 RSA
3.1.1. 支持的加密套件
3.1.1.1. 推荐的 TLS 密码套件
ECC
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
RSA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
- TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
3.2. 允许的密钥算法及其大小
- 允许的 RSA 密钥大小:
- 2048 位或更高
- 允许 EC curves 或等同于 FIPS PUB 186-4 标准中定义的:
- nistp256
- nistp384
- nistp521
3.3. 允许的哈希功能
- SHA-256
- SHA-384
- SHA-512
- SHA-256
- SHA-384
- SHA-512
3.4. IPv4 和 IPv6 地址
- 子系统之间的通信,包括 TPS、TKS 和 CA 之间的通信,并加入安全域
- TPS 和企业安全客户端之间的令牌操作
- 子系统日志记录
- 访问控制指令
- 使用证书系统工具(包括
pki
工具、Subject Alt Name Extension 工具、HttpClient 和 Bulk Issuance 工具)执行的操作 - 客户端通信,包括
pkiconsole
工具和启用 IPv6 的浏览器用于 Web 服务 - 证书请求名称和证书主题名称,包括用户、服务器和路由器证书
- 发布
- 连接到内部数据库和身份验证目录的 LDAP 数据库
- IPv4 地址的格式必须是
n.n.n.n
或 n.n.n,m.m.m.m
。例如,128.21.39.40
或128.21.39.40,255.255.255.00
。 - IPv6 地址使用 128 位命名空间,其 IPv6 地址用冒号和以句点分隔的子网掩码。例如: 0:0:0:0:0:0:13.1.68.3,FF01::43, 或 0:0:0:0:0:0:13.1.68.3,FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:255.255.255.0.
https://ipv6host.example.com:8443/ca/services pkiconsole https://ipv6host.example.com:8443/ca
[]
)。例如:
https://[00:00:00:00:123:456:789:00:]:8443/ca/services pkiconsole https://[00:00:00:00:123:456:789:00:]:8443/ca
3.5. 支持的 PKIX 格式和协议
表 3.1. 证书系统 10 中支持的 PKIX 标准
格式或协议 | RFC 或 Draft | 描述 |
---|---|---|
X.509 版本 1 和版本 3 | International Telecommunications Union (ITU)推荐的数字证书格式。 | |
证书请求消息格式(CRMF) | RFC 4211 | 将证书请求发送到 CA 的消息格式。 |
证书管理消息格式(CMMF) | 消息格式,将来自端点实体的证书请求和撤销请求发送到 CA,并将信息返回到结束实体。CMMF 已被另一个标准 CMC 使用。 | |
通过 CS (CMC)的证书管理消息 | RFC 5274 | 基于 CS 和 PKCS #10 的公共密钥认证产品的通用接口,包括使用 Diffie-Hellman public-keys 的 RSA 签名证书的证书注册协议。CMC 包含 CRMF 和 CMMF。 |
加密消息语法(CMS) | RFC 2630 | 用于数字签名和加密的 PKCS #7 语法的超集。 |
PKIX 证书和 CRL 配置文件 | RFC 5280 | 由 IETF 为互联网的公共密钥基础架构开发的标准。它为证书指定配置集和 CRL。 |
在线证书状态协议(OCSP) | RFC 6960 | 此协议可用于确定数字证书的当前状态,而无需 CRL。 |
第 4 章 支持的平台
4.1. 常规要求
4.2. 服务器支持
4.3. 支持的 Web 浏览器
表 4.1. 平台支持的 Web 浏览器
4.4. 支持的硬件安全模块
HSM | 固件 | 设备软件 | 客户端软件 |
---|---|---|---|
nCipher nShield Connect XC (High) | nShield_HSM_Firmware-12.72.1 | 12.71.0 | SecWorld_Lin64-12.71.0 |
Thales TCT Luna Network HSM Luna-T7 | lunafw_update-7.11.1-4 | 7.11.0-25 | 610-500244-001_LunaClient-7.11.1-5 |
第 5 章 规划证书系统
5.1. 决定所需的子系统
- 它被请求并发布。
- 它有效。
- 它过期。
- 如果员工在证书过期前离开公司怎么办?
- 当 CA 签名证书过期时,使用该证书发布并签名的证书也会过期。那么将续订 CA 签名证书,允许其发布的证书保持有效,或者将重新发布?
- 如果员工丢失了智能卡或将其留在家,则怎么办。使用原始证书密钥发布替换证书吗?其他证书是否被暂停或撤销?允许临时证书?
- 当证书过期时,将发布新证书,或将续订原始证书?
5.1.1. 使用单一证书管理器
图 5.1. 仅限 CA 的证书系统
5.1.2. 为 Lost 密钥计划:密钥归档和恢复
图 5.2. CA 和 KRA
5.1.3. 平衡证书请求处理
5.1.4. 平衡客户端 OCSP 请求
图 5.3. CA 和 OCSP
5.1.5. 使用智能卡
5.2. 定义证书颁发机构层次结构
5.2.1. 协调到公共 CA
5.2.2. 从属证书系统 CA
5.2.3. 链接的 CA
5.2.4. CA Cloning
5.3. 规划安全域
ou=Security Domain,dc=server.example.com-pki-ca
cn=KRAList,ou=Security Domain,o=pki-tomcat-CA objectClass: top objectClass: pkiSecurityGroup cn: KRAList
dn: cn=kra.example.com:8443,cn=KRAList,ou=Security Domain,o=pki-tomcat-CA objectClass: top objectClass: pkiSubsystem cn: kra.example.com:8443 host: server.example.com UnSecurePort: 8080 SecurePort: 8443 SecureAdminPort: 8443 SecureAgentPort: 8443 SecureEEClientAuthPort: 8443 DomainManager: false Clone: false SubsystemName: KRA kra.example.com 8443
- 托管安全域的 CA 可以由外部授权签名。
- 在一个机构中可以设置多个安全域。但是,每个子系统只能属于一个安全域。
- 可以克隆域中的子系统。克隆子系统实例分发系统负载并提供故障转移点。
- 安全域简化了 CA 和 KRA 之间的配置;KRA 可以将其 KRA 连接器信息推送(KRA)信息,并将证书传送到 CA,而不必手动复制证书到 CA。
- 证书系统安全域允许设置离线 CA。在这种情况下,离线 root 拥有自己的安全域。所有在线从属 CA 属于不同的安全域。
- 安全域简化了 CA 和 OCSP 之间的配置。OCSP 可将其信息推送到 CA,以设置 OCSP 发布,并从 CA 检索 CA 证书链并将其存储在内部数据库中。
5.4. 确定子系统证书的要求
5.4.1. 确定要安装的证书
表 5.1. 初始子系统证书
子系统 | 证书 |
---|---|
证书管理器 |
|
OCSP |
|
KRA |
|
TKS |
|
TPS |
|
- 为 root CA 创建新自签名 CA 证书时生成新的密钥对,使之前 CA 证书下发布的所有证书都无效。这意味着,使用其旧密钥的 CA 发布或签名的证书都无法正常工作;从属证书管理器、KRA、OCSP、TKS 和 TPS 将不再正常工作,代理无法再访问代理接口。如果从属 CA 的 CA 证书被新密钥对替换,会出现这种情况。该 CA 发布的所有证书都无效,且无法正常工作。考虑续订现有的 CA 签名证书,而不是从新密钥对创建新证书。
- 如果 CA 配置为发布到 OCSP,并且具有新的 CA 签名证书或新的 CRL 签名证书,则必须将 CA 再次标识到 OCSP。
- 如果为 KRA 创建新的传输证书,则必须在 CA 配置文件
CS.cfg
中更新 KRA 信息。现有传输证书必须替换为 ca.connector.KRA.transportCert 参数中的新证书。 - 如果克隆了 CA,则在为主证书管理器创建新的 SSL/TLS 服务器证书时,克隆 CA 的证书数据库都需要使用新的 SSL/TLS 服务器证书进行更新。
- 如果证书管理器被配置为发布证书,并将 CRL 发布到 LDAP 目录,并使用 SSL/TLS 服务器证书进行 SSL/TLS 客户端身份验证,那么必须使用适当的扩展来请求新的 SSL/TLS 服务器证书。安装证书后,必须将发布目录配置为使用新的服务器证书。
- 可以为子系统实例发布任意数量的 SSL/TLS 服务器证书,但它实际上只需要一个 SSL/TLS 证书。此证书可以根据需要续订或替换。
5.4.2. 规划 CA 可辨识名称
cn=demoCA, o=Example Corporation, ou=Engineering, c=US
5.4.3. 设置 CA Signing Certificate Validity Period
5.4.4. 选择签名密钥类型和长度
- SHA256withRSA
- SHA512withRSA
- SHA256withEC
- SHA512withEC
5.4.5. 使用证书扩展
- 信任.X.500 规范通过严格的目录层次结构建立信任。相比之下,互联网和额外网络部署通常涉及分布式信任模型,它们不符合分层 X.500 方法。
- 证书使用。有些机构限制了证书的使用方式。例如,一些证书可能仅限于客户端身份验证。
- 多个证书.证书用户没有相同主题名称但不同的密钥材料的多个证书并不常见。在这种情况下,需要确定哪些密钥和证书用于什么目的。
- 备用名称.出于某些目的,具有替代的主题名称也绑定到证书中的公钥非常有用。
- 其他属性。有些机构将其他信息存储在证书中,比如无法在目录中查找信息。
- 与 CA 的关系.当证书链涉及中间 CA 时,可以包含有关嵌入在其证书中的 CA 之间的关系信息。
- CRL 检查。由于无法始终能够针对目录或原始证书颁发机构检查证书的撤销状态,因此证书对检查 CRL 的信息非常有用。
5.4.5.1. 证书扩展结构
Extension ::= SEQUENCE { extnID OBJECT IDENTIFIER, critical BOOLEAN DEFAULT FALSE, extnValue OCTET STRING }
- 扩展的对象标识符(OID)。此标识符唯一标识扩展。它还决定了 value 字段中的值的 ASN.1 类型以及如何解释值。当扩展出现在证书中时,OID 显示为扩展 ID 字段(extnID),对应的 ASN.1 编码的结构显示为 octet 字符串值(extnValue)。
- 名为 critical 的标志或布尔值字段。分配给此字段的值可以是 true 或 false,表示扩展是否为对证书的关键还是非关键。
- 如果扩展是关键的,并且证书发送到不根据扩展 ID 理解扩展的应用程序,则应用必须拒绝证书。
- 如果扩展不是关键的,并且证书发送到不根据扩展 ID 理解扩展的应用程序,则应用可以忽略扩展并接受证书。
- 包含扩展值的 DER 编码的 octet 字符串。
- 授权密钥标识符扩展,用于标识 CA 的公钥,这是用于签署证书的密钥。
- 主题 Key Identifier 扩展,用于标识主题的公钥,公钥被认证。
5.4.6. 使用和自定义证书配置文件
证书配置文件
修改证书配置文件参数
证书配置文件管理
自定义证书配置文件指南
- 决定 PKI 中需要哪些证书配置文件。发行的每种证书类型应至少有一个配置文件。每种证书可以有多个证书配置文件,来为特定类型的证书类型设置不同的身份验证方法或不同的默认值和约束。管理界面中提供的任何证书配置文件均可由代理批准,然后供终端实体用于注册。
- 删除任何不使用的证书配置文件。
- 为公司证书的特定特征修改现有证书配置文件。
- 更改证书配置文件中设置的默认值、默认值中设置的参数的值,或控制证书内容的限制。
- 通过更改参数的值来更改设置的限制。
- 更改身份验证方法。
- 通过在证书配置文件中添加或删除输入来更改输入,该输入控制输入页上的字段。
- 添加或删除输出。
5.4.6.1. 在 SSL 服务器证书中添加 SAN 扩展
/usr/share/pki/ca/profiles/ca/caInternalAuthServerCert.cfg
文件中的说明进行操作,并将以下参数添加到提供给 pkispawn
工具的配置文件中:
pki_san_inject
- 将此参数设置为
True
。 pki_san_for_server_cert
- 提供用逗号(,)分隔所需的 SAN 扩展列表。
pki_san_inject=True pki_san_for_server_cert=intca01.example.com,intca02.example.com,intca.example.com
5.4.7. 规划身份验证方法
- 在 代理批准的 注册中,最终用户请求将发送到代理以进行批准。代理批准证书请求。
- 在 自动注册 中,最终用户请求使用插件进行身份验证,然后处理证书请求;代理不会涉及注册过程。
- 在 CMC 注册 中,第三方应用程序可以创建由代理签名的请求,然后自动处理。
- 最终实体提交注册请求。用于提交请求的表单标识了身份验证和注册方法。所有 HTML 表单都由配置集动态生成,它会自动将适当的身份验证方法与表单关联。
- 如果身份验证方法是代理批准的注册,则请求将发送到 CA 代理的请求队列。如果设置了队列中请求的自动通知,则会发送电子邮件到收到新请求的相应代理。代理可以根据该表单和配置集限制修改请求。批准后,请求必须传递为证书管理器设置的证书配置文件,然后发布证书。发布证书时,它存储在内部数据库中,并可通过终端实体通过序列号或请求 ID 从终端实体检索。
- 如果身份验证方法是自动的,则最终实体将提交请求以及验证用户身份所需的信息,如 LDAP 用户名和密码。当用户成功通过身份验证时,会在不发送到代理队列的情况下处理请求。如果请求通过证书管理器的证书配置文件配置,则会发布证书并存储在内部数据库中。它通过 HTML 表单立即发送到终端实体。
5.4.8. 发布证书和 CRL
- 如果证书发布到目录中,超过签发证书的每个用户或服务器必须在 LDAP 目录中具有对应的条目。
- 如果 CRL 发布到目录中,超过它们必须发布到签发它们的 CA 的条目。
- 对于 SSL/TLS,必须在 SSL/TLS 中配置目录服务,并选择性地进行配置以允许证书管理器使用基于证书的身份验证。
- 目录管理员应配置适当的访问控制规则,以控制 DN (条目名称)和密码对 LDAP 目录的身份验证。
5.4.9. 续订或恢复 CA 签署证书
- 续订 CA 证书涉及使用与旧 CA 证书相同的主题名称和公钥和私钥材料发布一个新的 CA 证书,但具有延长的有效性周期。只要新 CA 证书在旧 CA 证书过期前向所有用户分发,续订证书允许旧 CA 证书下发布的证书在有效期内继续工作。
- Reissuing a CA 证书涉及使用新名称、公钥和私钥材料发布新的 CA 证书以及有效期。这可避免与更新 CA 证书有关的一些问题,但它需要更多工作才能使管理员和用户实施。旧 CA 发布的所有证书(包括尚未过期的证书)都必须由新 CA 更新。
5.5. 规划网络和物理安全性
5.5.1. 考虑防火墙
- 保护敏感子系统不受未授权访问的影响
- 允许适当的访问防火墙外的其他子系统和客户端
5.5.2. 考虑物理安全性和位置
5.5.3. 规划端口
- 对于不需要身份验证的最终用户的非安全 HTTP 端口
- 用于最终用户服务、代理服务、管理控制台和需要身份验证的 admin 服务的安全 HTTP 端口
- Tomcat 服务器管理端口
- Tomcat AJP Connector 端口
https://server.example.com:8443/ca/ee/ca
pkiconsole https://server.example.com:8443/ca
server.xml
文件中定义。如果没有使用端口,可以在该文件中禁用它。例如:
<Service name="Catalina">
<!--Connector port="8080"
... /--> unused standard port
<Connector port="8443" ... />
services
的文件中维护。在 Red Hat Enterprise Linux 上,通过运行命令 semanage port -l 列出当前具有 SELinux 上下文的所有端口,从而确认 SELinux 未分配端口。
5.6. 用于清理证书系统子系统密钥和证书的令牌
cert9.db
)和 密钥数据库 (key4.db
),用于生成和存储其密钥对和证书。首次使用内部令牌时,证书系统会在主机机器的文件系统中自动生成这些文件。如果为密钥对生成选择了内部令牌,则这些文件是在证书系统子系统配置期间创建的。
/var/lib/pki/instance_name/alias
目录中。
- 子系统的所有系统密钥都必须在同一令牌上生成。
- 该子系统必须安装在空的 HSM 插槽中。如果 HSM 插槽之前已经用于存储其他密钥,则使用 HSM 厂商的工具删除插槽的内容。证书系统必须能够在带有默认 nickname 的插槽上创建证书和密钥。如果没有正确清理,这些对象的名称可能会与之前的实例冲突。
- 快速 SSL/TLS 连接。速度对于同时注册或服务请求的数量非常重要。
- 私钥的硬件保护。这些设备的行为与智能卡不同,不允许从硬件令牌中复制或移除私钥。这一点非常重要,这是对在线证书管理器主动攻击的关键问题。
pkcs11.txt
数据库中。
5.7. 规划 PKI 的检查列表
- 问: 将创建多少个安全域,以及将哪些子系统实例放在每个域中?
- 问: 应为每个子系统分配哪些端口?是否需要具有单个 SSL/TLS 端口,或者最好让端口分离以提高安全性?
- 问: 哪些子系统应放在防火墙后面?哪些客户端或其他子系统需要访问这些受防火墙保护的子系统,以及如何授予访问权限?LDAP 数据库是否允许防火墙访问?
- 问: 需要物理保护哪些子系统?将如何授予访问权限,以及谁将被授予访问权限?
- 问: 所有代理和管理员的物理位置是什么?子系统的物理位置是什么?管理员或代理如何及时访问子系统服务?每个地理位置或时区需要有子系统吗?
- 问: 您需要安装多少个子系统?
- 问: 是否需要克隆任何子系统,如果如此,那么可以安全地存储其关键资料的方法?
- 问: 子系统证书和密钥是否存储在证书系统中的内部软件令牌或外部硬件令牌上?
- 问: CA 签名证书的要求是什么?证书系统是否需要控制属性,如有效期?CA 证书如何分发?
- 问: 将发布哪些证书?它们需要具备哪些特征,以及哪些配置文件设置可用于这些特征?需要对证书放置哪些限制?
- 问: 批准证书请求的要求是什么?请求者如何对自己进行身份验证,以及批准请求需要哪种流程?
- 问: 许多外部客户端是否需要验证证书状态?证书管理器中的内部 OCSP 能否处理负载?
- 问: PKI 是否允许替换密钥?它是否需要密钥归档和恢复?
- 问: 组织是否使用智能卡?如果是这样,如果智能卡被误解,则允许临时智能卡,需要密钥存档和恢复?
- 问: 发布证书和 CRL 在哪里?在接收结束时需要进行什么配置才能发布工作?需要发布哪些证书或 CRL?
5.8. 可选的第三方服务
5.8.1. Load Balancers
5.8.2. 备份硬件和软件
部分 II. 安装 Red Hat Certificate System
第 6 章 安装的先决条件和准备
6.1. 安装 Red Hat Enterprise Linux
# sysctl crypto.fips_enabled
6.2. 使用 SELinux 保护系统
6.2.1. 验证 SELinux 是否在强制模式中运行
# getenforce
6.3. 防火墙配置
表 6.1. 证书系统默认端口
服务
|
端口
|
协议
|
---|---|---|
HTTP
|
8080
|
TCP
|
HTTPS
|
8443
|
TCP
|
Tomcat 管理
|
8005
|
TCP
|
pkispawn
工具设置证书系统时,您可以自定义端口号。如果您使用与以上列出的默认值不同的端口,请在防火墙中相应地打开它们,如 第 6.3.1 节 “在防火墙中打开所需端口” 所述。有关端口的详情,请参考 第 5.5.3 节 “规划端口”。
6.3.1. 在防火墙中打开所需端口
- 确保
firewalld
服务正在运行。# systemctl status firewalld
- 启动
firewalld
并将其配置为在系统引导时自动启动:# systemctl start firewalld # systemctl enable firewalld
- 使用
firewall-cmd
工具打开所需的端口。例如,要在默认防火墙区中打开证书系统默认端口:# firewall-cmd --permanent --add-port={8080/tcp,8443/tcp,8009/tcp,8005/tcp}
- 重新载入防火墙配置以确保更改会立即进行:
# firewall-cmd --reload
6.4. 硬件安全模块
6.4.1. 为 HSM 设置 SELinux
- nCipher nShield
- 安装 HSM 并在开始安装证书系统前:
- 重置
/opt/nfast/
目录中文件的上下文:# restorecon -R /opt/nfast/
- 重新启动 nfast 软件。
# /opt/nfast/sbin/init.d-ncipher restart
- Thales Luna HSM
- 在开始安装证书系统前,不需要与 SELinux 相关的操作。
6.4.2. 在 HSM 中启用 FIPS 模式
- nCipher HSM
- 在 nCipher HSM 中,只有生成 Security World 时才能启用 FIPS 模式,之后无法更改它。虽然有各种生成 Security World 的方法,但首选的方法是使用 new-world 命令。有关如何生成 FIPS 兼容安全世界的指导,请按照 nCipher HSM 供应商的文档进行操作。
- LunaSA HSM
- 同样,必须在 Luna HSM 上启用 FIPS 模式,因为更改此策略会将 HSM 归类为安全措施。详情请查看 Luna HSM 供应商的文档。
6.4.3. 验证 HSM 上是否启用了 FIPS 模式
6.4.3.1. 验证 nCipher HSM 中是否启用了 FIPS 模式
# /opt/nfast/bin/nfkminfo
StrictFIPS140
列在 state 标记中,则启用 FIPS 模式。在较新的版本中,最好检查新模式行并查找 fips1402level3
。
在所有情况下,nfkminfo
输出中也应该有一个 hkfips
密钥。
6.4.3.2. 验证 Luna SA HSM 上是否启用了 FIPS 模式
- 打开 lunash 管理控制台
- 使用 hsm show 命令,并验证输出中是否包含文本 The HSM in FIPS 140-2 approved operation mode。
lunash:> hsm show ... FIPS 140-2 Operation: ===================== The HSM is in FIPS 140-2 approved operation mode. ...
6.4.4. 准备使用 HSM 安装证书系统
pkispawn
工具的以下参数:
... [DEFAULT] ########################## # Provide HSM parameters # ########################## pki_hsm_enable=True pki_hsm_libfile=hsm_libfile pki_hsm_modulename=hsm_modulename pki_token_name=hsm_token_name pki_token_password=pki_token_password ######################################## # Provide PKI-specific HSM token names # ######################################## pki_audit_signing_token=hsm_token_name pki_ssl_server_token=hsm_token_name pki_subsystem_token=hsm_token_name ...
pki_hsm_libfile
和pki_token_name
参数的值取决于您的特定 HSM 安装。这些值允许pkispawn
工具设置 HSM 并启用证书系统来连接它。pki_token_password
的值取决于您的特定 HSM 令牌的密码。密码提供pkispawn
工具读写权限,以便在 HSM 上创建新密钥。pki_hsm_modulename
的值是后续 pkispawn 操作中使用的名称来识别 HSM。字符串是一个标识符,您可以原样设置。它允许pkispawn
和 Certificate System 在后续操作中按名称引用 HSM 和配置信息。
6.4.4.1. nCipher HSM 参数
pki_hsm_libfile=/opt/nfast/toolkits/pkcs11/libcknfast.so pki_hsm_modulename=nfast
pki_hsm_modulename
的值设置为任何值。以上是推荐的值。
例 6.1. 识别令牌名称
root
用户身份运行以下命令:
[root@example911 ~]# /opt/nfast/bin/nfkminfo
World
generation 2
...~snip~...
Cardset
name "NHSM-CONN-XC"
k-out-of-n 1/4
flags NotPersistent PINRecoveryRequired(enabled) !RemoteEnabled
timeout none
...~snip~...
Cardset
部分中的 name
字段的值列出了令牌名称。
pki_token_name=NHSM-CONN-XC
6.4.4.2. SafeNet / Luna SA HSM 参数
pki_hsm_libfile=/usr/safenet/lunaclient/lib/libCryptoki2_64.so pki_hsm_modulename=lunasa
pki_hsm_modulename
的值设置为任何值。以上是推荐的值。
例 6.2. 识别令牌名称
root
用户身份运行以下命令:
# /usr/safenet/lunaclient/bin/vtl verify
The following Luna SA Slots/Partitions were found:
Slot Serial # Label
==== ================ =====
0 1209461834772 lunasaQE
label
列中的值列出了令牌名称。
pki_token_name=lunasaQE
6.4.5. 在硬件安全模块中备份密钥
.p12
文件。如果要备份这样的实例,请联络您的 HSM 厂商以获得支持。
6.5. 安装 Red Hat Directory Server
# sysctl crypto.fips_enabled
6.5.1. 为证书系统准备目录服务器实例
- 确保您已附加了一个向主机提供目录服务器的订阅。
- 启用 Directory Server 存储库:
#
subscription-manager repos --enable=dirsrv-11-for-rhel-8-x86_64-rpms
- 安装 Directory 服务器和 openldap-clients 软件包:
#
dnf module install redhat-ds
#
dnf install openldap-clients
- 设置 Directory 服务器实例。
- 生成 DS 配置文件,例如
/tmp/ds-setup.inf
:$
dscreate create-template /tmp/ds-setup.inf
- 自定义 DS 配置文件,如下所示:
$ sed -i \ -e "s/;instance_name = .*/instance_name = localhost/g" \ -e "s/;root_password = .*/root_password = Secret.123/g" \ -e "s/;suffix = .*/suffix = dc=example,dc=com/g" \ -e "s/;create_suffix_entry = .*/create_suffix_entry = True/g" \ -e "s/;self_sign_cert = .*/self_sign_cert = False/g" \ /tmp/ds-setup.inf
- 使用带有
设置
配置文件的 dscreate 命令创建实例:#
dscreate from-file /tmp/ds-setup.inf
具体步骤请查看 红帽目录服务器安装指南。
6.5.2. 准备配置证书系统
pkispawn
工具的配置文件中的以下参数:
pki_ds_password
不再相关。
pki_ds_database=back_end_database_name pki_ds_hostname=host_name pki_ds_secure_connection=True pki_ds_secure_connection_ca_pem_file=path_to_CA_or_self-signed_certificate pki_ds_password=password pki_ds_ldaps_port=port pki_ds_bind_dn=cn=Directory Manager
pki_ds_database
参数的值是 pkispawn
实用程序使用的名称,用于在 Directory Server 实例上创建对应的子系统数据库。
pki_ds_hostname
参数的值取决于目录服务器实例的安装位置。这取决于 第 6.5.1 节 “为证书系统准备目录服务器实例” 中使用的值。
pki_ds_secure_connection_ca_pem_file
:设置完全限定路径,包括包含目录服务器 CA 证书的导出副本的文件名称。在pkispawn
能够使用该文件之前,该文件必须已存在。pki_ds_ldaps_port
:设置安全 LDAPS 端口目录服务器的值。默认值为 636。
6.6. 在目录服务器(CA)中替换临时自签名证书
6.7. 为内部 LDAP 服务器启用 TLS 客户端身份验证
6.8. 附加红帽订阅并启用证书系统软件包存储库
- 将红帽订阅附加到系统:如果您的系统已经注册或者有附加了证书服务器的订阅,请跳过这一步。
- 将该系统注册到红帽订阅管理服务。您可以使用
--auto-attach
选项为操作系统自动应用可用的订阅。#
subscription-manager register --auto-attach
Username: admin@example.com Password: The system has been registered with id: 566629db-a4ec-43e1-aa02-9cbaa6177c3f Installed Product Current Status: Product Name: Red Hat Enterprise Linux Server Status: Subscribed - 列出可用的订阅,并记录提供红帽证书系统的池 ID。例如:
#
subscription-manager list --available --all
... Subscription Name: Red Hat Enterprise Linux Developer Suite Provides: ... Red Hat Certificate System ... Pool ID: 7aba89677a6a38fc0bba7dac673f7993 Available: 1 ...如果您有很多订阅,命令的输出可能会非常长。您可以选择将输出重定向到文件中:#
subscription-manager list --available --all > /root/subscriptions.txt
- 使用上一步中的池 ID 将证书系统订阅附加到系统:
#
subscription-manager attach --pool=7aba89677a6a38fc0bba7dac673f7993
Successfully attached a subscription for: Red Hat Enterprise Linux Developer Suite
- 启用证书系统存储库:
#
subscription-manager repos --enable certsys-10.x-for-rhel-8-x86_64-rpms
其中 x 表示最新的证书系统版本。例如,要为 RHCS 10.4 启用证书系统存储库,请使用以下命令:#
subscription-manager repos --enable certsys-10.4-for-rhel-8-x86_64-rpms
Repository 'certsys-10.4-for-rhel-8-x86_64-rpms' is enabled for this system. - 启用证书系统模块流:
#
dnf module enable redhat-pki
subscription-manager
工具启用。
6.9. 证书系统用户和组
pkiuser
帐户和对应的 pkiuser
组。证书系统使用此帐户和组来启动服务。
第 7 章 安装和配置证书系统
- 证书颁发机构(CA)
- 密钥恢复授权中心 (KRA)
- 在线证书状态协议(OCSP)响应
- 令牌密钥服务(TKS)
- 令牌处理系统(TPS)
7.1. 子系统配置顺序
- 在安装任何其他公钥基础架构(PKI)子系统之前,至少需要一台作为安全域运行的 CA。
- 配置 CA 后安装 OCSP。
- KRA 和 TKS 子系统可以在配置 CA 和 OCSP 后以任何顺序安装。
- TPS 子系统依赖于 CA 和 TKS,以及可选的 KRA 和 OCSP 子系统。
7.2. 证书系统软件包
- pki-ca: 提供证书颁发机构(CA)子系统。
- pki-kra :提供密钥恢复授权机构(KRA)子系统。
- pki-ocsp :提供在线证书状态协议(OCSP)响应器。
- pki-tks :提供令牌密钥服务(TKS)。
- pki-tps :提供令牌处理服务(TPS)。
- pki-console 和 redhat-pki-console-theme :提供基于 Java 的红帽 PKI 控制台。必须安装这两个软件包。
- pki-server 和 redhat-pki-server-theme :提供基于 Web 的证书系统接口。必须安装这两个软件包。如果您安装以下软件包之一,则这个软件包会被安装为依赖项: pki-ca,pki-kra,pki-ocsp,pki-tks,pki-tps
7.2.1. 安装证书系统软件包
- 使用 redhat-pki 模块,您可以在 RHEL 8 系统上一次性安装所有证书系统子系统软件包和组件。redhat-pki 模块会安装 Red Hat Certificate System 的五个子系统:除了 pki-core 模块(CA、KRA)之外,它还是 Red Hat Identity Management (IdM)的一部分,包括特定于 RHCS 的子系统(OCSP、TKS 和 TPS),以及处理所需依赖项的 pki-deps 模块。
# yum install redhat-pki
- 或者,您可以单独安装软件包。例如,要安装 CA 子系统和可选 Web 界面:
# yum install pki-ca redhat-pki-server-theme
对于其他子系统,将 pki-ca 软件包名称替换为您要安装的子系统之一。 - 如果您需要可选的 PKI 控制台:
# yum install pki-console redhat-pki-console-theme
注意pkiconsole
工具将被弃用。
7.2.2. 更新证书系统软件包
- 按照 第 7.2.3 节 “确定证书系统产品版本” 中的说明检查产品版本。
- 执行 ; yum update以上命令更新整个系统,包括 RHCS 软件包。注意我们建议调度维护窗口,您可以在其中使 PKI 基础架构离线来安装更新。重要更新证书系统需要重启 PKI 基础架构。
- 然后,使用以下 第 7.2.3 节 “确定证书系统产品版本” 再次检查版本。版本号应该确认已成功安装了更新。
yum update --downloadonly
/var/cache/yum/
目录中。如果软件包是最新版本,yum update 将会使用这些软件包。
7.2.3. 确定证书系统产品版本
/usr/share/pki/CS_SERVER_VERSION
文件中。显示版本:
# cat /usr/share/pki/CS_SERVER_VERSION Red Hat Certificate System 10.0 (Batch Update 1)
- http://host_name:port_number/ca/admin/ca/getStatus
- http://host_name:port_number/kra/admin/kra/getStatus
- http://host_name:port_number/ocsp/admin/ocsp/getStatus
- http://host_name:port_number/tks/admin/tks/getStatus
- http://host_name:port_number/tps/admin/tps/getStatus
7.3. 了解 pkispawn 实用程序
- 从
/etc/pki/default.cfg
文件中读取默认值。详情请查看 pki_default.cfg(5) man page。重要 - 根据设置模式,使用提供的密码和其他特定于部署的信息:
- 交互模式 :在设置过程中要求用户单独设置。将此模式用于简单部署。
- 批处理模式:值从用户提供的配置文件中读取。配置文件中未设置的参数使用默认值。
- 执行请求的 PKI 子系统的安装。
- 将设置传递给根据设置执行配置的 Java servlet。
pkispawn
工具安装:
- root CA。详情请查看 第 7.4 节 “设置根证书颁发机构”。
- 从属 CA 或任何其他子系统。详情请查看 第 7.6 节 “设置额外的子系统”。
7.4. 设置根证书颁发机构
- 基于配置文件的安装:使用此方法进行高级别自定义。这个安装方法使用配置文件来覆盖默认安装参数。您可以在一个步骤中使用配置文件或两个步骤安装证书系统。有关详情和示例,请参阅:
- 单步安装的 pkispawn(8) man page。
- 第 7.7 节 “两步安装” 对于两步安装。
- 交互式安装:
# pkispawn -s CA
如果您只想设置所需的配置选项,请使用交互式安装程序。
7.5. 安装后
7.6. 设置额外的子系统
先决条件
安装子系统
- 基于配置文件的安装:使用此方法进行高级别自定义。这个安装方法使用配置文件来覆盖默认安装参数。您可以在一个步骤中使用配置文件或两个步骤安装证书系统。有关详情和示例,请参阅:
- 单步安装的 pkispawn(8) man page。
- 第 7.7 节 “两步安装” 对于两步安装。
- 交互式安装:如果您只想设置所需的配置选项,请使用交互式安装程序。例如:
# pkispawn -s subsystem
使用以下 子系统 之一替换 subsystem:KRA
、OCSP
、TKS
或TPS
。交互式安装程序不支持安装从属 CA。要安装从属 CA,请使用两个步骤安装。请参阅 第 7.7 节 “两步安装”。
7.7. 两步安装
pkispawn
工具可让您在两个步骤中运行子系统的安装。
7.7.1. 何时使用双步安装
- 提高安全性。
- 自定义子系统证书。
- 在安装要连接到现有证书系统的新证书系统实例时,自定义
/etc/pki/instance_name/server.xml
文件中的sslRangeCiphers
参数中的 cipher 列表。 - 在 FIPS 模式中安装 CA 克隆、KRA、OCSP、TKS 和 TPS。
- 在 FIPS 模式下使用硬件安全模块(HSM)安装证书系统。
7.7.2. 这两个步骤安装的主要部分
- 安装在这一步中,
pkispawn
将配置文件从/usr/share/pki/
目录复制到特定于实例的/etc/pki/instance_name/
目录。另外,pkispawn
根据部署配置文件中定义的值设置。这个安装部分包含以下子步骤: - Configuration在这一步中,
pkispawn
根据特定于实例的/etc/pki/instance_name/
目录中的配置文件继续安装。这个安装部分包含以下子步骤:
7.7.3. 为安装的第一个步骤创建配置文件
/root/config.txt
,并使用下面描述的设置填充它。
独立于子系统的设置
- 设置证书系统
admin
用户的密码、PKCS TOTP 文件和目录服务器:[DEFAULT] pki_admin_password=password pki_client_pkcs12_password=password pki_ds_password=password
- 要使用到在同一主机上运行的目录服务器的 LDAPS 连接,请在配置文件中的
[DEFAULT]
部分添加以下参数:pki_ds_secure_connection=True pki_ds_secure_connection_ca_pem_file=path_to_CA_or_self-signed_certificate
注意为了安全起见,红帽建议使用到目录服务器的加密连接。如果您在目录服务器中使用自签名证书,请使用以下命令从目录服务器的网络安全服务(NSS)数据库中导出它:# certutil -L -d /etc/dirsrv/slapd-instance_name/ \ -n "server-cert" -a -o /root/ds.crt
~/.dogtag/instance_name/子系统/alias
客户端数据库。为了安全起见,红帽建议在配置文件中启用 pki_client_database_purge
参数。如果手动将此参数设置为 True,则证书系统在安装后不会删除客户端数据库。
CA 设置
- 要提高安全性,请通过在配置文件中添加
[CA]
部分来启用随机序列号:[CA] pki_random_serial_numbers_enable=true
- 另外,还可在
[CA]
部分中设置以下参数,以指定admin
用户的数据,这将在安装过程中自动创建:pki_admin_nickname=caadmin pki_admin_name=CA administrator account pki_admin_password=password pki_admin_uid=caadmin pki_admin_email=caadmin@example.com
证书系统为这个帐户分配管理员特权。安装后使用此帐户来管理证书系统并创建更多用户帐户。 - 要启用证书系统生成唯一的 nickname,请在
[DEFAULT]
部分中设置以下参数:pki_instance_name=instance_name pki_security_domain_name=example.com Security Domain pki_host=server.example.com
重要如果使用网络共享硬件安全模块(HSM)安装证书系统,则必须使用唯一的证书 nickname。 - (可选)在生成证书时使用 Elliptic Curve Curve Cryptography (ECC)而不是 RSA:
- 在
[DEFAULT]
部分添加以下参数:pki_admin_key_algorithm=SHA256withEC pki_admin_key_size=nistp256 pki_admin_key_type=ecc pki_sslserver_key_algorithm=SHA256withEC pki_sslserver_key_size=nistp256 pki_sslserver_key_type=ecc pki_subsystem_key_algorithm=SHA256withEC pki_subsystem_key_size=nistp256 pki_subsystem_key_type=ecc
- 在
[CA]
部分添加以下参数:pki_ca_signing_key_algorithm=SHA256withEC pki_ca_signing_key_size=nistp256 pki_ca_signing_key_type=ecc pki_ca_signing_signing_algorithm=SHA256withEC pki_ocsp_signing_key_algorithm=SHA256withEC pki_ocsp_signing_key_size=nistp256 pki_ocsp_signing_key_type=ecc pki_ocsp_signing_signing_algorithm=SHA256withEC
- 在
[CA]
部分添加以下参数以使用 ECC 配置集覆盖 RSA 配置集:pki_source_admincert_profile=/usr/share/pki/ca/conf/eccAdminCert.profile pki_source_servercert_profile=/usr/share/pki/ca/conf/eccServerCert.profile pki_source_subsystemcert_profile=/usr/share/pki/ca/conf/eccSubsystemCert.profile
其他子系统的设置
- 在您的配置文件的
[DEFAULT]
部分添加以下条目:pki_client_database_password=password
- 如果要安装 TPS:
- 使用以下部分添加以下部分:
[TPS] pki_authdb_basedn=basedn_of_the_TPS_authentication_database
- 另外,要配置 TPS 使用在共享 CA 实例中已安装的 KRA 的服务器端密钥生成,请将以下条目添加到
[TPS]
部分:pki_enable_server_side_keygen=True
7.7.4. 启动安装步骤
# pkispawn -f /root/config.txt -s subsystem --skip-configuration
CA
、KRA
、OCSP
、TKS
或 TPS
。
7.7.5. 自定义安装步骤之间的配置
7.7.5.1. 配置证书配置文件
7.7.5.2. 启用签名的审计日志记录
7.7.5.3. 更新 Ciphers 列表
- 保护证书系统实例
- 要安装证书系统实例,并将其添加到只支持特定密码的现有站点
RSA 加密的默认 FIPS 模式启用 Ciphers
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_256_CBC_SHA256
ECC 加密的默认 FIPS 模式启用 Ciphers
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_256_CBC_SHA256
在启用了 FIPS 模式的系统中运行 HSM 时所需的 RSA 密码
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
7.7.5.4. 配置 PKI 控制台超时
7.7.5.5. 将 KRA 设置为加密模式
7.7.5.6. 启用 OCSP
7.7.5.7. 为请求和序列号配置范围
7.7.6. 启动配置步骤
# pkispawn -f /root/config.txt -s subsystem --skip-installation
CA
、KRA
、OCSP
、TKS
或 TPS
。
pkispawn
工具会显示安装概述。例如:
================================================================ INSTALLATION SUMMARY ================================================================ Administrator's username: caadmin Administrator's PKCS #12 file: /root/.dogtag/instance_name/ca_admin_cert.p12 To check the status of the subsystem: systemctl status pki-tomcatd@instance_name.service To restart the subsystem: systemctl restart pki-tomcatd@instance_name.service The URL for the subsystem is: https://server.example.com:8443/ca/ PKI instances will be enabled upon system boot ================================================================
7.7.7. 安装后
7.8. 使用外部 CA 设置子系统
7.8.1. 内部和外部 CA 间的差异
pkispawn
实用程序将子系统证书签名请求(CSR)发送到之前安装的证书系统时,生成的发布的证书会被 pkispawn
接收和使用,CA CSR 发送到内部 CA
。
外部 CA
可以是以下之一:
- 为证书系统从属 CA 发布签名证书的非红帽证书系统 CA。
- 以前安装的 Red Hat Certificate System CA 不允许直接提交 CSR。例如,如果您的环境需要来自从属 CA、KRA、OCSP、TKS 或 TPS 的 CSR,则情况是,采用 PKCS #10 以外的其他格式。
7.8.2. 使用外部 CA 安装子系统
为外部 CA 安装准备配置文件
- 如果您安装了一个子系统,它集成到现有的证书系统安装中,但使用外部 CA 签名的证书:
- 为子系统创建配置文件。请参阅 第 7.7.3 节 “为安装的第一个步骤创建配置文件”。
- 在相应的 [CA]、[KRA] 或 [OCSP] 部分的配置文件中添加以下设置:
- 对于 CA 安装:
[CA] pki_external=True pki_external_step_two=False pki_ca_signing_csr_path=path/to/ca_signing.csr pki_ca_signing_cert_path=path/to/ca_signing.crt
- 对于 KRA 安装:
[KRA] pki_external=True pki_external_step_two=False pki_storage_csr_path=/home/user_name/kra_storage.csr pki_transport_csr_path=/home/user_name/kra_transport.csr pki_subsystem_csr_path=/home/user_name/subsystem.csr pki_sslserver_csr_path=/home/user_name/sslserver.csr pki_audit_signing_csr_path=/home/user_name/kra_audit_signing.csr pki_admin_csr_path=/home/user_name/kra_admin.csr
- 对于 OCSP 安装:
[OCSP] pki_external=True pki_external_step_two=False pki_ocsp_signing_csr_path=/home/user_name/ocsp_signing.csr pki_subsystem_csr_path=/home/user_name/subsystem.csr pki_sslserver_csr_path=/home/user_name/sslserver.csr pki_audit_signing_csr_path=/home/user_name/ocsp_audit_signing.csr pki_admin_csr_path=/home/user_name/ocsp_admin.csr
- 如果您安装了一个没有集成到现有证书系统安装中的独立 KRA 或 OCSP,请执行 第 7.9 节 “设置独立 KRA 或 OCSP” 中介绍的步骤。
使用外部 CA 启动子系统安装
- 使用
pkispawn
工具开始安装:# pkispawn -f /root/config.txt -s subsystem
使用您要安装的 子系统 替换 subsystem:CA
、KRA
或OCSP
。在这一步中,设置会将 CSR 存储在配置中指定的文件中。 - 将 CSR 提交给外部 CA。在 CA 发布相应证书后继续。在某些环境中,如果外部 CA 也是证书系统实例,在提交到 CA 前,需要把 PKCS#10 格式的 CSR 转换为 CMC 格式。有关 发布证书的详细信息,请参阅 Red Hat Certificate System Administration Guide 中的使用 CMC 的颁发证书部分。
- (可选)自定义安装。详情请查看 第 7.7.5 节 “自定义安装步骤之间的配置”。
- 在外部 CA 发布证书后,编辑部署配置文件:
- 将
pki_external_step_two
设置为 True :pki_external_step_two=True
- 根据您要安装的子系统,添加以下参数:
- 对于 CA,设置证书文件的路径。例如:
pki_ca_signing_cert_path=/home/user_name/ca_signing.crt
如果指定文件不包含包含证书链的证书,还要指定证书链文件的路径及其 nickname。例如:pki_cert_chain_path=/home/user_name/cert_chain.p7b pki_cert_chain_nickname=CA Signing Certificate
- 对于 KRA,设置证书文件的路径。例如:
pki_storage_cert_path=/home/user_name/kra_storage.crt pki_transport_cert_path=/home/user_name/kra_transport.crt pki_subsystem_cert_path=/home/user_name/subsystem.crt pki_sslserver_cert_path=/home/user_namesslserver.crt pki_audit_signing_cert_path=/home/user_name/kra_audit_signing.crt pki_admin_cert_path=/home/user_name/kra_admin.crt
如果指定文件不包含包含证书链的证书,还要指定签名证书文件的路径,以及证书链文件及其 nickname。例如:pki_ca_signing_nickname=CA Signing Certificate pki_ca_signing_cert_path=/home/user_name/ca_signing.crt pki_cert_chain_nickname=External Certificate Chain pki_cert_chain_path=/home/user_name/cert_chain.p7b
- 对于 OCSP,设置证书文件的路径。例如:
pki_ocsp_signing_cert_path=/home/user_name/ocsp_signing.crt pki_subsystem_cert_path=/home/user_name/subsystem.crt pki_sslserver_cert_path=/home/user_name/sslserver.crt pki_audit_signing_cert_path=/home/user_name/ocsp_audit_signing.crt pki_admin_cert_path=/home/user_name/ocsp_admin.crt
如果指定文件不包含包含证书链的证书,还要指定签名证书文件的路径,以及证书链文件及其 nickname。例如:pki_ca_signing_nickname=CA Signing Certificate pki_ca_signing_cert_path=/home/user_name/ca_signing.crt pki_cert_chain_nickname=External Certificate Chain pki_cert_chain_path=/home/user_name/cert_chain.p7b
- (可选)自定义配置文件。例如,请参阅 第 7.7.5 节 “自定义安装步骤之间的配置”。
- 启动配置步骤:
# pkispawn -f /root/config.txt -s subsystem
使用您要安装的 子系统 替换 subsystem:CA
、KRA
或OCSP
。
7.8.3. 安装后
7.9. 设置独立 KRA 或 OCSP
- 创建包含以下内容的配置文件,如
/root/config.txt
:[DEFAULT] pki_admin_password=password pki_client_database_password=password pki_client_pkcs12_password=password pki_ds_password=password pki_token_password=password pki_client_database_purge=False pki_security_domain_name=EXAMPLE pki_standalone=True pki_external_step_two=False
- 对于独立 KRA,请在配置文件中添加以下部分:
[KRA] pki_admin_email=kraadmin@example.com pki_ds_base_dn=dc=kra,dc=example,dc=com pki_ds_database=kra pki_admin_nickname=kraadmin pki_audit_signing_nickname=kra_audit_signing pki_sslserver_nickname=sslserver pki_storage_nickname=kra_storage pki_subsystem_nickname=subsystem pki_transport_nickname=kra_transport pki_standalone=True
- 对于独立的 OCSP,请在配置文件中添加以下部分:
[OCSP] pki_admin_email=ocspadmin@example.com pki_ds_base_dn=dc=ocsp,dc=example,dc=com pki_ds_database=ocsp pki_admin_nickname=ocspadmin pki_audit_signing_nickname=ocsp_audit_signing pki_ocsp_signing_nickname=ocsp_signing pki_sslserver_nickname=sslserver pki_subsystem_nickname=subsystem pki_standalone=True
- 要使用到在同一主机上运行的目录服务器的 LDAPS 连接,请在配置文件中的
DEFAULT
部分添加以下参数:pki_ds_secure_connection=True pki_ds_secure_connection_ca_pem_file=path_to_CA_or_self-signed_certificate
注意为了安全起见,红帽建议使用到目录服务器的加密连接。如果您在目录服务器中使用自签名证书,请使用以下命令从目录服务器的网络安全服务(NSS)数据库中导出它:# certutil -L -d /etc/dirsrv/slapd-instance_name/ \ -n "server-cert" -a -o /root/ds.crt
- 继续执行 “使用外部 CA 启动子系统安装”一节 中描述的步骤。
7.10. 安装后的任务
pkispawn
工具安装完成后,可以采取进一步的步骤来自定义配置,具体取决于站点的首选项。它们在 第 III 部分 “配置证书系统” 中进行了描述。
7.10.1. 为 RHCS 设置日期/时间
7.10.2. 替换临时证书
- 获取新的目录服务器服务器证书。提交 CA 签名的新证书的请求。要使用 CMC 方法获取新的目录服务器证书,请参阅 Red Hat Certificate System Administration Guide 中的 Obtaining System and Server Certificates 部分。在上一节中,按照指导创建 TLS 服务器证书。创建证书后,必须将其重新导入到目录服务器的证书数据库中。
- 在访问 NSS 数据库前停止 Directory 服务器实例:
# systemctl stop dirsrv@instance_name
- 删除旧的 Directory 服务器证书:
# certutil -F -d /etc/dirsrv/slapd-instance_name -f /etc/dirsrv/slapd-instance_name/password.txt -n "DS Certificate"
- 导入之前下载的 CA 证书:
# PKICertImport -d /etc/dirsrv/slapd-instance_name -f /etc/dirsrv/slapd-instance_name/password.txt -n "CA Certificate" -t "CT,C,C" -a -i ca.crt -u L
- 导入之前下载的新目录服务器证书:
# PKICertImport -d /etc/dirsrv/slapd-instance_name -f /etc/dirsrv/slapd-instance_name/password.txt -n "DS Certificate" -t ",," -a -i ds.crt -u V
另请参阅 第 15.4 节 “将证书导入到 HSM 中”。 - 启动 Directory 服务器实例:
# systemctl start dirsrv@instance_name
- 从 PKI CA 中删除旧目录服务器证书:
- 停止证书系统实例:
# systemctl stop pki-tomcatd@instance_name.service
- 删除证书:
# certutil -D -d /var/lib/pki/instance_name/alias/ -n "DS Certificate"
- 启动证书系统实例:
# systemctl start pki-tomcatd@instance_name.service
- 验证新的 Directory 服务器证书是否由 NSS 数据库中安装的 CA 签名:
- 显示目录服务器证书
$ certutil -L -d /etc/dirsrv/slapd-instance_name -n "DS Certificate" Issuer: "CN=CA Signing Certificate,O=EXAMPLE" Subject: "CN=server.example.com"
- 验证 PKI NSS 数据库中不再存在旧的 Directory 服务器证书:
$ certutil -L -d /var/lib/pki/instance_name/alias
- 验证证书系统可以使用新证书连接到目录服务器:
$ pki cert-find
7.10.3. 启用 TLS 客户端身份验证
pkispawn
已在其内部目录服务器上自动创建pkidbuser
,其中 CS 实例的"子系统证书" (如subsystemCert cert-pki-ca
)存储在用户条目中。因此,不需要为 TLS 客户端身份验证创建另一个 LDAP 用户或其他证书。- 为
/etc/dirsrv/slapd-instance_name/certmap.conf
创建内容时,请使用以下格式:certmap rhcs <certificate issuer DN> rhcs:CmapLdapAttr seeAlso rhcs:verifyCert on
例如:certmap rhcs CN=CA Signing Certificate,OU=pki-tomcat-ca,O=pki-tomcat-ca-SD rhcs:CmapLdapAttr seeAlso rhcs:verifyCert on
- 配置后,重启 Directory 服务器。
instance 目录> / <subsystem type> /conf/ CS.cfg
的 RHCS 实例的 CS.cfg
文件。例如 /var/lib/pki/instance_name/ca/conf/CS.cfg
CS.cfg
中,请将 RHCS 实例的子系统证书别名添加到 internaldb.ldapauth.clientCertNickname
,并删除两个未使用的条目:
internaldb.ldapauth.bindDN internaldb.ldapauth.bindPWPrompt
internaldb._000=## internaldb._001=## Internal Database internaldb._002=## internaldb.basedn=o=pki-tomcat-ca-SD internaldb.database=pki-tomcat-ca internaldb.maxConns=15 internaldb.minConns=3 internaldb.ldapauth.authtype=SslClientAuth internaldb.ldapauth.clientCertNickname=HSM-A:subsystemCert pki-tomcat-ca internaldb.ldapconn.host=example.com internaldb.ldapconn.port=11636 internaldb.ldapconn.secureConn=true
internaldb.basedn
和 internaldb.database
参数必须配置为与特定的 LDAP 实例匹配。
internaldb.ldapauth.clientCertNickname
的值必须与 TLS 客户端证书的 nickname 匹配,以便在 NSS DB 中针对 LDAP 进行身份验证。
7.10.4. 配置会话超时
7.10.5. CRL 或 Certificate Publishing
7.10.6. 配置证书注册配置文件(CA)
7.10.7. 启用访问横幅
7.10.8. 启用 Watchdog 服务
7.10.9. CMC Enrollment 和 Revocation (CA)的配置
- 有关启用 CMC 共享文件系统服务功能的详情,请参考 第 14.8.3 节 “启用 CMC 共享 Secret 功能”。
- 有关启用
PopLinkWittness
功能的详情,请参考 第 14.8.2 节 “启用PopLinkWittnessV2
功能”。 - 有关为 Web 用户界面启用
CMCRevoke
的详情,请参考 第 14.8.4 节 “为 Web 用户界面启用 CMCRevoke”。
7.10.10. Java 控制台的 TLS 客户端身份验证
pkiconsole
设置要求以使用 TLS 客户端证书验证”。
pkiconsole
已被弃用。
7.10.11. 创建角色用户
7.10.12. 删除 Bootstrap 用户
7.10.13. 禁用多角色支持
7.10.14. KRA 配置
7.10.14.1. 为密钥恢复授权(KRA)添加多个代理批准要求
7.10.14.2. 配置 KRA 加密设置
7.10.15. 设置用户以使用用户界面
第 8 章 为子系统安全数据库使用硬件安全模块
8.1. 使用 HSM 安装证书系统
pkispawn
工具的配置文件中的以下参数:
[DEFAULT] ########################## # Provide HSM parameters # ########################## pki_hsm_enable=True pki_hsm_libfile=hsm_libfile pki_hsm_modulename=hsm_modulename pki_token_name=hsm_token_name pki_token_password=pki_token_password ######################################## # Provide PKI-specific HSM token names # ######################################## pki_audit_signing_token=hsm_token_name pki_ssl_server_token=hsm_token_name pki_subsystem_token=hsm_token_name
8.2. 使用带有子系统的硬件安全模块
pkcs11.txt
数据库中的证书系统支持的 HSM。
8.2.1. 在 HSM 中启用 FIPS 模式
- nCipher HSM
- 在 nCipher HSM 中,只有生成 Security World 时才能启用 FIPS 模式,之后无法更改它。虽然有各种生成 Security World 的方法,但首选的方法是使用 new-world 命令。有关如何生成 FIPS 兼容安全世界的指导,请按照 nCipher HSM 供应商的文档进行操作。
- LunaSA HSM
- 同样,必须在 Luna HSM 上启用 FIPS 模式,因为更改此策略会将 HSM 归类为安全措施。详情请查看 Luna HSM 供应商的文档。
8.2.2. 验证 HSM 上是否启用了 FIPS 模式
8.2.2.1. 验证 nCipher HSM 中是否启用了 FIPS 模式
# /opt/nfast/bin/nfkminfo
StrictFIPS140
列在 state 标记中,则启用 FIPS 模式。在较新的版本中,最好检查新模式行并查找 fips1402level3
。
在所有情况下,nfkminfo
输出中也应该有一个 hkfips
密钥。
8.2.2.2. 验证 Luna SA HSM 上是否启用了 FIPS 模式
- 打开 lunash 管理控制台
- 使用 hsm show 命令,并验证输出中是否包含文本 The HSM in FIPS 140-2 approved operation mode。
lunash:> hsm show ... FIPS 140-2 Operation: ===================== The HSM is in FIPS 140-2 approved operation mode. ...
8.2.3. 为子系统添加或管理 HSM 条目
/var/lib/pki/instance_name/conf/password.conf
文件中:
hardware-HSM_token_name=HSM_token_password
8.2.4. 为 HSM 设置 SELinux
- nCipher nShield Connect XC
- 安装 HSM 并在开始安装证书系统前:
- 重置
/opt/nfast/
目录中文件的上下文:# restorecon -R /opt/nfast/
- 重新启动 nfast 软件。
# /opt/nfast/sbin/init.d-ncipher restart
- Thales Luna HSM
- 在开始安装证书系统前,不需要与 SELinux 相关的操作。
8.2.5. 使用 nCipher nShield Connect XC HSM 安装子系统
- 准备一个覆盖文件,对应于您的特定部署。以下
default_hms.txt
文件是一个此类覆盖文件的示例:注意此文件仅充当 nCipher HSM 覆盖配置文件的示例,可以覆盖大量其他值,包括默认哈希算法。另外,根据 pkispawn 命令行中指定的子系统调用,将只使用 [CA]、[KRA]、[TKS] 或 [TPS] 部分之一。例 8.1. 使用 nCipher HSM 的覆盖文件示例
############################################################################### ############################################################################### ############################################################################### ## ## ## EXAMPLE: Configuration File used to override '/etc/pki/default.cfg' ## ## when using an nCipher Hardware Security Module (HSM): ## ## ## ## ## ## # modutil -dbdir . -list ## ## ## ## Listing of PKCS #11 Modules ## ## ----------------------------------------------------------- ## ## 1. NSS Internal PKCS #11 Module ## ## slots: 2 slots attached ## ## status: loaded ## ## ## ## slot: NSS Internal Cryptographic Services ## ## token: NSS Generic Crypto Services ## ## ## ## slot: NSS User Private Key and Certificate Services ## ## token: NSS Certificate DB ## ## ## ## 2. nfast ## ## library name: /opt/nfast/toolkits/pkcs11/libcknfast.so ## ## slots: 2 slots attached ## ## status: loaded ## ## ## ## slot: <serial_number> Rt1 ## ## token: accelerator ## ## ## ## slot: <serial_number> Rt1 slot 0 ## ## token: <HSM_token_name> ## ## ----------------------------------------------------------- ## ## ## ## ## ## Based on the example above, substitute all password values, ## ## as well as the following values: ## ## ## ## <hsm_libfile>=/opt/nfast/toolkits/pkcs11/libcknfast.so ## ## <hsm_modulename>=nfast ## ## <hsm_token_name>=NHSM-CONN-XC ## ## ## ############################################################################### ############################################################################### ############################################################################### [DEFAULT] ########################## # Provide HSM parameters # ########################## pki_hsm_enable=True pki_hsm_libfile=<hsm_libfile> pki_hsm_modulename=<hsm_modulename> pki_token_name=<hsm_token_name> pki_token_password=<pki_token_password> ######################################## # Provide PKI-specific HSM token names # ######################################## pki_audit_signing_token=<hsm_token_name> pki_ssl_server_token=<hsm_token_name> pki_subsystem_token=<hsm_token_name> ################################## # Provide PKI-specific passwords # ################################## pki_admin_password=<pki_admin_password> pki_client_pkcs12_password=<pki_client_pkcs12_password> pki_ds_password=<pki_ds_password> ##################################### # Provide non-CA-specific passwords # ##################################### pki_client_database_password=<pki_client_database_password> ############################################################### # ONLY required if specifying a non-default PKI instance name # ############################################################### #pki_instance_name=<pki_instance_name> ############################################################## # ONLY required if specifying non-default PKI instance ports # ############################################################## #pki_http_port=<pki_http_port> #pki_https_port=<pki_https_port> ###################################################################### # ONLY required if specifying non-default 389 Directory Server ports # ###################################################################### #pki_ds_ldap_port=<pki_ds_ldap_port> #pki_ds_ldaps_port=<pki_ds_ldaps_port> ###################################################################### # ONLY required if PKI is using a Security Domain on a remote system # ###################################################################### #pki_ca_hostname=<pki_ca_hostname> #pki_issuing_ca_hostname=<pki_issuing_ca_hostname> #pki_issuing_ca_https_port=<pki_issuing_ca_https_port> #pki_security_domain_hostname=<pki_security_domain_hostname> #pki_security_domain_https_port=<pki_security_domain_https_port> ########################################################### # ONLY required for PKI using an existing Security Domain # ########################################################### # NOTE: pki_security_domain_password == pki_admin_password # of CA Security Domain Instance #pki_security_domain_password=<pki_admin_password> [Tomcat] ############################################################## # ONLY required if specifying non-default PKI instance ports # ############################################################## #pki_ajp_port=<pki_ajp_port> #pki_tomcat_server_port=<pki_tomcat_server_port> [CA] ####################################### # Provide CA-specific HSM token names # ####################################### pki_ca_signing_token=<hsm_token_name> pki_ocsp_signing_token=<hsm_token_name> ########################################################################### # ONLY required if 389 Directory Server for CA resides on a remote system # ########################################################################### #pki_ds_hostname=<389 hostname> [KRA] ######################################## # Provide KRA-specific HSM token names # ######################################## pki_storage_token=<hsm_token_name> pki_transport_token=<hsm_token_name> ############################################################################ # ONLY required if 389 Directory Server for KRA resides on a remote system # ############################################################################ #pki_ds_hostname=<389 hostname> [OCSP] ######################################### # Provide OCSP-specific HSM token names # ######################################### pki_ocsp_signing_token=<hsm_token_name> ############################################################################# # ONLY required if 389 Directory Server for OCSP resides on a remote system # ############################################################################# #pki_ds_hostname=<389 hostname> [TKS] ######################################## # Provide TKS-specific HSM token names # ######################################## ############################################################################ # ONLY required if 389 Directory Server for TKS resides on a remote system # ############################################################################ #pki_ds_hostname=<389 hostname> [TPS] ################################### # Provide TPS-specific parameters # ################################### pki_authdb_basedn=<dnsdomainname where hostname.b.c.d is dc=b,dc=c,dc=d> ######################################## # Provide TPS-specific HSM token names # ######################################## ############################################################################ # ONLY required if 389 Directory Server for TPS resides on a remote system # ############################################################################ #pki_ds_hostname=<389 hostname> ########################################################## # ONLY required if TPS requires a CA on a remote machine # ########################################################## #pki_ca_uri=https://<pki_ca_hostname>:<pki_ca_https_port> ####################################### # ONLY required if TPS requires a KRA # ####################################### #pki_enable_server_side_keygen=True ########################################################### # ONLY required if TPS requires a KRA on a remote machine # ########################################################### #pki_kra_uri=https://<pki_kra_hostname>:<pki_kra_https_port> ########################################################### # ONLY required if TPS requires a TKS on a remote machine # ########################################################### #pki_tks_uri=https://<pki_tks_hostname>:<pki_tks_https_port>
- 使用配置文件,如 第 7.7 节 “两步安装” 所述。
# pkispawn -s CA -f ./
default_hsm.txt
-vvv# pkispawn -s KRA -f ./
default_hsm.txt
-vvv# pkispawn -s OCSP -f ./
default_hsm.txt
-vvv# pkispawn -s TKS -f ./
default_hsm.txt
-vvv# pkispawn -s TPS -f ./
default_hsm.txt
-vvv
- 验证 HSM 是否包含以下证书:
$ certutil -L -d /etc/pki/pki-tomcat/alias -h token -f token.pwd Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI token:ca_signing CTu,Cu,Cu token:ca_ocsp_signing u,u,u token:subsystem u,u,u token:ca_audit_signing u,u,Pu token:sslserver/pki.example.com u,u,u
8.2.6. 使用 Thales Luna HSM 安装子系统
例 8.2. LunaSA Override File 标头的示例
############################################################################### ############################################################################### ############################################################################### ## ## ## EXAMPLE: Configuration File used to override '/etc/pki/default.cfg' ## ## when using a LunaSA Hardware Security Module (HSM): ## ## ## ## ## ## # modutil -dbdir . -list ## ## ## ## Listing of PKCS #11 Modules ## ## ----------------------------------------------------------- ## ## 1. NSS Internal PKCS #11 Module ## ## slots: 2 slots attached ## ## status: loaded ## ## ## ## slot: NSS Internal Cryptographic Services ## ## token: NSS Generic Crypto Services ## ## ## ## slot: NSS User Private Key and Certificate Services ## ## token: NSS Certificate DB ## ## ## ## 2. lunasa ## ## library name: /usr/safenet/lunaclient/lib/libCryptoki2_64.so ## ## slots: 4 slots attached ## ## status: loaded ## ## ## ## slot: LunaNet Slot ## ## token: dev-intca ## ## ## ## slot: Luna UHD Slot ## ## token: ## ## ## ## slot: Luna UHD Slot ## ## token: ## ## ## ## slot: Luna UHD Slot ## ## token: ## ## ----------------------------------------------------------- ## ## ## ## ## ## Based on the example above, substitute all password values, ## ## as well as the following values: ## ## ## ## <hsm_libfile>=/usr/safenet/lunaclient/lib/libCryptoki2_64.so ## ## <hsm_modulename>=lunasa ## ## <hsm_token_name>=dev-intca ## ## ## ############################################################################### ############################################################################### ###############################################################################
8.3. 在硬件安全模块中备份密钥
.p12
文件。如果要备份这样的实例,请联络您的 HSM 厂商以获得支持。
8.4. 使用 HSM 安装克隆子系统
pki_backup_keys
设置为 True,以及为 pki_backup_password
选项定义的值,或使用 PKCS12Export 工具导出密钥。
pkispawn
工具前,您必须提供对 master 子系统的密钥的访问。
[CA] pki_clone=True pki_clone_pkcs12_password=Secret123 pki_clone_pkcs12_path=<path_to_pkcs12_file> pki_clone_replicate_schema=True pki_clone_uri=https://<master_ca_host_name>:<master_ca_https_port>
[CA] pki_clone=True pki_clone_replicate_schema=True pki_clone_uri=https://<master_ca_host_name>:<master_ca_https_port>
8.5. 查看令牌
- 更改到实例
别名
目录。例如:# cd /var/lib/pki/pki-tomcat/alias
- 使用 modutil 工具显示已安装 PKCS facilities 模块以及相应令牌的信息。
# modutil -dbdir . -nocertdb -list
8.6. 检测令牌
的别名
目录。这是在安装证书系统软件包后可用的证书系统工具。
# TokenInfo /var/lib/pki/pki-tomcat/alias
第 9 章 使用 ECC 系统证书安装实例
enforcing
模式改为 permissive
模式,以允许该模块正常工作。否则,任何需要 ECC 模块的子系统操作都将失败。
9.1. 加载第三方 ECC 模块
9.2. 使用带有 HSM 的 ECC
- 设置 HSM 每个制造商的说明。如果多个主机共享 HSM,请确保它们都可以根据需要访问同一分区,以及站点策略是否允许它。
- 在
pkispawn
工具配置文件中定义所需的参数,并运行pkispawn
。例如,要将证书系统配置为创建 ECC CA,假设配置文件为ecc.inf
:- 编辑
ecc.inf
以指定适当的设置。有关配置文件的示例,请查看 pkispawn(8) man page。 - 针对
ecc.inf
运行pkispawn
:$ script -c 'pkispawn -s CA -f /root/pki/ecc.inf -vvv'
第 10 章 克隆子系统
10.1. 从软件数据库备份子系统密钥
PKCS12Export
工具从子系统实例的内部软件数据库中提取密钥。例如:
PKCS12Export -debug -d /var/lib/pki/instance_name/alias -w p12pwd.txt -p internal.txt -o master.p12
10.2. 克隆 CA
- 配置主 CA 并备份密钥。
- 在 master CA 的
CS.cfg
文件中,通过添加ca.listenToCloneModifications
参数来启用 master CA 来监控复制数据库更改:ca.listenToCloneModifications=true
- 创建 clone 子系统实例。有关克隆 CA 子系统时
pkispawn
所需的配置文件示例,请参阅在
pkispawn(8) man page的同一主机上安装 CA 克隆
和安装 CA 克隆。 - 重启克隆使用的 Directory 服务器实例。
# systemctl restart pki-tomcatd@kra-clone-ds-instance.service
注意重启 Directory 服务器会重新载入更新的模式,这是正确的性能所必需的。 - 重启克隆实例。
# pki-server restart instance_name
- 从克隆的 CA 请求证书。
- 批准请求。
- 将证书下载到浏览器。
- 吊销证书。
- 检查 master CA 的 CRL 是否有撤销的证书。在 master Certificate Manager 的代理服务页面中,单击 Update Certificate Revocation List。在列表中找到 CRL。CRL 应该显示克隆的证书管理器撤销的证书。如果没有列出该证书,请检查日志来解决这个问题。
10.3. 在关闭后更新 CA-KRA Connector 信息
- 在 master 克隆机器上,打开 master CA 的
CS.cfg
文件,并为新的KRA 连接器复制所有 ca.connector
.KRA prerequisites 行。[root@master ~]# vim /var/lib/pki/instance_name/ca/conf/CS.cfg
- 停止克隆 CA 实例。例如:
[root@clone-ca ~]# pki-server stop instance_name
- 打开克隆 CA 的
CS.cfg
文件。[root@clone-ca ~]# vim /var/lib/pki/instance_name/ca/conf/CS.cfg
- 复制新 KRA 实例或克隆的连接器信息。
ca.connector.KRA.enable=true ca.connector.KRA.host=server-kra.example.com ca.connector.KRA.local=false ca.connector.KRA.nickName=subsystemCert cert-pki-ca ca.connector.KRA.port=10444 ca.connector.KRA.timeout=30 ca.connector.KRA.transportCert=MIIDbD...ZR0Y2zA== ca.connector.KRA.uri=/kra/agent/kra/connector
- 启动克隆 CA。
[root@clone-ca ~]# pki-server start instance_name
10.4. 克隆 OCSP 子系统
- 配置主 OCSP 并备份密钥。
- 在 master OCSP 的
CS.cfg
文件中,将 OCSP.Responder.store.defStore.refreshInSec 参数设置为 21600 以外的任何非零数;21600 是克隆的设置。# vim /etc/instance_name/CS.cfg OCSP.Responder.store.defStore.refreshInSec=15000
- 使用
pkispawn
实用程序创建克隆子系统实例。有关克隆 OCSP 子系统时pkispawn
所需的配置文件示例,请查看 pkispawn(8) man page。 - 重启克隆使用的 Directory 服务器实例。
# systemctl dirsrv@instance_name.service
注意重启 Directory 服务器会重新载入更新的模式,这是正确的性能所必需的。 - 重启克隆实例。
# pki-server restart instance_name
- 在 master CA 中设置 OCSP 发布,以便 CRL 发布到 master OCSP。
- 成功发布 CRL 后,检查代理页面中的主和克隆的 OCSP 列表证书颁发机构 链接。列表应该相同。
- 使用 OCSPClient 工具向 master 和克隆的在线证书状态管理器提交 OCSP 请求。该工具应该从两个管理器接收相同的 OCSP 响应。
10.5. 克隆 KRA 子系统
- 配置主子系统,再备份密钥。
- 使用
pkispawn
工具创建克隆子系统实例:$
pkispawn -s <subsystem> -f myconfig.txt
在克隆 KRA 子系统时,pkispawn
所需的配置文件示例:[DEFAULT] pki_admin_password=<Secret.123> pki_client_database_password=<Secret.123> pki_client_pkcs12_password=<Secret.123> pki_ds_password=<Secret.123> pki_security_domain_password=<Secret.123> pki_security_domain_hostname=<master_ca_hostname> pki_security_domain_https_port=<master_ca_https_port> pki_security_domain_user=caadmin [KRA] pki_clone=True pki_clone_pkcs12_password=<Secret.123> pki_clone_pkcs12_path=<path_to_pkcs12_file> pki_clone_replicate_schema=True pki_clone_uri=https://<master_subsystem_host:master_subsystem_https_port> pki_issuing_ca=https://<ca_hostname:ca_https_port>
- 重启克隆使用的 Directory 服务器实例。
#
systemctl dirsrv@instance_name.service
注意重启 Directory 服务器会重新载入更新的模式,这是正确的性能所必需的。 - 重启克隆实例。
# pki-server restart instance_name
- 进入 KRA 代理的页面。
- 单击 List Requests。
- 选择 Show all requests for the request type and status。
- 单击 Submit。
- 比较克隆的 KRA 和主 KRA 的结果。结果相同。
10.6. 克隆 TKS 子系统
- 配置主子系统,再备份密钥。
- 使用
pkispawn
实用程序创建克隆子系统实例。$
pkispawn -s <subsystem> -f myconfig.txt
克隆 TKS 子系统时pkispawn
所需的配置文件示例:[DEFAULT] pki_admin_password=<Secret.123> pki_client_database_password=<Secret.123> pki_client_pkcs12_password=<Secret.123> pki_ds_password=<Secret.123> pki_security_domain_password=<Secret.123> pki_security_domain_hostname=<master_ca_hostname> pki_security_domain_https_port=<master_ca_https_port> pki_security_domain_user=caadmin [TKS] pki_clone=True pki_clone_pkcs12_password=<Secret.123> pki_clone_pkcs12_path=<path_to_pkcs12_file> pki_clone_replicate_schema=True pki_clone_uri=https://<master_subsystem_host:master_subsystem_https_port> pki_issuing_ca=https://<ca_hostname:ca_https_port>
- 重启克隆实例。
# pki-server restart instance_name
10.7. 转换 Master 和 Clones
10.7.1. 转换 CA 克隆和 Master
- 如果 master CA 仍在运行,则停止它。
- 打开现有的 master CA 配置目录:
# cd /var/lib/pki/instance_name/ca/conf
- 编辑 master 的
CS.cfg
文件,并更改 CRL 和维护线程设置,使其设置为克隆:- 禁用对数据库维护线程的控制:
ca.certStatusUpdateInterval=0
- 禁用监控数据库复制更改:
ca.listenToCloneModifications=false
- 禁用 CRL 缓存维护:
ca.crl.IssuingPointId.enableCRLCache=false
- 禁用 CRL 生成:
ca.crl.IssuingPointId.enableCRLUpdates=false
- 将 CA 设置为将 CRL 请求重定向到新 master:
master.ca.agent.host=new_master_hostname master.ca.agent.port=new_master_port
- 停止克隆的 CA 服务器。
# pki-server stop instance_name
- 打开克隆的 CA 的配置目录。
# cd /etc/instance_name
- 编辑
CS.cfg
文件,将克隆配置为新 master。- 删除以
ca.crl.
前缀开头的每行。 - 将前 master CA
CS.cfg
文件中的ca.crl.
前缀开头的每行复制到克隆的 CA 的CS.cfg
文件中。 - 启用控制数据库维护线程;主 CA 的默认值为
600
。ca.certStatusUpdateInterval=600
- 启用监控数据库复制:
ca.listenToCloneModifications=true
- 启用 CRL 缓存维护:
ca.crl.IssuingPointId.enableCRLCache=true
- 启用 CRL 生成:
ca.crl.IssuingPointId.enableCRLUpdates=true
- 禁用 CRL 生成请求的重定向设置:
master.ca.agent.host=hostname master.ca.agent.port=port number
- 启动新的 master CA 服务器。
# pki-server start instance_name
10.7.2. 转换 OCSP 克隆
- 如果仍在运行,则停止 OCSP master。
- 打开现有的 master OCSP 配置目录。
# cd /etc/instance_name
- 编辑
CS.cfg
,并将 OCSP.Responder.store.defStore.refreshInSec 参数重置为 21600 :OCSP.Responder.store.defStore.refreshInSec=21600
- 停止在线克隆的 OCSP 服务器。
# pki-server stop instance_name
- 打开克隆的 OCSP 响应器配置目录。
# cd /etc/instance_name
- 打开
CS.cfg
文件,并删除 OCSP.Responder.store.defStore.refreshInSec 参数,或者将其值改为任何非零数字:OCSP.Responder.store.defStore.refreshInSec=15000
- 启动新的 master OCSP 响应程序服务器。
# pki-server start instance_name
10.8. 克隆具有 Been Re-Keyed 的 CA
CS.cfg
配置文件中的 CA 私钥 ID - 这些密钥 ID 在证书数据库密钥更改时不会更新。
CertUtil::createSelfSignedCert() - CA private key is null!
- 在
CS.cfg
文件中找到所有私钥 ID。#
grep privkey.id /var/lib/pki/instance_name/ca/conf/CS.cfg
cloning.signing.privkey.id =-4d798441aa7230910d4e1c39fa132ea228d5d1bc cloning.ocsp_signing.privkey.id =-3e23e743e0ddd88f2a7c6f69fa9f9bcebef1a60 cloning.subsystem.privkey.id =-c3c1b3b4e8f5dd6d2bdefd07581c0b15529536 cloning.sslserver.privkey.id =3023d30245804a4fab42be209ebb0dc683423a8f cloning.audit_signing.privkey.id=2fe35d9d46b373efabe9ef01b8436667a70df096 - 打印存储在 NSS 数据库中的所有当前私钥 ID,并将其与存储在
CS.cfg
文件中的私钥 ID 进行比较:# certutil -K -d alias certutil: Checking token "NSS Certificate DB" in slot "NSS User Private Key and Certificate Services" Enter Password or Pin for "NSS Certificate DB": < 0> rsa a7b0944b7b8397729a4c8c9af3a9c2b96f49c6f3 caSigningCert cert-ca4-test-master < 1> rsa 6006094af3e5d02aaa91426594ca66cb53e73ac0 ocspSigningCert cert-ca4-test-master < 2> rsa d684da39bf4f2789a3fc9d42204596f4578ad2d9 subsystemCert cert-ca4-test-master < 3> rsa a8edd7c2b5c94f13144cacd99624578ae30b7e43 sslserverCert cert-ca4-test1 < 4> rsa 2fe35d9d46b373efabe9ef01b8436667a70df096 auditSigningCert cert-ca4-test1
在本例中,只有审计签名密钥是相同的,其他密钥已更改。 - 取步骤 2 返回的键,并将它们从未签名的值(即 certutil 返回的内容)转换为签名 Java BigIntegers (这是密钥如何存储在证书系统数据库中)。这可以通过计算器或使用 例 10.1 “certutil 到 BigInteger Conversion Program” 中的脚本来完成。
- 将新键值复制到
CS.cfg
文件中。#
vim /var/lib/pki/instance_name/ca/conf/CS.cfg
cloning.signing.privkey.id =-584f6bb4847c688d65b373650c563d4690b6390d cloning.ocsp_signing.privkey.id =6006094af3e5d02aaa91426594ca66cb53e73ac0 cloning.subsystem.privkey.id =-297b25c640b0d8765c0362bddfba690ba8752d27 cloning.sslserver.privkey.id =-5712283d4a36b0ecebb3532669dba8751cf481bd cloning.audit_signing.privkey.id=2fe35d9d46b373efabe9ef01b8436667a70df096 - 克隆 CA,如 第 10.2 节 “克隆 CA” 所述。
例 10.1. certutil 到 BigInteger Conversion Program
.java
文件,如 Test.java
。
import java.math.BigInteger; public class Test { public static byte[] hexStringToByteArray(String s) { int len = s.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16)); } return data; } public static void main(String[] args) { byte[] bytes = hexStringToByteArray(args[0]); BigInteger big = new BigInteger (bytes); System.out.println("Result is ==> " + big.toString(16)); } }
# javac Test.java
第 11 章 设置 PKI ACME Responder
pki-tomcat
)。
11.1. 安装 PKI ACME Responder
- 首先下载并安装
pki-acme
RPM 软件包:$ dnf install pki-acme
- 使用以下命令,在 PKI 服务器实例中创建 ACME 响应器:
$ pki-server acme-create
/etc/pki/pki-tomcat/acme
目录中创建初始配置文件。
pki-server-acme
manpage。
11.2. 配置 ACME 数据库
/etc/pki/pki-tomcat/acme/database.conf
。
- 您可以使用
pki-server acme-database-mod
命令通过命令行配置数据库。在没有参数的情况下调用此命令会启动一个互动模式,例如:$ pki-server acme-database-mod The current value is displayed in the square brackets. To keep the current value, simply press Enter. To change the current value, enter the new value. To remove the current value, enter a blank space. Enter the type of the database. Available types: ds, in-memory, ldap, openldap, postgresql. Database Type: ds Enter the location of the LDAP server (e.g. ldap://localhost.localdomain:389). Server URL [ldap://localhost.localdomain:389]: Enter the authentication type. Available types: BasicAuth, SslClientAuth. Authentication Type [BasicAuth]: Enter the bind DN. Bind DN [cn=Directory Manager]: Enter the bind password. Bind Password [********]: Enter the base DN for the ACME subtree. Base DN [dc=acme,dc=pki,dc=example,dc=com]:
- 使用
--type
参数调用命令会根据指定类型创建新配置。 - 使用其他参数调用 命令会更新指定的参数。
11.2.1. 配置 DS 数据库
/usr/share/pki/acme/database/ds/database.conf
。
- 首先,使用以下命令导入
/usr/share/pki/acme/database/ds/schema.ldif
文件来添加 ACME DS 模式:$ ldapmodify -h $HOSTNAME -x -D "cn=Directory Manager" -w Secret.123 \ -f /usr/share/pki/acme/database/ds/schema.ldif
- 接下来,准备 LDIF 文件以创建 ACME 子树。示例 LDIF 文件位于
usr/share/pki/acme/database/ds/create.ldif
。本例使用dc=acme,dc=pki,dc=example,dc=com
作为基本 DN。 - 使用
ldapadd
命令导入 LDIF 文件:$ ldapadd -h $HOSTNAME -x -D "cn=Directory Manager" -w Secret.123 \ -f /usr/share/pki/acme/database/ds/create.ldif
- 将示例数据库配置文件从
/usr/share/pki/acme/database/ds/database.conf
复制到/etc/pki/pki-tomcat/acme
目录中,或者执行以下命令来自定义一些参数:$ pki-server acme-database-mod --type ds \ -DbindPassword=Secret.123
- 根据需要自定义配置:
- 在独立 ACME 部署中,
database.conf
应该类似如下:class=org.example.acme.database.DSDatabase url=ldap://<hostname>:389 authType=BasicAuth bindDN=cn=Directory Manager bindPassword=Secret.123 baseDN=dc=acme,dc=pki,dc=example,dc=com
- 在共享的 CA 和 ACME 部署中,database.conf 应该类似如下:
class=org.example.acme.database.DSDatabase configFile=conf/ca/CS.cfg baseDN=dc=acme,dc=pki,dc=example,dc=com
monitor.enabled=true
11.3. 配置 ACME 颁发者
/etc/pki/pki-tomcat/acme/issuer.conf
。
pki-server acme-issuer-mod
命令通过命令行配置签发者。
- 在没有参数的情况下调用此命令会启动一个互动模式,例如:
$ pki-server acme-issuer-mod The current value is displayed in the square brackets. To keep the current value, simply press Enter. To change the current value, enter the new value. To remove the current value, enter a blank space. Enter the type of the certificate issuer. Available types: nss, pki. Issuer Type: pki Enter the location of the PKI server (e.g. https://localhost.localdomain:8443). Server URL [https://localhost.localdomain:8443]: Enter the certificate nickname for client authentication. This might be the CA agent certificate. Enter blank to use basic authentication. Client Certificate: Enter the username of the CA agent for basic authentication. Enter blank if a CA agent certificate is used for client authentication. Agent Username [caadmin]: Enter the CA agent password for basic authentication. Enter blank if the password is already stored in a separate property file or if a CA agent certificate is used for client authentication. Agent Password [********]: Enter the certificate profile for issuing ACME certificates (e.g. acmeServerCert). Certificate Profile [acmeServerCert]:
- 使用
--type
参数调用命令会根据指定类型创建新配置。 - 使用其他参数调用 命令会更新指定的参数。
11.3.1. 配置 PKI Issuer
/usr/share/pki/acme/issuer/pki/issuer.conf
。
- 要配置 PKI 签发者,请将这个示例
issuer.conf
复制到/etc/pki/pki-tomcat/acme
目录中,或者执行以下命令来自定义一些参数:$ pki-server acme-issuer-mod --type pki \ -Dusername=caadmin \ -Dpassword=Secret.123
根据需要自定义配置。issuer.conf
文件应该类似如下:class=org.example.acme.issuer.PKIIssuer url=https://localhost.localdomain:8443 profile=acmeServerCert username=caadmin password=Secret.123
- url 参数指定 PKI 签发者位置。
- profile 参数指定要使用的证书配置文件。
- 要使用客户端证书身份验证,请在 nickname 参数中指定客户端证书 别名。
- 要使用基本身份验证,请在 username 参数中指定用户名,并在 password 参数中指定密码。
11.4. 配置 ACME Realm
/etc/pki/pki-tomcat/acme/realm.conf
。
pki-server acme-realm-mod
命令通过命令行配置 ACME Realm 域。
- 在没有参数的情况下调用此命令会启动一个互动模式,例如:
$ pki-server acme-realm-mod The current value is displayed in the square brackets. To keep the current value, simply press Enter. To change the current value, enter the new value. To remove the current value, enter a blank space. Enter the type of the realm. Available types: ds. Database Type: ds Enter the location of the LDAP server (e.g. ldap://localhost.localdomain:389). Server URL [ldap://localhost.localdomain:389]: Enter the authentication type. Available types: BasicAuth, SslClientAuth. Authentication Type [BasicAuth]: Enter the bind DN. Bind DN [cn=Directory Manager]: Enter the bind password. Bind Password [********]: Enter the base DN for the ACME users subtree. Users DN [ou=people,dc=acme,dc=pki,dc=example,dc=com]: Enter the base DN for the ACME groups subtree. Groups DN [ou=groups,dc=acme,dc=pki,dc=example,dc=com]:
- 使用
--type
参数调用命令会根据指定类型创建新配置。 - 使用其他参数调用 命令会更新指定的参数。
11.4.1. 配置 DS Realm
/usr/share/pki/acme/realm/ds/realm.conf
。
- 为 DS 中的 ACME 用户和组准备子树。示例 LDIF 文件位于
/usr/share/pki/acme/realm/ds/create.ldif]
。本例使用dc=acme,dc=pki,dc=example,dc=com
作为基本 DN。 - 使用
ldapadd
命令导入 LDIF 文件:$ ldapadd -h $HOSTNAME -x -D "cn=Directory Manager" -w Secret.123 \ -f /usr/share/pki/acme/realm/ds/create.ldif
- 将示例配置文件从
/usr/share/pki/acme/realm/ds/realm.conf
复制到/etc/pki/pki-tomcat/acme
目录中,或者运行以下命令来自定义一些参数:$ pki-server acme-realm-mod --type ds \ -DbindPassword=Secret.123
- 根据需要自定义配置:
- 在独立 ACME 部署中,
realm.conf
文件应该类似如下:class=org.example.acme.realm.DSRealm url=ldap://<hostname>:389 authType=BasicAuth bindDN=cn=Directory Manager bindPassword=Secret.123 usersDN=ou=people,dc=acme,dc=pki,dc=example,dc=com groupsDN=ou=groups,dc=acme,dc=pki,dc=example,dc=com
- 在共享的 CA 和 ACME 部署中,
realm.conf
文件应该类似如下:class=org.example.acme.realm.DSRealm configFile=conf/ca/CS.cfg usersDN=ou=people,dc=ca,dc=pki,dc=example,dc=com groupsDN=ou=groups,dc=ca,dc=pki,dc=example,dc=com
11.5. 部署 ACME Responder
- 配置 ACME 响应器后,使用以下命令部署它:
$ pki-server acme-deploy
这会在/etc/pki/pki-tomcat/Catalina/localhost/acme.xml
中创建一个部署描述符。PKI 服务器在几秒钟后自动启动 ACME 响应器,您不需要重新启动服务器。 - 要验证 ACME 响应器是否正在运行,请使用以下命令:
$ curl -s -k https://$HOSTNAME:8443/acme/directory | python -m json.tool { "meta": { "caaIdentities": [ "example.com" ], "externalAccountRequired": false, "termsOfService": "https://example.com/acme/tos.pdf", "website": "https://www.example.com" }, "newAccount": "https://<hostname>:8443/acme/new-account", "newNonce": "https://<hostname>:8443/acme/new-nonce", "newOrder": "https://<hostname>:8443/acme/new-order", "revokeCert": "https://<hostname>:8443/acme/revoke-cert" }
pki-server-acme
manpage。
第 12 章 其他安装选项
12.1. 轻量级子 CA
12.1.1. 设置轻量级子 CA
12.1.2. 禁用创建轻量级子 CA
# ldapmodify -D "cn=Directory Manager" -W -x -h server.example.com dn: cn=aclResources,o=instance_name changetype: modify delete: resourceACLS resourceACLS: certServer.ca.authorities:create,modify:allow (create,modify) group="Administrators":Administrators may create and modify lightweight authorities delete: resourceACLS resourceACLS: certServer.ca.authorities:delete:allow (delete) group="Administrators":Administrators may delete lightweight authorities
12.1.3. 重新启用轻量级子 CA 的创建
# ldapmodify -D "cn=Directory Manager" -W -x -h server.example.com dn: cn=aclResources,o=instance_name changetype: modify add: resourceACLS resourceACLS: certServer.ca.authorities:create,modify:allow (create,modify) group="Administrators":Administrators may create and modify lightweight authorities resourceACLS: certServer.ca.authorities:delete:allow (delete) group="Administrators":Administrators may delete lightweight authorities
12.2. 为子系统启用 IPv6
op=var_set name=ca_host value=IPv6 address
- 安装 Red Hat Certificate System 软件包。
- 在
/etc/hosts
文件中设置 IPv4 和 IPv6 地址。例如:vim /etc/hosts 192.0.0.0 server.example.com IPv4 address 3ffe:1234:2222:2000:202:55ff:fe67:f527 server6.example.com IPv6 address
- 然后,导出环境变量以使用服务器的 IPv6 地址。例如:
export PKI_HOSTNAME=server6.example.com
- 运行 pkispawn 以创建新实例。
CS.cfg
文件中的服务器主机名的值将设置为 IPv6 地址。
12.3. 启用基于 LDAP 的注册配置文件
[CA]
部分中设置 pki_profile_in_ldap=True
选项。
/var/lib/pki/instance_name/ca/profiles/ca/
中,但将被忽略。
CS.cfg
中更改以下内容:
subsystem.1.class=com.netscape.cmscore.profile.LDAPProfileSubsystem
12.4. 自定义 TLS Ciphers
第 13 章 安装和克隆故障排除
13.1. 安装
日志
:
journalctl -u pki-tomcatd@instance_name.service
/var/log/pki/instance_name/subsystem_type/debug 的调试日志文件
。
catalina.out
文件中的 Java 调用类错误:
Oct 29, 2010 4:15:44 PM org.apache.coyote.http11.Http11Protocol init INFO: Initializing Coyote HTTP/1.1 on http-9080 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:615) at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:243) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:408) Caused by: java.lang.UnsatisfiedLinkError: jss4
libnss3.so
。使用这个命令进行检查:
ldd /usr/lib64/libjss4.so
libnss3.so
,请在 /etc/sysconfig/instance_name配置文件中设置
正确的 classpath。然后,使用 systemctl restart pki-tomcatd@instance_name.service 命令重启 CA。
pkispawn
交互式安装模式来执行此操作。
/etc/pki/default.cfg
文件的 delta 链接的配置文件。请参阅 pkispawn(8) 和 pki_default.cfg(5) man page。
pkispawn
设置它的方法。
pkispawn
执行此操作。但是,可以使用以下方法编辑 pkispawn
使用的证书配置文件来生成 root CA 证书。
pkispawn
前 执行此操作来创建新 CA 实例。
- 备份
pkispawn
使用的原始 CA 证书配置文件。cp -p /usr/share/pki/ca/conf/caCert.profile /usr/share/pki/ca/conf/caCert.profile.orig
- 打开配置向导使用的 CA 证书配置文件。
vim /usr/share/pki/ca/conf/caCert.profile
- 将 Validity Default 中的有效期重置为您想要的任何有效期。例如,将周期改为两年:
2.default.class=com.netscape.cms.profile.def.ValidityDefault 2.default.name=Validity Default 2.default.params.range=7200
- 通过在配置集中创建新的默认条目并将其添加到列表中来添加任何扩展。例如,要添加 Basic Constraint Extension,请添加默认值(在本例中是 default #9)):
9.default.class=com.netscape.cms.profile.def.BasicConstraintsExtDefault 9.default.name=Basic Constraint Extension Constraint 9.default.params.basicConstraintsCritical=true 9.default.params.basicConstraintsIsCA=true 9.default.params.basicConstraintsPathLen=2
然后,将默认数量添加到默认值列表中,以使用新默认值:list=2,4,5,6,7,8,
9
- 设置新配置集后,请运行
pkispawn
来创建新的 CA 实例,再通过配置向导。
系统
和 调试
实例的日志文件,以查看发生的错误。
这列出了几个常见错误,但有很多其他可能。
错误 11:LDAP 数据库没有运行。
的日志文件中
明显明显:
java.io.IOException: CS server is not ready to serve. com.netscape.cms.servlet.base.CMSServlet.service(CMSServlet.java:409) javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
5558.main - [29/Oct/2010:11:13:40 PDT] [8] [3] In Ldap (bound) connection pool to host ca1 port 389, Cannot connect to LDAP server. Error: netscape.ldap.LDAPException: failed to connect to server ldap://ca1.example.com:389 (91)
调试日志
一样:
[29/Oct/2010:11:39:10][main]: CMS:Caught EBaseException Internal Database Error encountered: Could not connect to LDAP server host ca1 port 389 Error netscape.ldap.LDAPException: failed to connect to server ldap://ca1:389 (91) at com.netscape.cmscore.dbs.DBSubsystem.init(DBSubsystem.java:262)
错误 2: VPN 阻止访问。
May 26, 2010 7:09:48 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet services threw exception java.io.IOException: CS server is not ready to serve. at com.netscape.cms.servlet.base.CMSServlet.service(CMSServlet.java:441) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:542) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685) at java.lang.Thread.run(Thread.java:636)
13.2. Java 控制台
pkiconsole
已被弃用。
server.xml
中存在错误的配置),或者提供了错误的端口来访问管理界面。
NSS Cipher Supported '0xff04' java.io.IOException: SocketException cannot read on socket at org.mozilla.jss.ssl.SSLSocket.read(SSLSocket.java:1006) at org.mozilla.jss.ssl.SSLInputStream.read(SSLInputStream.java:70) at com.netscape.admin.certsrv.misc.HttpInputStream.fill(HttpInputStream.java:303) at com.netscape.admin.certsrv.misc.HttpInputStream.readLine(HttpInputStream.java:224) at com.netscape.admin.certsrv.connection.JSSConnection.readHeader(JSSConnection.java:439) at com.netscape.admin.certsrv.connection.JSSConnection.initReadResponse(JSSConnection.java:430) at com.netscape.admin.certsrv.connection.JSSConnection.sendRequest(JSSConnection.java:344) at com.netscape.admin.certsrv.connection.AdminConnection.processRequest(AdminConnection.java:714) at com.netscape.admin.certsrv.connection.AdminConnection.sendRequest(AdminConnection.java:623) at com.netscape.admin.certsrv.connection.AdminConnection.sendRequest(AdminConnection.java:590) at com.netscape.admin.certsrv.connection.AdminConnection.authType(AdminConnection.java:323) at com.netscape.admin.certsrv.CMSServerInfo.getAuthType(CMSServerInfo.java:113) at com.netscape.admin.certsrv.CMSAdmin.run(CMSAdmin.java:499) at com.netscape.admin.certsrv.CMSAdmin.run(CMSAdmin.java:548) at com.netscape.admin.certsrv.Console.main(Console.java:1655)
/usr/bin/pkiconsole
文件,并添加以下行:
============================================ ${JAVA} ${JAVA_OPTIONS} -cp ${CP} -Djava.util.prefs.systemRoot=/tmp/.java -Djava.util.prefs.userRoot=/tmp/java com.netscape.admin.certsrv.Console -s instanceID -D 9:all -a $1 ---------- note: "-D 9:all" is for verbose output on the console. ============================================
部分 III. 配置证书系统
第 14 章 证书系统配置文件
CS.cfg
文件。本章论述了编辑 CS.cfg
文件的基本信息。本章还介绍了子系统使用的一些其他有用配置文件,如密码和 Web 服务文件。
14.1. 证书系统子系统的文件和目录位置
14.1.1. 实例特定信息
表 14.1. 证书服务器端口分配(默认)
端口类型 | 端口号 | 备注 |
---|---|---|
安全端口 | 8443 | 用于通过 HTTPS 通过最终用户、代理和管理员访问 PKI 服务的主要端口。 |
不安全的端口 | 8080 | 用于通过 HTTP 对一些端点功能进行非安全访问服务器。用于提供已签名的 CRL,因此不需要加密。 |
AJP 端口 | 8009 | 用于通过 AJP 连接从前端 Apache 代理服务器访问服务器。重定向到 HTTPS 端口。 |
Tomcat 端口 | 8005 | 由 Web 服务器使用。 |
14.1.2. CA 子系统信息
表 14.2. 默认实例的 CA 子系统信息(pki-tomcat)
设置 | 值 |
---|---|
主目录 | /var/lib/pki/pki-tomcat/ca/ |
配置目录 | /var/lib/pki/pki-tomcat/ca/conf/[a] |
配置文件 | /var/lib/pki/pki-tomcat/ca/conf/CS.cfg |
子系统证书 | CA 签名证书 |
OCSP 签名证书(用于 CA 的内部 OCSP 服务) | |
TLS 服务器证书 | |
审计日志签名证书 | |
子系统证书[b] | |
安全数据库 | /var/lib/pki/pki-tomcat/alias/[c] |
日志文件 | /var/log/pki/pki-tomcat/ca/logs/[d] |
安装日志 | /var/log/pki/pki-ca-spawn.date.log |
卸载日志 | /var/log/pki/pki-ca-destroy.date.log |
审计日志 | /var/log/pki/pki-tomcat/ca/signedAudit/ |
配置集文件 | /var/lib/pki/pki-tomcat/ca/profiles/ca/ |
电子邮件通知模板 | /var/lib/pki/pki-tomcat/ca/emails/ |
Web 服务文件 | 代理服务: /var/lib/pki/pki-tomcat/ca/webapps/ca/agent/ |
管理服务: /var/lib/pki/pki-tomcat/ca/webapps/ca/admin/ | |
最终用户服务: /var/lib/pki/pki-tomcat/ca/webapps/ca/ee/ | |
[a]
别名化为 /etc/pki/pki-tomcat/ca/
[b]
子系统证书始终由安全域发布,以便需要客户端身份验证的域级别操作基于此子系统证书。
[c]
请注意,所有子系统证书都存储在实例安全数据库中
[d]
别名化为 /var/lib/pki/pki-tomcat/ca
|
14.1.3. KRA 子系统信息
表 14.3. 默认实例的 KRA 子系统信息(pki-tomcat)
设置 | 值 |
---|---|
主目录 | /var/lib/pki/pki-tomcat/kra/ |
配置目录 | /var/lib/pki/pki-tomcat/kra/conf/[a] |
配置文件 | /var/lib/pki/pki-tomcat/kra/conf/CS.cfg |
子系统证书 | 传输证书 |
存储证书 | |
TLS 服务器证书 | |
审计日志签名证书 | |
子系统证书[b] | |
安全数据库 | /var/lib/pki/pki-tomcat/alias/[c] |
日志文件 | /var/lib/pki/pki-tomcat/kra/logs/ |
安装日志 | /var/log/pki/pki-kra-spawn-date.log |
卸载日志 | /var/log/pki/pki-kra-destroy-date.log |
审计日志 | /var/log/pki/pki-tomcat/kra/signedAudit/ |
Web 服务文件 | 代理服务: /var/lib/pki/pki-tomcat/kra/webapps/kra/agent/ |
管理服务: /var/lib/pki/pki-tomcat/kra/webapps/kra/admin/ | |
[a]
链接到 /etc/pki/pki-tomcat/kra/
[b]
子系统证书始终由安全域发布,以便需要客户端身份验证的域级别操作基于此子系统证书。
[c]
请注意,所有子系统证书都存储在实例安全数据库中
|
14.1.4. OCSP 子系统信息
表 14.4. 默认实例的 OCSP 子系统信息(pki-tomcat)
设置 | 值 |
---|---|
主目录 | /var/lib/pki/pki-tomcat/ocsp/ |
配置目录 | /var/lib/pki/pki-tomcat/ocsp/conf/[a] |
配置文件 | /var/lib/pki/pki-tomcat/ocsp/conf/CS.cfg |
子系统证书 | 传输证书 |
存储证书 | |
TLS 服务器证书 | |
审计日志签名证书 | |
子系统证书[b] | |
安全数据库 | /var/lib/pki/pki-tomcat/alias/[c] |
日志文件 | /var/lib/pki/pki-tomcat/ocsp/logs/ |
安装日志 | /var/log/pki/pki-ocsp-spawn-date.log |
卸载日志 | /var/log/pki/pki-ocsp-destroy-date.log |
审计日志 | /var/log/pki/pki-tomcat/ocsp/signedAudit/ |
Web 服务文件 | 代理服务: /var/lib/pki/pki-tomcat/ocsp/webapps/ocsp/agent/ |
管理服务: /var/lib/pki/pki-tomcat/ocsp/webapps/ocsp/admin/ | |
[a]
链接到 /etc/pki/pki-tomcat/ocsp/
[b]
子系统证书始终由安全域发布,以便需要客户端身份验证的域级别操作基于此子系统证书。
[c]
请注意,所有子系统证书都存储在实例安全数据库中
|
14.1.5. TKS 子系统信息
表 14.5. 每次通过初始安装创建子系统时,或使用(pki-tomcat)创建其他实例。
设置 | 值 |
---|---|
主目录 | /var/lib/pki/pki-tomcat/tks/ |
配置目录 | /var/lib/pki/pki-tomcat/tks/conf/[a] |
配置文件 | /var/lib/pki/pki-tomcat/tks/conf/CS.cfg |
子系统证书 | 传输证书 |
存储证书 | |
TLS 服务器证书 | |
审计日志签名证书 | |
子系统证书[b] | |
安全数据库 | /var/lib/pki/pki-tomcat/alias/[c] |
日志文件 | /var/lib/pki/pki-tomcat/tks/logs/ |
安装日志 | /var/log/pki/pki-tks-spawn-date.log |
卸载日志 | /var/log/pki/pki-tks-destroy-date.log |
审计日志 | /var/log/pki/pki-tomcat/tks/signedAudit/ |
Web 服务文件 | 代理服务: /var/lib/pki/pki-tomcat/tks/webapps/tks/agent/ |
管理服务: /var/lib/pki/pki-tomcat/tks/webapps/tks/admin/ | |
[a]
链接到 /etc/pki/pki-tomcat/tks/
[b]
子系统证书始终由安全域发布,以便需要客户端身份验证的域级别操作基于此子系统证书。
[c]
请注意,所有子系统证书都存储在实例安全数据库中
|
14.1.6. TPS 子系统信息
表 14.6. 默认实例的 TPS 子系统信息(pki-tomcat)
设置 | 值 |
---|---|
主目录 | /var/lib/pki/pki-tomcat/tps |
配置目录 | /var/lib/pki/pki-tomcat/tps/conf/[a] |
配置文件 | /var/lib/pki/pki-tomcat/tps/conf/CS.cfg |
子系统证书 | 传输证书 |
存储证书 | |
TLS 服务器证书 | |
审计日志签名证书 | |
子系统证书[b] | |
安全数据库 | /var/lib/pki/pki-tomcat/alias/[c] |
日志文件 | /var/lib/pki/pki-tomcat/tps/logs/ |
安装日志 | /var/log/pki/pki-tps-spawn-date.log |
卸载日志 | /var/log/pki/pki-tps-destroy-date.log |
审计日志 | /var/log/pki/pki-tomcat/tps/signedAudit/ |
Web 服务文件 | 代理服务: /var/lib/pki/pki-tomcat/tps/webapps/tps/agent/ |
管理服务: /var/lib/pki/pki-tomcat/tps/webapps/tps/admin/ | |
[a]
链接到 /etc/pki/pki-tomcat/tps/
[b]
子系统证书始终由安全域发布,以便需要客户端身份验证的域级别操作基于此子系统证书。
[c]
请注意,所有子系统证书都存储在实例安全数据库中
|
14.1.7. 共享证书系统子系统文件位置
表 14.7. 子系统文件位置
目录位置 | 内容 | |||||
---|---|---|---|---|---|---|
/var/lib/instance_name | 包含主实例目录,这是特定于用户的目录位置,以及自定义配置文件、配置文件、证书数据库、Web 文件,以及子系统实例的其他文件的位置。 | |||||
/usr/share/java/pki | 包含由证书系统子系统共享的 Java 存档文件。除了所有子系统的共享文件外,子文件夹中还有特定于子系统的文件:
| |||||
/usr/share/pki | 包含用于创建证书系统实例的常用文件和模板。除了所有子系统的共享文件外,子文件夹中还有特定于子系统的文件:
| |||||
/usr/bin | 包含 pkispawn 和 pkidestroy 实例配置脚本,以及由证书系统子系统共享的 Java、原生和安全性。 | |||||
/var/lib/tomcat5/common/lib | 包含指向本地 Tomcat Web 应用程序共享的 Java 归档文件的链接,并由证书系统子系统共享。不是由 TPS 子系统使用。 | |||||
/var/lib/tomcat5/server/lib | 包含本地 Tomcat Web 服务器使用的 Java 归档文件的链接,并由证书系统子系统共享。不是由 TPS 子系统使用。 | |||||
/usr/shared/pki | 包含 Tomcat 服务器以及证书系统实例使用的应用程序所使用的 Java 归档文件。不是由 TPS 子系统使用。 | |||||
| 包含 TPS 子系统使用的 Apache 模块。没有被 CA、KRA、OCSP 或 TKS 子系统使用。 | |||||
| TPS 子系统使用的 Mozilla LDAP SDK 工具。没有被 CA、KRA、OCSP 或 TKS 子系统使用。 |
14.2. CS.cfg Files
CS.cfg
。
CS.cfg
是一个 ASCII 文件,并使用适当的配置参数填充。修改实例功能的方式是通过子系统控制台进行更改的,这是推荐的方法。管理控制台中所做的更改反映在 配置文件中。
14.2.1. 查找 CS.cfg 文件
CS.cfg
。每个子系统实例的文件内容根据子系统配置的方式、其他设置和配置(如添加新配置文件或启用自测试)以及子系统类型的不同而有所不同。
CS.cfg
文件位于实例的配置目录中。
/var/lib/pki/instance_name/subsystem_type/conf
/var/lib/pki/instance_name/ca/conf
14.2.2. 编辑配置文件
CS.cfg
文件:
- 停止子系统实例。
# pki-server stop instance_name
或(如果使用nuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
当实例启动时,配置文件存储在缓存中。通过控制台对实例所做的任何更改都会在文件的缓存版本中改变。当服务器停止或重启时,缓存中存储的配置文件将写入磁盘。在编辑配置文件或更改更改之前,服务器停止服务器将会被缓存的版本覆盖。 - 打开
/var/lib/pki/instance_name/subsystem_type/conf
目录。 - 在文本编辑器中打开
CS.cfg
文件。 - 编辑文件中的参数,并保存更改。
- 启动子系统实例。
# pki-server start instance_name
或(如果使用nuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@instance_name.service
14.2.3. CS.cfg 配置文件概述
CS.cfg
,其中包含实例的所有设置,如插件和用于配置的 Java 类。参数和特定设置根据子系统类型的不同,但通常情况下,CS.cfg
文件定义了子系统实例的这些部分:
- 基本子系统实例信息,如其名称、端口分配、实例目录和主机名
- 日志记录
- 插件和方法,对实例的用户目录(授权)进行身份验证
- 实例所属的安全域
- 子系统证书
- 子系统实例使用的其他子系统
- 子系统使用的数据库类型和实例
- PKI 相关任务的设置,如 TKS 中的密钥配置文件、CA 中的证书配置文件以及 KRA 中密钥恢复所需的代理
CS.cfg
文件是一个基本的 parameter=value 格式。
#comment parameter=value
CS.cfg
文件中,许多参数块都有描述性注释,使用 pound (#)字符进行注释。服务器会忽略注释、空行、未知参数或拼写错误的参数。
例 14.1. 子系统授权设置
authz.impl._000=## authz.impl._001=## authorization manager implementations authz.impl._002=## authz.impl.BasicAclAuthz.class=com.netscape.cms.authorization.BasicAclAuthz authz.instance.BasicAclAuthz.pluginName=BasicAclAuthz
- 需要本地化的值必须在 UTF8 字符中。
CS.cfg
文件支持参数值中的正斜杠(/)。如果在值中需要反斜杠(\),则必须用反斜杠转义,即必须使用一行中的两个反斜杠。
CS.cfg
文件设置和参数的快照。这些不是 CS.cfg
文件参数的详细参考或示例。此外,每个子系统配置文件中可用的参数也非常不同,尽管有相似性。
14.2.3.1. 基本子系统设置
例 14.2. CA 的基本实例参数: pkispawn 文件 ca.cfg
[DEFAULT] pki_admin_password=Secret.123 pki_client_pkcs12_password=Secret.123 pki_ds_password=Secret.123 # Optionally keep client databases pki_client_database_purge=False # Separated CA instance name and ports pki_instance_name=pki-ca pki_http_port=18080 pki_https_port=18443 # This Separated CA instance will be its own security domain pki_security_domain_https_port=18443 [Tomcat] # Separated CA Tomcat ports pki_ajp_port=18009 pki_tomcat_server_port=18005
CS.cfg
文件中,但它没有在 CS.cfg
中设置。服务器配置在 server.xml
文件中设置。
CS.cfg
和 server.xml
中的端口 必须与 正常工作的 RHCS 实例匹配。
14.2.3.2. 日志记录设置
CS.cfg
文件中都有自己的配置条目。
14.2.3.3. 认证和授权设置
CS.cfg
文件设置如何识别用户访问子系统实例(身份验证)以及每个经过身份验证的用户批准(授权)的操作。
SharedToken
的身份验证实例,它实例化名为 SharedSecret
的 JAVA 插件。
auths.impl.SharedToken.class=com.netscape.cms.authentication.SharedSecret auths.instance.SharedToken.pluginName=SharedToken auths.instance.SharedToken.dnpattern= auths.instance.SharedToken.ldap.basedn=ou=People,dc=example,dc=org auths.instance.SharedToken.ldap.ldapauth.authtype=BasicAuth auths.instance.SharedToken.ldap.ldapauth.bindDN=cn=Directory Manager auths.instance.SharedToken.ldap.ldapauth.bindPWPrompt=Rule SharedToken auths.instance.SharedToken.ldap.ldapauth.clientCertNickname= auths.instance.SharedToken.ldap.ldapconn.host=server.example.com auths.instance.SharedToken.ldap.ldapconn.port=636 auths.instance.SharedToken.ldap.ldapconn.secureConn=true auths.instance.SharedToken.ldap.ldapconn.version=3 auths.instance.SharedToken.ldap.maxConns= auths.instance.SharedToken.ldap.minConns= auths.instance.SharedToken.ldapByteAttributes= auths.instance.SharedToken.ldapStringAttributes= auths.instance.SharedToken.shrTokAttr=shrTok
authz.impl.DirAclAuthz.class=com.netscape.cms.authorization.DirAclAuthz authz.instance.DirAclAuthz.ldap=internaldb authz.instance.DirAclAuthz.pluginName=DirAclAuthz authz.instance.DirAclAuthz.ldap._000=## authz.instance.DirAclAuthz.ldap._001=## Internal Database authz.instance.DirAclAuthz.ldap._002=## authz.instance.DirAclAuthz.ldap.basedn=dc=server.example.com-pki-ca authz.instance.DirAclAuthz.ldap.database=server.example.com-pki-ca authz.instance.DirAclAuthz.ldap.maxConns=15 authz.instance.DirAclAuthz.ldap.minConns=3 authz.instance.DirAclAuthz.ldap.ldapauth.authtype=SslClientAuth authz.instance.DirAclAuthz.ldap.ldapauth.bindDN=cn=Directory Manager authz.instance.DirAclAuthz.ldap.ldapauth.bindPWPrompt=Internal LDAP Database authz.instance.DirAclAuthz.ldap.ldapauth.clientCertNickname= authz.instance.DirAclAuthz.ldap.ldapconn.host=localhost authz.instance.DirAclAuthz.ldap.ldapconn.port=11636 authz.instance.DirAclAuthz.ldap.ldapconn.secureConn=true authz.instance.DirAclAuthz.ldap.multipleSuffix.enable=false
auths.impl.AgentCertAuth.class=com.netscape.cms.authentication.AgentCertAuthentication auths.instance.AgentCertAuth.agentGroup=Certificate Manager Agents auths.instance.AgentCertAuth.pluginName=AgentCertAuth
14.2.3.4. 子系统证书设置
ca.sslserver.cert=MIIDmDCCAoCgAwIBAgIBAzANBgkqhkiG9w0BAQUFADBAMR4wHAYDVQQKExVSZWR... ca.sslserver.certreq=MIICizCCAXMCAQAwRjEeMBwGA1UEChMVUmVkYnVkY29tcHV0ZXIgRG9tYWluMSQwIgYDV... ca.sslserver.nickname=Server-Cert cert-pki-ca ca.sslserver.tokenname=Internal Key Storage Token
14.2.3.5. 所需子系统的设置
conn.ca1.clientNickname=subsystemCert cert-pki-tps conn.ca1.hostadminport=server.example.com:8443 conn.ca1.hostagentport=server.example.com:8443 conn.ca1.hostport=server.example.com:9443 conn.ca1.keepAlive=true conn.ca1.retryConnect=3 conn.ca1.servlet.enrollment=/ca/ee/ca/profileSubmitSSLClient conn.ca1.servlet.renewal=/ca/ee/ca/profileSubmitSSLClient conn.ca1.servlet.revoke=/ca/subsystem/ca/doRevoke conn.ca1.servlet.unrevoke=/ca/subsystem/ca/doUnrevoke conn.ca1.timeout=100
14.2.3.6. 数据库设置
internaldb._000=## internaldb._000=## internaldb._001=## Internal Database internaldb._002=## internaldb.basedn=o=pki-tomcat-ca-SD internaldb.database=pki-tomcat-ca internaldb.maxConns=15 internaldb.minConns=3 internaldb.ldapauth.authtype=SslClientAuth internaldb.ldapauth.clientCertNickname=HSM-A:subsystemCert pki-tomcat-ca internaldb.ldapconn.host=example.com internaldb.ldapconn.port=11636 internaldb.ldapconn.secureConn=true internaldb.multipleSuffix.enable=false
14.2.3.7. 启用和配置发布队列
图 14.1. 启用发布队列
14.2.3.7.1. 通过编辑 CS.cfg 文件启用和配置发布队列
CS.cfg
文件启用发布队列,管理员可以设置其他选项以进行发布,如用于发布操作的线程数量和队列页大小。
- 停止 CA 服务器,以便您可以编辑配置文件。
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- 打开 CA 的
CS.cfg
文件。# vim /var/lib/pki/instance_name/ca/conf/CS.cfg
- 将
ca.publish.queue.enable
设置为 true。如果参数不存在,则使用 参数添加一行。ca.publish.queue.enable=true
- 设置其他相关的发布队列参数:
ca.publish.queue.maxNumberOfThreads
设置可为发布操作打开的最大线程数。默认值为 3。ca.publish.queue.priorityLevel
设置发布操作的优先级。优先级值范围从 - 2 (最低优先级)到 2 (最高优先级)。零(0)是普通优先级,也是默认值。ca.publish.queue.pageSize
设置可在发布队列页面中存储的最大请求数。默认值为 40。ca.publish.queue.saveStatus
设置间隔,以保存其每个指定数量的发布操作的状态。这允许在 CA 重启或崩溃时恢复发布队列。默认值为 200,但任何非零数将在 CA 重启时恢复队列。将此参数设置为 0 可禁用队列恢复。
ca.publish.queue.maxNumberOfThreads=1 ca.publish.queue.priorityLevel=0 ca.publish.queue.pageSize=100 ca.publish.queue.saveStatus=200
TIP将ca.publish.queue.enable
设置为 false,将ca.publish.queue.maxNumberOfThreads
设置为 0 可禁用发布队列,并将单独的线程用于发布的证书。 - 重启 CA 服务器。
# systemctl start pki-tomcatd-nuxwdog@instance_name.service
14.2.3.8. PKI 任务的设置
CS.cfg
文件用于为每个子系统配置 PKI 任务。每个子系统的参数都有所不同,没有任何重叠。
kra.noOfRequiredRecoveryAgents=1
CS.cfg
文件以熟悉其 PKI 任务设置;文件中的注释是学习不同参数的指导。
- CA 配置文件列出所有证书配置集和策略设置,以及生成 CRL 的规则。
- TPS 配置不同的令牌操作。
- TKS 列出从不同密钥类型派生密钥的配置集。
- OCSP 为不同的密钥集设置密钥信息。
14.2.3.9. 更改 CA-Isued 证书中的 DN 属性
表 14.8. 值类型允许的 Characters
属性 | 值类型 | 对象标识符 |
---|---|---|
cn | DirectoryString | 2.5.4.3 |
ou | DirectoryString | 2.5.4.11 |
o | DirectoryString | 2.5.4.10 |
c | 可打印字符串,双字符 | 2.5.4.6 |
l | DirectoryString | 2.5.4.7 |
st | DirectoryString | 2.5.4.8 |
street | DirectoryString | 2.5.4.9 |
title | DirectoryString | 2.5.4.12 |
uid | DirectoryString | 0.9.2342.19200300.100.1.1 |
IA5String | 1.2.840.113549.1.9.1 | |
dc | IA5String | 0.9.2342.19200300.100.1.2.25 |
serialNumber | PrintableString | 2.5.4.5 |
unstructuredname | IA5String | 1.2.840.113549.1.9.2 |
unstructuredaddress | PrintableString | 1.2.840.113549.1.9.8 |
X500Name.NEW_ATTRNAME.oid=n.n.n.n X500Name.NEW_ATTRNAME.class=string_to_DER_value_converter_class
- Netscape.security.x509.PrintableConverter 将 字符串转换为可打印字符串值。字符串必须只有可打印的字符。
- Netscape.security.x509.IA5StringConverter 将字符串转换为 IA5String 值。字符串必须具有 IA5String 字符。
- Netscape.security.x509.DirStrConverter 将字符串转换为 DirectoryString。根据 RFC 2253,字符串预期为 DirectoryString 格式。
- Netscape.security.x509.GenericValueConverter 按以下顺序将字符串字符转换为最大字符集:
- PrintableString
- IA5String
- BMPString
- 通用字符串
X500Name.MY_ATTR.oid=1.2.3.4.5.6 X500Name.MY_ATTR.class=netscape.security.x509.DirStrConverter
14.2.3.9.1. 添加新或自定义属性
- 停止证书管理器。
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- 打开
/var/lib/pki/cs_instance/conf/
目录。 - 打开配置文件
CS.cfg
。 - 将新属性添加到配置文件中。例如,要添加三个专有属性,即 MYATTR1,它是 DirectoryString,MYATTR2 是一个 IA5String,而 MYATTR3 是 可打印字符串,请在配置文件末尾添加以下行:
X500Name.attr.MYATTR1.oid=1.2.3.4.5.6 X500Name.attr.MYATTR1.class=netscape.security.x509.DirStrConverter X500Name.attr.MYATTR2.oid=11.22.33.44.55.66 X500Name.attr.MYATTR2.class=netscape.security.x509.IA5StringConverter X500Name.attr.MYATTR3.oid=111.222.333.444.555.666 X500Name.attr.MYATTR3.class=netscape.security.x509.PrintableConverter
- 保存更改并关闭该文件。
- 重启证书管理器。
# systemctl start pki-tomcatd-nuxwdog@instance_name.service
- 重新加载注册页面并验证更改;新属性应当以表单中显示。
- 要验证新属性是否生效,请使用手动注册表请求证书。输入新属性的值,以便它可以验证它们出现在证书主题名称中。例如,为新属性输入以下值,并在主题名称中查找它们:
MYATTR1: a_value MYATTR2: a.Value MYATTR3: aValue cn: John Doe o: Example Corporation
- 打开代理服务页面,并批准请求。
- 发布证书后,检查主题名称。证书应该显示主题名称中的新属性值。
14.2.3.9.2. 更改 DER-Encoding 顺序
X500Name.directoryStringEncodingOrder=encoding_list_separated_by_commas
- PrintableString
- IA5String
- UniversalString
- BMPString
- UTF8String
X500Name.directoryStringEncodingOrder=PrintableString,BMPString
- 停止证书管理器。
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- 打开
/var/lib/pki/cs_instance/conf/
目录。 - 打开
CS.cfg
配置文件。 - 将编码顺序添加到配置文件。例如,要指定两个编码值: PrintableString 和 UniversalString,并且编码顺序是 PrintableString,然后是 UniversalString,请在配置文件末尾添加以下行:
X500Name.directoryStringEncodingOrder=PrintableString,UniversalString
- 保存更改并关闭该文件。
- 启动 证书管理器。
# systemctl start pki-tomcatd-nuxwdog@instance_name.service
- 要验证编码订单是否生效,请使用手动注册表注册证书。对 cn 使用 John_Doe。
- 打开代理服务页面,并批准请求。
- 发布证书后,使用 dumpasn1 工具检查证书的编码。主题名称的 cn 组件应编码为 UniversalString。
- 使用 John Smith 为 cn 创建并提交新请求。主题名称的 cn 组件应编码为 可打印字符串。
14.2.3.10. 将 CA 设置为使用不同的证书来签名 CRL
- 为证书管理器请求 CRL 签名证书。或者,使用能够生成密钥对的工具,如 certutil 工具生成密钥对,为密钥对请求证书,并在证书管理器的证书数据库中安装证书。有关 certutil 工具的详情请参考 http://www.mozilla.org/projects/security/pki/nss/tools/。
- 创建证书请求后,通过证书管理器终端页面提交它,选择正确的配置文件,如"Manual OCSP Manager Signing Certificate Enrollment"配置文件。该页面具有以下格式的 URL:
https://hostname:port/ca/ee/ca
- 提交请求后,登录代理服务页面。
- 检查请求所需的扩展。CRL 签名证书必须包含设置 crlSigning 位的 Key Usage 扩展。
- 批准请求。
- 生成 CRL 签名证书后,通过控制台中的 System Keys 和 Certificates 在证书管理器的数据库中安装证书。
- 停止证书管理器。
# pki-server stop instance_name
- 更新证书管理器的配置,以识别新密钥对和证书。
- 进入 Certificate Manager 实例配置目录。
# cd
/var/lib/pki/instance-name/ca/conf/
- 打开
CS.cfg
文件并添加以下行:ca.crl_signing.cacertnickname=nickname cert-instance_ID ca.crl_signing.defaultSigningAlgorithm=signing_algorithm ca.crl_signing.tokenname=token_name
nickname 是分配给 CRL 签名证书的名称。instance_ id 是证书管理器实例的名称。如果安装的 CA 是基于 RSA 的 CA,则 signing_algorithm 可以是 SHA256withRSA,SHA384withRSA, 或 SHA512withRSA。如果安装的 CA 是基于 EC 的 CA,则 signing_algorithm 可以是 SHA256withEC,SHA384withEC,SHA512withEC.token_name 是用于生成密钥对和证书的令牌名称。如果使用内部/软件令牌,请使用 Internal Key Storage Token 作为值。例如,条目可能类似如下:ca.crl_signing.cacertnickname=crlSigningCert cert-pki-ca ca.crl_signing.defaultSigningAlgorithm=SHAMD512withRSA ca.crl_signing.tokenname=Internal Key Storage Token
- 保存更改并关闭该文件。
- 重启证书管理器。
# pki-server restart instance_name
现在,证书管理器可以使用 CRL 签名证书为它生成的 CRL 签名证书进行签名。
14.2.3.11. 从 CS.cfg 中的缓存配置 CRL Generation
- 停止 CA 服务器。
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- 打开 CA 配置目录。
# cd /var/lib/instance_name/conf/
- 编辑
CS.cfg
文件,将enableCRLCache
和enableCacheRecovery
参数设置为 true :ca.crl.MasterCRL.enableCRLCache=true ca.crl.MasterCRL.enableCacheRecovery=true
- 启动 CA 服务器。
# systemctl start pki-tomcatd-nuxwdog@instance_name.service
14.2.3.12. 在 CS.cfg 中为 CRL 配置 Update Intervals
ca.crl.MasterCRL.updateSchema=3 ca.crl.MasterCRL.enableDailyUpdates=true ca.crl.MasterCRL.enableUpdateInterval=true ca.crl.MasterCRL.autoUpdateInterval=240 ca.crl.MasterCRL.dailyUpdates=1:00 ca.crl.MasterCRL.nextUpdateGracePeriod=0
CS.cfg
文件中为 full 和 delta CRL 配置设置涉及编辑参数。
表 14.9. CRL Extended Interval 参数
参数 | 描述 | 接受的值 |
---|---|---|
updateSchema | 设置每个完整 CRL 生成的 delta CRL 的比率 | 整数值 |
enableDailyUpdates | 根据设置时间启用和禁用设置 CRL 更新 | true 或 false |
enableUpdateInterval | 根据设置间隔启用和禁用设置 CRL 更新 | true 或 false |
dailyUpdates | 设置 CRL 应该更新的时间 | 以逗号分隔的时间列表 |
autoUpdateInterval | 设置更新 CRL 的时间间隔(以分钟为单位) | 整数值 |
autoUpdateInterval.effectiveAtStart | 允许系统尝试立即使用自动更新的新值,而不是等待当前调度的 nextUpdate 时间 | true 或 false |
nextUpdateGracePeriod | 将时间(分钟)添加到 CRL 的有效性周期,以确保 CRL 在发布或复制期间保持有效 | 整数值 |
refreshInSec | 在克隆 OCSP 中设置线程的定期性(以秒为单位)以检查 LDAP 是否更新 CRL | 整数值 |
过程 14.1. 如何在 CS.cfg 中配置 CRL 更新间隔
- 停止 CA 服务器。
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- 进入 CA 配置目录。
# cd /var/lib/instance_name/conf/
- 编辑
CS.cfg
文件,并添加以下行来设置更新间隔:ca.crl.MasterCRL.updateSchema=3
默认间隔为 1,这意味着每次生成 CRL 时都会生成完整的 CRL。updateSchema
间隔可以设置为任何整数。 - 通过指定一个循环间隔或设置更新发生时间来设置更新频率:
- 通过启用
enableDailyUpdates
参数来指定设置时间,并将所需时间添加到dailyUpdates
参数中:ca.crl.MasterCRL.enableDailyUpdates=true ca.crl.MasterCRL.enableUpdateInterval=false ca.crl.MasterCRL.dailyUpdates=0:50,04:55,06:55
此字段设置在 CRL 应该更新时的每日时间。要多次指定,请输入以逗号分隔的时间列表,如 01:50,04:55,06:55。要输入多个天数的调度,请输入以逗号分隔的列表,以在同一天内设置时间,然后使用分号分隔列表来标识不同天数的时间。例如,将 01:50,04:55,06:55;02:00,05:00,17:00 设置为在周期的 1:50am、4:55am 和 6:55am 以及第 2 天(5am 和 5pm)中配置撤销。通过启用enableUpdateInterval
参数来指定间隔,并将所需的间隔(以分钟为单位)添加到autoUpdateInterval
参数:ca.crl.MasterCRL.enableDailyUpdates=false ca.crl.MasterCRL.enableUpdateInterval=true ca.crl.MasterCRL.autoUpdateInterval=240
- 根据您的环境设置以下参数:
- 如果您运行没有 OCSP 子系统的 CA,请设置:
ca.crl.MasterCRL.nextUpdateGracePeriod=0
- 如果您使用 OCSP 子系统运行 CA,请设置:
ca.crl.MasterCRL.nextUpdateGracePeriod=time_in_minutes
ca.crl.MasterCRL.nextUpdateGracePeriod
参数定义时间(以分钟为单位),值必须足够大,以便 CA 将新的 CRL 传播到 OCSP。您必须将参数设置为非零值。如果您还在您的环境中有 OCSP 克隆,还要设置:ocsp.store.defStore.refreshInSec=time_in_seconds
ocsp.store.defStore.refreshInSec
参数设置克隆 OCSP 实例通过来自 master OCSP 实例的 LDAP 复制更新更新的频率(以秒为单位)。
有关参数的详情,请查看 表 14.9 “CRL Extended Interval 参数”。 - 重启 CA 服务器。
# systemctl start pki-tomcatd-nuxwdog@instance_name.service
enableDailyUpdates
和 enableUpdateInterval
参数设置为 true,并将所需的值设置为 autoUpdateInterval
和 dailyUpdates
:
ca.crl.MasterCRL.enableDailyUpdates=true ca.crl.MasterCRL.enableUpdateInterval=true ca.crl.MasterCRL.autoUpdateInterval=240 ca.crl.MasterCRL.dailyUpdates=1:00
dailyUpdates
值。
dailyUpdates
值,防止调度偏移。
14.2.3.13. 更改子系统的访问控制设置
CS.cfg
中更改 authz.evaluateOrder
参数。
authz.evaluateOrder=deny,allow
web.xml
文件(basic ACL)或更复杂的 ACL 评估访问控制规则,方法是检查 LDAP 数据库来访问。authz.sourceType
参数标识要使用的授权类型。
authz.sourceType=web.xml
CS.cfg
文件以加载更新的设置后,始终重启子系统。
14.2.3.14. 为请求和序列号配置范围
/etc/pki/instance_name/子系统/CS.cfg
文件中的请求和序列号:
dbs.beginRequestNumber=1001001007001 dbs.endRequestNumber=11001001007000 dbs.requestIncrement=10000000000000 dbs.requestLowWaterMark=2000000000000 dbs.requestCloneTransferNumber=10000 dbs.requestDN=ou=ca, ou=requests dbs.requestRangeDN=ou=requests, ou=ranges dbs.beginSerialNumber=1001001007001 dbs.endSerialNumber=11001001007000 dbs.serialIncrement=10000000000000 dbs.serialLowWaterMark=2000000000000 dbs.serialCloneTransferNumber=10000 dbs.serialDN=ou=certificateRepository, ou=ca dbs.serialRangeDN=ou=certificateRepository, ou=ranges dbs.beginReplicaNumber=1 dbs.endReplicaNumber=100 dbs.replicaIncrement=100 dbs.replicaLowWaterMark=20 dbs.replicaCloneTransferNumber=5 dbs.replicaDN=ou=replica dbs.replicaRangeDN=ou=replica, ou=ranges dbs.ldap=internaldb dbs.newSchemaEntryAdded=true
BigInteger
值。
14.2.3.15. 为 pkiconsole
设置要求以使用 TLS 客户端证书验证
pkiconsole
已被弃用。
CS.cfg
文件,搜索 authType
参数并将其设置为如下:
authType=sslclientauth
14.3. 管理系统密码
password.conf
文件以纯文本形式存储系统密码。但是,一些管理员更喜欢完全删除密码文件,以允许 nuxwdog
最初提示每个密码的手动条目,并在未计划关闭时存储 auto-restart。
password.conf
文件。如果文件存在,则使用这些密码连接到其他服务,如内部 LDAP 数据库。如果该文件不存在,则 watchdog 守护进程会提示输入 PKI 服务器启动所需的所有密码。
password.conf
文件,子系统会假定存在所有必需的密码,并以明文格式正确格式化。如果任何密码缺失或格式错误,则系统无法正确启动。
CS.cfg
文件中的 cms.passwordlist
参数中:
cms.passwordlist=internaldb,replicationdb,CA LDAP Publishing cms.password.ignore.publishing.failure=true
cms.password.ignore.publishing.failure
参数允许 CA 子系统成功启动,即使它有与其中一个 LDAP 发布目录的连接失败。
- NSS 数据库 的内部
- 内部 LDAP 数据库的 internaldb
- replicationdb 用于复制密码
- 任何用于访问用于发布的外部 LDAP 数据库的密码(仅限 CA)注意如果在
password.conf
文件被删除后配置了发布程序,则不会将任何内容写入password.conf
文件。除非配置了nuxwdog
,否则服务器将在下次实例重启时访问新发布密码的提示。 - 任何外部硬件令牌密码
- NSS 数据库 的内部
- 内部 LDAP 数据库的 tokendbpass
- 任何外部硬件令牌密码
password.conf
文件(默认)- nuxwdog (watchdog)
14.3.1. 配置 password.conf 文件
conf/
目录中的纯文本文件 password.conf
中。因此,只需通过文本编辑器修改它们。
- 证书系统实例用于访问和更新内部数据库的绑定密码。
- HSM 的密码
- 证书系统实例用来访问身份验证目录的绑定密码,以防 CMC 共享文件系统服务。
- 子系统用来访问和更新 LDAP 发布目录的绑定密码;这只有在为发布证书进行了配置并且 CRL 到 LDAP 兼容目录时才需要。
- 子系统使用的绑定密码来访问其复制数据库。
- 对于 TPS 实例,用于访问和更新令牌数据库的绑定密码。
password.conf
文件还包含打开子系统私钥所需的令牌密码。
CS.cfg
文件中配置:
passwordFile=/var/lib/pki/instance_name/conf/password.conf
password.conf
文件中的密码条目采用以下格式:
name=password
internal=413691159497
hardware-name=password
hardware-NHSM-CONN-XC=MyHSM$S8cret
password.conf
文件的内容示例:
internal=376577078151 internaldb=secret12 replicationdb=1535106826 hardware-NHSM-CONN-XC=MyHSM$S8cret
14.3.2. 使用证书系统 Watchdog 服务
- 在服务器启动期间提示输入相关密码并缓存它们。
- 当服务器因为崩溃而自动重启时,请使用缓存的密码。
14.3.2.1. 启用 Watchdog 服务
- 如果要在此主机上使用 Shared Secret 功能,请启用 Shared Secret 功能,如 第 14.8.3 节 “启用 CMC 共享 Secret 功能” 所述。
- 从
/var/lib/pki/instance_name/conf/
目录中备份server.xml
和password.conf
文件。例如:# cp -p /var/lib/pki/instance_name/conf/server.xml /root/ # cp -p /var/lib/pki/instance_name/conf/password.conf /root/
- 停止并禁用证书系统实例的服务:
# systemctl stop pki-tomcatd@instance_name.service # systemctl disable pki-tomcatd@instance_name.service
- 如果您使用硬件安全模块(HSM),请启用 watchdog 服务来提示输入硬件令牌的密码:
- 显示硬件令牌的名称:
# egrep "^hardware-" /var/lib/pki/instance_name/conf/password.conf hardware-HSM_token_name=password
上例中突出显示的字符串是硬件令牌名称。 - 将
cms.tokenList
参数添加到/var/lib/pki/instance_name/conf/ca/CS.cfg
文件中,并将其设置为硬件令牌的名称。例如:cms.tokenList=HMS_token_name
- 为实例启用 watchdog 配置:
# pki-server instance-nuxwdog-enable instance_name
或者,为所有实例启用 watchdog:# pki-server nuxwdog-enable
详情请查看 pki-server-nuxwdog(8) man page。 - 默认情况下,
nuxwdog
将服务器作为/etc/sysconfig/pki-tomcat
文件中的TOMCAT_USER
变量中配置的用户启动。另外,要修改用户和组:- 将实例的 watchdog
systemd
单元文件复制到/etc/systemd/system/
目录中:# cp -p /usr/lib/systemd/system/instance_name-nuxwdog@.service /etc/systemd/system/
注意/etc/systemd/system/
目录中的单元文件具有更高的优先级,且不会在更新过程中替换。 - 在
/etc/pki/instance_name/nuxwdog.conf
文件中的[Service]
部分添加以下条目:User new_user_name
- 重新载入
systemd
配置:# systemctl daemon-reload
- 启用使用 watchdog 的证书系统服务:
# systemctl enable pki-tomcatd-nuxwdog@instance_name.service
- (可选):请参阅 第 14.3.2.3 节 “验证证书系统 Watchdog 服务是否已启用”。
- 要启动证书系统实例,请运行以下命令并输入提示的密码:
# systemctl start pki-tomcatd-nuxwdog@instance_name.service
14.3.2.2. 使用启用 Watchdog 启动和停止证书系统
14.3.2.3. 验证证书系统 Watchdog 服务是否已启用
- 验证 pki-tomcatd-nuxwdog 服务是否已启用:
# systemctl is-enabled pki-tomcatd-nuxwdog@instance_name.service enabled
- 验证 pki-tomcatd 服务是否已禁用:
#
systemctl is-disabled pki-tomcatd@instance_name.service
disabled - 在
/etc/pki/instance_name/server.xml
文件中:- 验证
passwordFile
参数是否引用CS.cfg
文件。例如:passwordFile="/var/lib/pki/instance_name/ca/CS.cfg"
- 验证
passwordClass
参数是否已设置为com.netscape.cms.tomcat.NuxwdogPasswordStore
:passwordClass="com.netscape.cms.tomcat.NuxwdogPasswordStore"
14.3.2.4. 禁用 Watchdog 服务
- 停止并禁用使用 watchdog 的证书系统实例的服务:
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service # systemctl disable pki-tomcatd-nuxwdog@instance_name.service
- 在不监视实例的情况下启用常规服务:
# pki-server instance-nuxwdog-disable instance_name
- 禁用实例的 watchdog 配置:
# systemctl enable pki-tomcatd@instance_name.service
详情请查看 pki-server-nuxwdog(8) man page。 - 将
password.conf
文件恢复到其原始位置。例如:# cp /root/password.conf.bak /var/lib/pki/instance_name/conf/password.conf
- 启动证书系统实例:
# systemctl start pki-tomcatd@instance_name.service
14.4. Tomcat Engine 和 Web 服务的配置文件
/var/lib/pki/instance_name/conf/server.xml
提供 Tomcat 引擎的配置。/usr/share/pki/subsystem_type/webapps/WEB-INF/web.xml
提供此实例提供的 Web 服务的配置。
14.4.1. tomcatjss
pki-tomcat/conf
目录中找到 的 server.xml
文件中的以下配置可用于解释 Tomcatjs 如何适合于整个证书系统生态系统。secret 端口的 Connector 条目的一部分如下所示。
<Connector name="Secure" # Info about the socket itself port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" sslProtocol="SSL" scheme="https" secure="true" connectionTimeout="80000" maxHttpHeaderSize="8192" acceptCount="100" maxThreads="150" minSpareThreads="25" enableLookups="false" disableUploadTimeout="true" # Points to our tomcat jss implementation sslImplementationName="org.apache.tomcat.util.net.jss.JSSImplementation" # OCSP responder configuration can be enabled here enableOCSP="true" ocspCacheSize="1000" ocspMinCacheEntryDuration="60" ocspMaxCacheEntryDuration="120" ocspTimeout="10" # A collection of cipher related settings that make sure connections are secure. strictCiphers="true" # The "clientAuth" parameter configures the client authentication scheme # for this server socket. If you set "clientAuth" to "want", the client # authentication certificate is optional. Alternatively, set the # parameter to "required" to configure that the certificate is is mandatory. clientAuth="want" sslVersionRangeStream="tls1_1:tls1_2" sslVersionRangeDatagram="tls1_1:tls1_2" sslRangeCiphers="+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,+TLS_DHE_RSA_WITH_AES_128_CBC_SHA,+TLS_DHE_RSA_WITH_AES_256_CBC_SHA,+TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,+TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,+TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,+TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,+TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 serverCertNickFile="/var/lib/pki/pki-tomcat/conf/serverCertNick.conf" passwordFile="/var/lib/pki/pki-tomcat/conf/password.conf" passwordClass="org.apache.tomcat.util.net.jss.PlainPasswordFile" certdbDir="/var/lib/pki/pki-tomcat/alias" />
server.xml
配置文件中,有这个 Connector 配置元素包含指向 tomcatjss 实现的指针,它可以插入到这个 Connector 对象的 sslImplementation
属性中。
14.4.1.1. TLS Cipher 配置
server.xml
文件中配置的 TLS 密码会提供系统范围的默认值。这包括充当服务器(例如,从 Tomcat 提供 HTTPS 连接时)和作为客户端(例如,与 LDAP 服务器通信或与其他证书系统实例通信时)。
/var/lib/pki/instance_name/conf/server.xml
文件中。以下参数控制提供的密码:
strictCiphers
,当设为 true 时,确保只启用sslRangeCiphers
中的 + 符号的密码。strictCiphers="true"
不要更改默认值(true)。sslVersionRangeStream
和sslVersionRangeDatagram
设置服务器支持的 TLS 版本。以下是参数的默认值:sslVersionRangeStream="tls1_1:tls1_2" sslVersionRangeDatagram="tls1_1:tls1_2"
不要更改参数的默认值。sslRangeCiphers
设置启用和禁用哪些密码。启用了 + 符号的密码,并禁用了 - 符号的密码。设置 RSA 密码,如下所示:sslRangeCiphers="+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,+TLS_DHE_RSA_WITH_AES_128_CBC_SHA,+TLS_DHE_RSA_WITH_AES_256_CBC_SHA,+TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,+TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,+TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,+TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,+TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
设置 EC 密码,如下所示:sslRangeCiphers="+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,+TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
有关允许的密码列表,请参阅 第 3.1 节 “TLS、ECC 和 RSA”。- 如果您在为 RSA 启用 FIPS 模式的系统中安装 LunaSA 或 nCipher Hardware Security Module (HSM)的证书系统,请禁用以下密码,因为 FIPS 模式的 HSMs 不支持它们:
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
14.4.1.1.1. 客户端 TLS 密码配置
ca.connector.KRA.clientCiphers=your selected cipher list
ca.connector.KRA.clientCiphers=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA
tps.connector.ca id.clientCiphers=your selected cipher list tps.connector.kra id.clientCiphers=your selected cipher list tps.connector.tks id.clientCiphers=your selected cipher list
tps.connector.ca1.clientCiphers=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA
14.4.1.2. 在 CA 上启用自动撤销检查
revocationChecking.enabled
参数中启用自动撤销检查。
revocationChecking.validityInterval
)。如果 CA 无法重新验证缓存中的证书状态,则有一个宽限期(revocationChecking.unknownStateInterval
),其中之前缓存的状态仍被视为有效,即使它超出有效期间隔。
revocationChecking.bufferSize
)。如果缓冲区设置缺失或设置为零,则不会保留缓冲区,这意味着不会缓存撤销检查的结果。在这种情况下,所有撤销检查都会直接针对 CA 的内部数据库执行。
CS.cfg
配置文件包含一个参数 jss.ocspcheck.enable,它设置证书管理器是否应该使用 OCSP 验证它收到的证书的撤销状态。将此参数的值改为 true 意味着证书管理器读取证书中的授权信息访问扩展,并从扩展中指定的 OCSP 响应程序验证证书的撤销状态。
- 停止子系统实例。
# pki-server stop instance_name
- 打开
CS.cfg
文件。# vim
/var/lib/pki/instance-name/ca/conf/CS.cfg
- 编辑与撤销相关的参数。
auths.revocationChecking.bufferSize=50 auths.revocationChecking.ca=ca auths.revocationChecking.enabled=true auths.revocationChecking.unknownStateInterval=0 auths.revocationChecking.validityInterval=120
revocationChecking.ca
.设置提供 OCSP respsonse、CA 或 OCSP 响应程序的服务。revocationChecking.enabled
.设置撤销检查。true 启用检查; false 禁用检查。默认情况下启用该功能。revocationChecking.bufferSize
.设置服务器应在其缓存中维护的最后一次检查证书总数。例如,如果缓冲区大小为 2,服务器会保留在其缓存中检查的最后两个证书。默认情况下,服务器缓存最后 50 个证书。revocationChecking.unknownStateInterval
.设置服务器检查撤销状态的频率。默认间隔为 0 秒。unknownStateInterval 是一个宽限期,如果 CA 没有方法(没有访问信息)验证证书状态,则缓存结果将被假定为 truerevocationChecking.validityInterval
.设置缓存的证书被视为有效的时长。选择间隔时请小心。例如,如果有效期周期为 60 秒,服务器会每分钟丢弃其缓存中的证书,并尝试从其源中检索证书。证书管理器使用其内部数据库来检索和验证证书的撤销状态。默认有效期为 120 秒(2 分钟)。
- 启动证书系统实例。
# pki-server start instance_name
14.4.1.3. 为子系统启用证书撤销检查
server.xml
文件,为所有子系统启用 OCSP 检查。代理接口和 admin 接口是单独配置的,因此应编辑配置中的两个部分。
- 获取用于检查证书状态的 OCSP 或 CA 的 OCSP 签名证书名称。例如:
#
certutil -L -d
Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI Certificate Authority - Example Domain CT,c,/etc/pki/instance-name/alias
ocspSigningCert cert-pki-ocsp CTu,Cu,Cu
subsystemCert cert-pki-ocsp u,u,u Server-Cert cert-pki-ocsp u,u,u auditSigningCert cert-pki-ocsp u,u,Pu - 为子系统打开
server.xml
文件。例如:# vim
/etc/pki/instance-name/server.xml
- 如果实例的安全数据库中没有 OCSP 签名证书,请导入它:
# certutil -d
/etc/pki/instance-name/alias
-A -n "ocspSigningCert cert-pki-ca" -t "C,," -a -i ocspCert.b64 - 启用 OCSP 检查有三个关键参数:
启用OCSP
,它必须设置为 true 才能启用 OCSP 检查。这是一个全局设置;如果为一个接口设置,则它适用于实例的每个接口。但是,它必须在server.xml
文件中列出的第一个接口上设置,通常是代理接口。其它接口上的任何设置都会被忽略。ocspResponderURL
,它为发送 OCSP 请求提供 OCSP 响应器的 URL。对于 OCSP Manager,这可能是其他 OCSP 或 CA 中的另一个 OCSP 服务。对于其他子系统,这总是指向 OCSP 或 CA 中的外部 OCSP 服务。ocspResponderCertNickname
给出用于签署响应的签名证书;对于 CA OCSP 服务,这是 CA 的 OCSP 签名证书,对于 OCSP 响应者,它是一个 OCSP 签名证书。
其他参数可用于定义 OCSP 通信。所有 OCSP 检查参数都列在 表 14.10 “server.xml 的 OCSP 参数” 中。文件中有两个不同的部分用于代理和管理界面。需要向两个部分添加 OCSP 参数,以启用和配置 OCSP 检查。例如:例 14.3. 代理接口的 OCSP 设置
<Connector name="Agent" port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="true" sslProtocol="SSL" sslOptions="ssl2=true,ssl3=true,tls=true" ssl3Ciphers="-SSL3_FORTEZZA_DMS_WITH_NULL_SHA, ..." tls3Ciphers="-SSL3_FORTEZZA_DMS_WITH_NULL_SHA, ..." SSLImplementation="org.apache.tomcat.util.net.jss.JSSImplementation"
enableOCSP="true"
ocspResponderURL="http://server.example.com:8443/ca/ocsp"
ocspResponderCertNickname="ocspSigningCert cert-pki-ca 102409a"
ocspCacheSize="1000"
ocspMinCacheEntryDuration="60"
ocspMaxCacheEntryDuration="120"
ocspTimeout="10"
debug="true" serverCertNickFile="/etc/pki/instance-name/serverCertNick.conf" passwordFile="/etc/pki/instance-name/password.conf" passwordClass="org.apache.tomcat.util.net.jss.PlainPasswordFile" certdbDir="/etc/pki/instance-name/alias"/> - 如果给定的 OCSP 服务不是 CA,则必须将 OCSP 服务的签名证书导入到子系统的 NSS 数据库中。这可以在控制台或使用 certutil 完成; Red Hat Certificate System Administration Guide 中的 Installing Certificates in the Certificate System Database in the Certificate System Database 中涵盖了这两个选项。
- 重新启动子系统。
# pki-server restart instance_name
表 14.10. server.xml 的 OCSP 参数
参数 | 描述 |
---|---|
enableOCSP | 为子系统启用(或禁用) OCSP 检查。 |
ocspResponderURL | 设置发送 OCSP 请求的 URL。
对于 OCSP Manager,这可能是其他 OCSP 或 CA 中的另一个 OCSP 服务。对于 TKS 或 KRA,这总是指向 OCSP 或 CA 中的外部 OCSP 服务。
|
ocspResponderCertNickname | 为响应器设置签名证书的 nickname,可以是 OCSP 签名证书或 CA 的 OCSP 签名证书。证书必须导入到子系统的 NSS 数据库中,并设置了适当的信任设置。 |
ocspCacheSize | 设置缓存条目的最大数量。 |
ocspMinCacheEntryDuration | 在进行另一个提取前设置最小秒数。例如,如果将其设置为 120,则无法再次检查证书的有效性,直到最后一次有效期检查前至少 2 分钟为止。 |
ocspMaxCacheEntryDuration | 设置在下一次获取尝试前要等待的最大秒数。这可防止在有效检查之间有太大的窗口。 |
ocspTimeout | 为 OCSP 请求设置超时时间(以秒为单位)。 |
14.4.1.4. 在注册配置文件中添加 AIA 扩展
policyset.cmcUserCertSet.5.default.params.authInfoAccessADLocation_0=http://example.com:8080/ocsp/ee/ocsp
14.4.2. 会话超时
- TLS 会话超时
- HTTP 会话超时
14.4.2.1. TLS 会话超时
/etc/pki /& lt;instance>/server.xml 文件中的 Secure <Connector>
元素中配置:
... <Server> <Service> <Connector name="Secure" ... keepAliveTimeout="300000" ... /> </Service> </Server> ...
/etc/pki/<instance>/server.xml
文件,然后重新启动服务器。
14.4.2.2. HTTP 会话超时
/etc/pki/& lt;instance>/web.xml 文件中的 <session-timeout >
元素中配置:
... <web-app> <session-config> <session-timeout>30</session-timeout> </session-config> </web-app> ...
/etc/pki/<instance>/web.xml
文件,然后重新启动服务器。
14.4.2.3. PKI Web UI 的会话超时
14.4.2.4. PKI 控制台的会话超时
14.4.2.5. PKI CLI 的会话超时
14.5. web.xml
14.5.1. 从 web.xml 中删除非使用接口(仅限 CA)
web.xml
文件中。但是,由于这些功能已弃用且不再使用,因此可以从 CA 配置中删除它们以提高安全性。
- 停止 CA。
# pki-server stop instance_name
或(如果使用nuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- 打开 CA 的 Web 文件目录。例如:
# cd /var/lib/pki/instance_name/ca/webapps/ca/WEB-INF
- 备份当前的
web.xml
文件。# cp web.xml web.xml.servlets
- 编辑
web.xml
文件,并删除以下每个已弃用的 servlet 的 <servlet> 条目:- caadminEnroll
- cabulkissuance
- cacertbasedenrollment
- caenrollment
- caProxyBulkIssuance
例如,删除 caadminEnroll servlet 条目:<servlet> <servlet-name> caadminEnroll </servlet-name> <servlet-class> com.netscape.cms.servlet.cert.EnrollServlet </servlet-class> <init-param><param-name> GetClientCert </param-name> <param-value> false </param-value> </init-param> <init-param><param-name> successTemplate </param-name> <param-value> /admin/ca/EnrollSuccess.template </param-value> </init-param> <init-param><param-name> AuthzMgr </param-name> <param-value> BasicAclAuthz </param-value> </init-param> <init-param><param-name> authority </param-name> <param-value> ca </param-value> </init-param> <init-param><param-name> interface </param-name> <param-value> admin </param-value> </init-param> <init-param><param-name> ID </param-name> <param-value> caadminEnroll </param-value> </init-param> <init-param><param-name> resourceID </param-name> <param-value> certServer.admin.request.enrollment </param-value> </init-param> <init-param><param-name> AuthMgr </param-name> <param-value> passwdUserDBAuthMgr </param-value> </init-param> </servlet>
- 删除 servlet 条目后,删除对应的 < servlet-mapping> 条目。
<servlet-mapping> <servlet-name> caadminEnroll </servlet-name> <url-pattern> /admin/ca/adminEnroll </url-pattern> </servlet-mapping>
- 为最终用户请求接口删除三个 <filter-mapping > 条目。
<filter-mapping> <filter-name> EERequestFilter </filter-name> <url-pattern> /certbasedenrollment </url-pattern> </filter-mapping> <filter-mapping> <filter-name> EERequestFilter </filter-name> <url-pattern> /enrollment </url-pattern> </filter-mapping> <filter-mapping> <filter-name> EERequestFilter </filter-name> <url-pattern> /profileSubmit </url-pattern> </filter-mapping>
- 再次启动 CA。
# pki-server start instance_name
或(如果使用nuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@instance_name.service
14.6. 自定义 Web 服务
14.6.1. 自定义子系统 Web 应用程序
- 包含文本、JavaScript 代码、页面布局、CSS 格式等的 HTML 页面
web.xml
文件,用于定义 servlet、路径、安全限制和其他- 到 PKI 库的链接。
/var/lib/pki/pki-tomcat/conf/Catalina/localhost/
direcotry 中的上下文文件进行部署,例如 ca.xml
文件中:
<Context docBase="/usr/share/pki/ca/webapps/ca" crossContext="true" allowLinking="true"> ... </Context>
docBase
指向默认 Web 应用目录 /usr/share/pki/
的位置。
webapps
目录中:
$ cp -r /usr/share/pki/ca/webapps/ca /var/lib/pki/pki-tomcat/webapps
docBase
更改为指向 webapps
目录的自定义 Web 应用程序目录:
<Context docBase="ca" crossContext="true" allowLinking="true"> ... </Context>
docBase
并删除自定义 Web 应用程序目录:
$ rm -rf /var/lib/pki/pki-tomcat/webapps/ca
14.6.2. 自定义 Web UI 主题
- CSS 文件,该文件决定了全局外观
- 镜像文件,包括徽标、图标和其他
- 品牌属性,它决定了页面标题、徽标链接、标题颜色和其他。
/var/lib/pki/pki-tomcat/conf/Catalina/localhost/
目录中的 pki.xml
上下文文件进行部署:
<Context docBase="/usr/share/pki/common-ui" crossContext="true" allowLinking="true"> ... </Context>
/usr/share/pki/
的位置。
webapps
目录中的 pki
目录中:
$ cp -r /usr/share/pki/common-ui /var/lib/pki/pki-tomcat/webapps/pki
docBase
更改为指向与 webapps
目录相关的自定义主题目录:
<Context docBase="pki" crossContext="true" allowLinking="true"> ... </Context>
docBase
并删除自定义主题目录:
$ rm -rf /var/lib/pki/pki-tomcat/webapps/pki
14.6.3. 自定义 TPS 令牌状态标签
/usr/share/pki/tps/conf/token-states.properties
文件中,并在 第 2.5.2.4.1.4 节 “令牌状态和转换标签” 中描述。
$ cp /usr/share/pki/tps/conf/token-states.properties /var/lib/pki/pki-tomcat/tps/conf
$ rm /var/lib/pki/pki-tomcat/tps/conf/token-states.properties
14.7. 使用访问横幅
Application | 显示横幅时 |
---|---|
PKI 控制台 |
|
Web 界面 |
|
pki 命令行工具 |
|
[a]
有关更改会话超时的详情,请参考 第 14.4.2 节 “会话超时”。
|
例 14.4. 显示 Access Banner 时
pki
工具,则显示了访问横幅:
$ pki cert-show 0x1
WARNING! Access to this service is restricted to those individuals with specific permissions. If you are not an authorized user, disconnect now. Any attempts to gain unauthorized access will be prosecuted to the fullest extent of the law. Do you want to proceed (y/N)? y
-----------------
Certificate "0x1"
-----------------
Serial Number: 0x1
Issuer: CN=CA Signing Certificate,OU=instance_name,O=EXAMPLE
Subject: CN=CA Signing Certificate,OU=instance_name,O=EXAMPLE
Status: VALID
Not Before: Mon Feb 20 18:21:03 CET 2017
Not After: Fri Feb 20 18:21:03 CET 2037
14.7.1. 启用访问横幅
/etc/pki/instance_name/banner.txt
文件,并输入要显示的文本。
/etc/pki/instance_name/banner.txt
文件中的文本必须使用 UTF-8 格式。要验证,请参阅 第 14.7.4 节 “验证 Banner”。
14.7.2. 禁用访问横幅
/etc/pki/instance_name/banner.txt
文件。例如:
# mv /etc/pki/instance_name/banner.txt /etc/pki/instance_name/banner.txt.UNUSED
14.7.3. 显示横幅
# pki-server banner-show -i instance_name
14.7.4. 验证 Banner
# pki-server banner-validate -i instance_name --------------- Banner is valid ---------------
14.8. CMC 的配置
14.8.1. 了解 CMC 的工作方式
14.8.2. 启用 PopLinkWittnessV2
功能
/var/lib/pki/instance_name/ca/conf/CS.cfg
文件中启用以下选项:
cmc.popLinkWitnessRequired=true
14.8.3. 启用 CMC 共享 Secret 功能
- 如果主机上启用了 watchdog 服务,请临时禁用该服务。请参阅 第 14.3.2.4 节 “禁用 Watchdog 服务”。
- 将
shrTok
属性添加到目录服务器的 schema 中:# ldapmodify -D "cn=Directory Manager" -H ldaps://server.example.com:636 -W -x dn: cn=schema changetype: modify add: attributetypes attributetypes: ( 2.16.840.1.117370.3.1.123 NAME 'shrTok' DESC 'User Defined ObjectClass for SharedToken' SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 SINGLE-VALUE X-ORIGIN 'custom for sharedToken')
- 如果系统密钥存储在硬件安全模块(HSM)上,请在
/var/lib/pki/instance_name/ca/conf/CS.cfg
文件中设置cmc.token
参数。例如:cmc.token=NHSM-CONN-XC
- 使用以下方法之一启用共享令牌身份验证插件:
- 注意
pkiconsole
已被弃用。使用pkiconsole
工具启用插件:- 使用
pkiconsole
工具登录到系统。例如:# pkiconsole https:host.example.com:8443/ca
- 在 Configuration 选项卡中,选择 Authentication。
- 点 Add 并选择 SharedToken。
- 点 Next。
- 输入以下信息:
Authentication InstanceID=SharedToken shrTokAttr=shrTok ldap.ldapconn.host=server.example.com ldap.ldapconn.port=636 ldap.ldapconn.secureConn=true ldap.ldapauth.bindDN=cn=Directory Manager password=password ldap.ldapauth.authtype=BasicAuth ldap.basedn=ou=People,dc=example,dc=org
- 点确定。
- 要手动启用插件,请在
/var/lib/pki/instance_name/ca/conf/CS.cfg
文件中添加以下设置:auths.impl.SharedToken.class=com.netscape.cms.authentication.SharedSecret auths.instance.SharedToken.dnpattern= auths.instance.SharedToken.ldap.basedn=ou=People,dc=example,dc=org auths.instance.SharedToken.ldap.ldapauth.authtype=BasicAuth auths.instance.SharedToken.ldap.ldapauth.bindDN=cn=Directory Manager auths.instance.SharedToken.ldap.ldapauth.bindPWPrompt=Rule SharedToken auths.instance.SharedToken.ldap.ldapauth.clientCertNickname= auths.instance.SharedToken.ldap.ldapconn.host=server.example.com auths.instance.SharedToken.ldap.ldapconn.port=636 auths.instance.SharedToken.ldap.ldapconn.secureConn=true auths.instance.SharedToken.ldap.ldapconn.version=3 auths.instance.SharedToken.ldap.maxConns= auths.instance.SharedToken.ldap.minConns= auths.instance.SharedToken.ldapByteAttributes= auths.instance.SharedToken.ldapStringAttributes= auths.instance.SharedToken.pluginName=SharedToken auths.instance.SharedToken.shrTokAttr=shrTok
- 在
/var/lib/pki/instance_name/ca/conf/CS.cfg 文件中设置
参数中的 RSA issuance 保护证书的 nickname。例如:ca.cert.issuance_protection.
nicknameca.cert.issuance_protection.nickname=issuance_protection_certificate
此步骤是:- 如果您在
ca.cert.subsystem.nickname
参数中使用 RSA 证书,可选。 - 如果您在
ca.cert.subsystem.nickname
参数中使用 ECC 证书,则需要此项。
重要如果没有设置ca.cert.issuance_protection.nickname
参数,证书系统将自动使用ca.cert.subsystem.nickname
中指定的子系统的证书。但是,颁发保护证书必须是 RSA 证书。 - 重启证书系统:
# systemctl restart pki-tomcatd@instance_name.service
当 CA 启动时,证书系统会提示输入 Shared Token 插件使用的 LDAP 密码。 - 如果在此流程开始时临时禁用了 watchdog 服务,请重新启用该服务。请参阅 第 14.3.2.1 节 “启用 Watchdog 服务”。
14.8.4. 为 Web 用户界面启用 CMCRevoke
CMCRevoke
实用程序创建通过 Web UI 提交的撤销请求时,请将以下设置添加到 /var/lib/pki/instance_name/ca/conf/CS.cfg
文件中:
cmc.bypassClientAuth=true
14.9. 使用 CA EE 门户配置 Server-Side Key Generation for Certificate Enrollment
14.9.1. 安装配置
- 首先,停止 CA:
# systemctl stop pki-tomcatd@ca_instance_name.service
例如:# systemctl stop pki-tomcatd@pki-ca.service
- 在 CA 的
CS.cfg
中添加以下行:ca.connector.KRA.transportCertNickname=KRA transport cert
例如:ca.connector.KRA.transportCertNickname=transportCert cert-topology-02-KRA KRA
其中 topology-02-KRA 是 KRA 的实例的名称。 - 查找并导出 KRA 传输证书到文件中:
# grep "kra.transport.cert=" /var/lib/pki/kra_instance_name/kra/conf/CS.cfg | sed 's/kra.transport.cert=//' > kra transport cert file
例如:# grep "kra.transport.cert=" /var/lib/pki/pki-kra/kra/conf/CS.cfg | sed 's/kra.transport.cert=//' > /tmp/kraTransport.cert
- 使用 CA 的
CS.cfg
文件中指定的 nickname 将 KRA 传输证书导入到 CA 的 nssdb 中:- 列出传输证书别名:
grep "ca.connector.KRA.transportCertNickname" /var/lib/pki/ca_instance_name/ca/conf/CS.cfg
例如:# grep "ca.connector.KRA.transportCertNickname" /var/lib/pki/pki-ca/ca/conf/CS.cfg ca.connector.KRA.transportCertNickname=KRA transport cert
- 使用上一步中列出的 nickname 导入证书:
certutil -d /var/lib/pki/ca_instance_name/alias -A -t “,,” -n transportNickName -i kra transport cert file
例如:# certutil -d /var/lib/pki/pki-ca/alias -A -t “,,” -n "KRA transport cert" -i /tmp/kraTransport.cert
- 启动 CA:
# systemctl start pki-tomcatd@ca_instance_name.service
例如:# systemctl start pki-tomcatd@pki-ca.service
14.9.2. 配置集配置
caServerKeygen_UserCert
和 caServerKeygen_DirUserCert
,以允许在服务器端生成密钥的证书注册。但是,带有正确输入、输出和策略集的任何配置集都可以转换为服务器端 keygen 配置集。
输入
input.i1.class_id=serverKeygenInputImpl
输出
output.o1.class_id=pkcs12OutputImpl
policyset
policyset.userCertSet.3.constraint.class_id=keyConstraintImpl policyset.userCertSet.3.constraint.name=Key Constraint policyset.userCertSet.3.constraint.params.keyType=- policyset.userCertSet.3.constraint.params.keyParameters=1024,2048,3072,4096,nistp256,nistp384,nistp521 policyset.userCertSet.3.default.class_id=serverKeygenUserKeyDefaultImpl policyset.userCertSet.3.default.name=Server-Side Keygen Default policyset.userCertSet.3.default.params.keyType=RSA policyset.userCertSet.3.default.params.keySize=2048 policyset.userCertSet.3.default.params.enableArchival=true
身份验证
- caServerKeygen_UserCert.cfg包含 "auth.class_id=" 的空值,即通过此配置集注册请求需要 CA 代理批准。
- caServerKeygen_DirUserCert.cfg包含 "auth.instance_id=UserDirEnrollment",这意味着用户需要传递 LDAP uid/password 身份验证;此类身份验证机制被视为自动证书颁发,因为它不需要从 CA 代理按请求的批准。可以通过将 auth.instance_id 指令设置为任何兼容身份验证插件类来配置自动批准,作为上述 caServerKeygen_DirUserCert.cfg 配置集中的 examplified。以下是
CS.cfg
文件中的这样的配置示例:auths.instance.UserDirEnrollment.dnpattern= auths.instance.UserDirEnrollment.ldap.basedn=ou=People,dc=example,dc=com auths.instance.UserDirEnrollment.ldap.ldapconn.host=host.example.com auths.instance.UserDirEnrollment.ldap.ldapconn.port=389 auths.instance.UserDirEnrollment.ldap.ldapconn.secureConn=false auths.instance.UserDirEnrollment.ldap.maxConns= auths.instance.UserDirEnrollment.ldap.minConns= auths.instance.UserDirEnrollment.ldapByteAttributes= auths.instance.UserDirEnrollment.ldapStringAttributes=mail auths.instance.UserDirEnrollment.pluginName=UidPwdDirAuth
14.10. 配置证书转换
/var/lib/pki/instance name/ca/conf/ CS.cfg
目录中的 CA 的 CS.cfg
文件。
14.10.1. ca.certTransparency.mode
ca.certTransparency.mode
指定三个证书转换模式之一:
- disabled :签发的证书不会执行 SCT 扩展
- 启用: 签发的证书执行 SCT 扩展
- perProfile: 通过包含以下策略集的配置集注册的证书将执行 SCT 扩展: SignedCertificateTimestampListExtDefaultImpl
14.10.2. ca.certTransparency.log.num
ca.certTransparency.log.num
指定配置中定义的 CT 日志总数。
ca.certTransparency.log.<id>.enable
。
14.10.3. ca.certTransparency.log.<id>.*
ca.certTransparency.log.<id
>adtrust 指定与日志 <id> 相关的信息,其中 <id> 是分配给 CT 日志服务器的唯一 id,以将其与其他 CT 日志区分开。
ca.certTransparency.log.<id>
,并属于 <id> :
- ca.certTransparency.log.<id>.enable 指定 <id> CT 日志是否已启用(true)还是禁用(false)。
- ca.certTransparency.log.<id>.pubKey 包含 CT 日志公钥的 base64 编码。
- ca.certTransparency.log.<id>.url 包含 CT 日志 url 的 base64 编码。
- ca.certTransparency.log.<id>.version 指定 CT 支持(以及 CT 日志服务器)的 CT 版本号,目前只支持版本 1。
第 15 章 管理证书/密钥加密策略
关于加密令牌
15.1. 关于 certutil 和 PKICertImport
15.1.1. certutil 基本用法
[options]
15.1.2. PKICertImport 基础知识使用
[options]
15.1.3. certutil 常用命令
certutil -A
certutil -V
certutil -D
certutil -M
certutil -L
表 15.1. 证书别名和信任信息
证书 Nickname
|
Trust Attributes |
---|---|
caSigningCert pki-ca1
|
CT, C, C
|
15.1.4. Common certutil 和 PKICertImport 选项
-n <nickname>
-d <directory>
-t <trust>
- TLS 的信任
- 对电子邮件的信任
- 对象签名的信任
- c 指出此证书应该是证书颁发机构(CA)。
- c 表示这是用于签名服务器证书的可信证书颁发机构( C 表示小写 c,因此您不需要同时指定这两个证书)。
- T 表示此证书是签名客户端证书的可信颁发机构(T 表示小写 c,因此您不需要同时指定 T 和 c)。
- 这样可确保如果此证书为另一个证书签名,则该证书用于对象签名,它将被视为无效。
- certutil -L -d
- 将列出每个证书的 nickname,并在行末尾指定信任标志。
-h <HSM>
-e
-e
选项。
-a
-i <certificate>
-u <usage>
- -U C 代表验证客户端 TLS 证书。请注意,这主要接受任何证书,但会检查过期日期和签名。
- -U V 代表验证服务器 TLS 证书。请注意,这将拒绝 CA 证书,并将检查过期日期和签名。
- -U L 代表验证 CA TLS 证书。请注意,这将验证信任标志(查看是否存在 c ),并将检查密钥的使用以确保密钥是 CA 密钥。这也检查过期和签名。
- -U O 代表验证 OCSP 状态响应器证书。请注意,这会检查到期和签名。
- -u J 代表验证对象签名证书。请注意,这会检查到期和签名。
15.2. 导入根证书
- cd /path/to/nssdb
ca_root.crt
的文件中。请根据您的场景替换该文件的正确名称和路径。
导入 root 证书:
- 执行 PKICertImport -d . -n "CA Root" -t "CT,C,C" -a -i ca_root.crt -u L 命令.此命令验证并导入 root 证书到 NSS 数据库。如果没有打印错误消息,且返回码为 0 时,验证会成功。要检查返回代码,请在执行上述命令后立即执行 echo $?。在大多数情况下,会输出视觉错误消息。证书通常无法验证,因为它已过期或因为它不是 CA 证书。因此,请确保您的证书文件正确且最新。联系签发者,并确保您的系统中存在所有中间证书和 root 证书。
15.3. 导入中间证书链
- cd /path/to/nssdb
ca_sub_<num>.crt
的文件中(如 ca_sub_1.crt
、ca_sub_2.crt
等等)。根据您的部署替换您的证书的名称和路径。
fullchain.crt
、fullchain.pem
或类似的一个文件,并通过复制每个块(包括 ----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 标记)将其分成上述格式。第一个命名为 ca_sub_<num>.crt
,最后一个将是名为 service.crt
的服务器证书。服务器证书将在后续小节中讨论。
对于链中的每个中间证书:
- Execute PKICertImport -d . -n "CA Sub $num" -t "CT,C,C" -a -i ca_sub_$num.crt -u L此命令将验证并导入中间 CA 证书到 NSS 数据库。如果没有打印错误消息,且返回码为 0 时,验证会成功。要检查返回代码,请在执行上述命令后立即执行 echo $?。在大多数情况下,会输出视觉错误消息。如果验证没有成功,请联系签发者并确保系统中存在所有中间证书和 root 证书。
15.4. 将证书导入到 HSM 中
- cd /path/to/nssdb,如 cd /var/lib/pki/pki-ca/alias
- 对于所有 PKI 子程序的 TLS 服务器证书,请按照 服务器证书步骤。
- 对于任何子系统的审计签名证书,请按照以下步骤操作来验证 对象签名证书。
- 对于 CA 子系统的签名证书,请按照上述步骤导入和验证 中间证书链,但仅对 caSigningCert 执行此操作。
- 对于 CA 子系统的 OCSP 签名证书,请按照以下步骤验证 OCSP 证书。
- 对于 PKI 子系统的所有其他系统证书,请按照 客户端证书步骤。
要在 HSM 中导入服务器证书:
- 执行 PKICertImport -d . -h HSM -n "host.name.example.com" -t "," -a -i service.crt -u V此命令验证服务器证书并将其导入到 HSM。如果没有打印错误消息,且返回码为 0 时,验证会成功。要检查返回代码,请在执行上述命令后立即执行 echo $?。在大多数情况下,会输出视觉错误消息。证书通常因为父证书或缺失的 CA 信任链(如缺少中间证书或缺少 CA Root)导致验证失败。如果验证没有成功,请联系签发者并确保系统中存在所有中间证书和 root 证书。
在 HSM 中导入客户端证书:
- Execute PKICertImport -d . -h HSM -n "client name" -t ",," -a -i client.crt -u C此命令验证客户端证书并将其导入到 HSM。如果没有打印错误消息,且返回码为 0 时,验证会成功。要检查返回代码,请在执行上述命令后立即执行 echo $?。在大多数情况下,会输出视觉错误消息。如果验证没有成功,请联系签发者并确保系统中存在所有中间证书和 root 证书。
要在 HSM 中导入对象签名证书:
- 执行 PKICertImport -d . -h HSM -n "certificate name" -t ",P" -a -i objectsigning.crt -u J此命令验证对象签名证书并将其导入到 HSM。如果没有打印错误消息,且返回码为 0 时,验证会成功。要检查返回代码,请在执行上述命令后立即执行 echo $?。在大多数情况下,会输出视觉错误消息。如果验证没有成功,请联系签发者并确保系统中存在所有中间证书和 root 证书。
要在 HSM 中导入 OCSP 响应签名证书:
- 执行 PKICertImport -d . -h HSM -n "certificate name" -t "," -a -a -i ocsp.crt -u O此命令将 OCSP 响应器证书验证并导入到 HSM。如果没有打印错误消息,且返回码为 0 时,验证会成功。要检查返回代码,请在执行上述命令后立即执行 echo $?。在大多数情况下,会输出视觉错误消息。如果验证没有成功,请联系签发者并确保系统中存在所有中间证书和 root 证书。
15.5. 将证书导入到 NSS 数据库中
- 对于任何子系统的 auditSigningCert,请按照以下步骤操作来验证 对象签名证书。
- 对于 CA 子系统的 caSigningCert,请按照上述步骤导入和验证 中间证书链,但仅在 caSigningCert 中这样做。
- 对于 CA 子系统的 ocspSigningCert,请按照以下步骤操作来验证 OCSP 证书。
- 对于用户的客户端或 S/MIME 证书,请按照客户端证书 步骤。
将客户端证书导入到 NSS 数据库
- 更改到 NSS 数据库目录。例如:
# cd /path/to/nssdb/
- 导入并信任 root 证书(如果尚未导入且可信)。详情请查看 第 15.2 节 “导入根证书”。
- 导入并验证中间证书(如果尚未导入和验证)。详情请查看 第 15.3 节 “导入中间证书链”。
- 验证并导入客户端证书:
#
PKICertImport -d . -n "client name" -t ",," -a -i client.crt -u C如果没有打印错误消息,且返回码为 0 时,验证会成功。要检查返回代码,请在执行上述命令后立即执行 echo $?。在大多数情况下,会输出视觉错误消息。如果验证没有成功,请联系签发者并确保系统中存在所有中间证书和 root 证书。
导入对象签名证书
- 更改到 NSS 数据库目录。例如:
# cd /path/to/nssdb/
- 导入并信任 root 证书(如果尚未导入且可信)。详情请查看 第 15.2 节 “导入根证书”。
- 导入并验证中间证书(如果尚未导入和验证)。详情请查看 第 15.3 节 “导入中间证书链”。
- 验证并导入对象签名证书:
#
PKICertImport -d . -n "certificate name" -t ",,P" -a -i objectsigning.crt -u J如果没有打印错误消息,且返回码为 0 时,验证会成功。要检查返回代码,请在执行上述命令后立即执行 echo $?。在大多数情况下,会输出视觉错误消息。如果验证没有成功,请联系签发者并确保系统中存在所有中间证书和 root 证书。
导入 OCSP 响应器
- 更改到 NSS 数据库目录。例如:
# cd /path/to/nssdb/
- 导入并信任 root 证书(如果尚未导入且可信)。详情请查看 第 15.2 节 “导入根证书”。
- 导入并验证中间证书(如果尚未导入和验证)。详情请查看 第 15.3 节 “导入中间证书链”。
- 验证并导入 OCSP 响应程序证书:
#
PKICertImport -d . -n "certificate name" -t ",," -a -i ocsp.crt -u O如果没有打印错误消息,且返回码为 0 时,验证会成功。要检查返回代码,请在执行上述命令后立即执行 echo $?。在大多数情况下,会输出视觉错误消息。如果验证没有成功,请联系签发者并确保系统中存在所有中间证书和 root 证书。
第 16 章 证书配置文件配置
16.1. 在文件系统中直接创建和编辑证书配置文件
/ca/profiles/ca/
,如 /var/lib/pki/pki-ca/ca/profiles/ca/
。该文件命名为 profile_name.cfg
。可以在这些配置集配置文件中设置或修改配置集规则的所有参数。配置集规则可以是输入、输出、身份验证、授权、默认值和约束。
/var/lib/pki/instance_name/ca/conf
目录中,名称为 If profile
。
16.1.1. 配置非 CA 系统证书配置文件
16.1.1.1. 配置集配置参数
policyset.cmcUserCertSet.6.constraint.class_id=noConstraintImpl policyset.cmcUserCertSet.6.constraint.name=No Constraint policyset.cmcUserCertSet.6.default.class_id=userExtensionDefaultImpl policyset.cmcUserCertSet.6.default.name=User Supplied Key Default policyset.cmcUserCertSet.6.default.params.userExtOID=2.5.29.15
表 16.1. 配置文件参数
参数 | 描述 |
---|---|
desc | 提供证书配置文件的自由文本描述,该配置文件显示在终端实体页面中。例如,desc=This certificate profile 用于使用代理身份验证注册服务器证书。 |
enable | 设置配置集是否已启用,因此可通过终端实体页面访问。例如:enable=true。 |
auth.instance_id | 设置身份验证管理器插件,用来验证通过配置集提交的证书请求。要进行自动注册,如果身份验证成功,CA 会立即发布证书。如果身份验证失败或者没有指定身份验证插件,则会将请求排队,来由代理手动批准。例如,auth.instance_id=CMCAuth。身份验证方法必须是从 CS.cfg 中注册的验证实例之一。 |
authz.acl |
指定授权约束。大多数情况下,我们用来设置组评估 ACL。例如,此 caCMCUserCert 参数要求 CMC 请求的签名者属于证书管理器代理组:
authz.acl=group="Certificate Manager Agents"
在基于目录的用户证书续订中,此选项用于确保原始请求者和当前验证的用户是同一个。
在评估授权前,实体必须验证(绑定或登录到系统)。指定的授权方法必须是从
CS.cfg 中注册的授权实例之一。
|
name | 指定配置集的名称。例如,name=Agent-Authenticated Server Certificate Enrollment。此名称显示在最终用户注册或续订页面中。 |
input.list | 按名称列出配置集允许的输入。例如,input.list=i1,i2。 |
input.input_id.class_id | 按输入 ID (在 input.list中列出的输入名称)提供输入的 java 类名称。例如: input.i1.class_id=cmcCertReqInputImpl。 |
output.list | 按名称列出配置集的可能输出格式。例如 output.list=o1。 |
output.output_id.class_id | 给出在 output.list 中名为 的输出格式的 java 类名称。例如: output.o1.class_id=certOutputImpl。 |
policyset.list | 列出配置的配置集规则。对于双证书,一组规则适用于签名密钥,另一组规则适用于加密密钥。单个证书只使用一组配置集规则。例如,policyset.list=serverCertSet。 |
policyset.policyset_id.list | 根据策略 ID 号为配置集配置的策略集中列出策略集中的策略,按照评估它们的顺序列出。例如: policyset.serverCertSet.list=1,2,3,4,5,6,7,8。 |
policyset.policyset_id.policy_number.constraint.class_id | 为配置集规则中配置的默认约束插件集提供 java 类名称。例如,policyset.serverCertSet.1.constraint.class_id=subjectNameConstraintImpl。 |
policyset.policyset_id.policy_number.constraint.name | 提供用户定义的约束名称。例如,policyset.serverCertSet.1.constraint.name=Subject Name Constraint。 |
policyset.policyset_id.policy_number.constraint.params.attribute | 为约束的允许的属性指定值。可能的属性因约束类型而异。例如,policyset.serverCertSet.1.constraint.params.pattern=CN=adtrust。 |
policyset.policyset_id.policy_number.default.class_id | 给出配置文件规则中默认集的 java 类名称。For example, policyset.serverCertSet.1.default.class_id=userSubjectNameDefaultImpl |
policyset.policyset_id.policy_number.default.name | 给出用户定义的默认值的名称。例如,policyset.serverCertSet.1.default.name=Subject Name Default |
policyset.policyset_id.policy_number.default.params.attribute | 为默认值的允许的属性指定值。可能的属性因默认类型而异。例如,policyset.serverCertSet.1.default.params.name=CN=(Name)$request.requestor_name$。 |
16.1.1.2. 在文件系统中直接修改证书扩展
policyset.cmcUserCertSet.6.constraint.class_id=keyUsageExtConstraintImpl
policyset.cmcUserCertSet.6.constraint.name=Key Usage Extension Constraint
policyset.cmcUserCertSet.6.constraint.params.keyUsageCritical=true
policyset.cmcUserCertSet.6.constraint.params.keyUsageCrlSign=false
policyset.cmcUserCertSet.6.constraint.params.keyUsageDataEncipherment=false
policyset.cmcUserCertSet.6.constraint.params.keyUsageDecipherOnly=false
policyset.cmcUserCertSet.6.constraint.params.keyUsageDigitalSignature=true
policyset.cmcUserCertSet.6.constraint.params.keyUsageEncipherOnly=false
policyset.cmcUserCertSet.6.constraint.params.keyUsageKeyAgreement=false
policyset.cmcUserCertSet.6.constraint.params.keyUsageKeyCertSign=false
policyset.cmcUserCertSet.6.constraint.params.keyUsageKeyEncipherment=true
policyset.cmcUserCertSet.6.constraint.params.keyUsageNonRepudiation=true
policyset.cmcUserCertSet.6.default.class_id=keyUsageExtDefaultImpl policyset.cmcUserCertSet.6.default.name=Key Usage Default policyset.cmcUserCertSet.6.default.params.keyUsageCritical=true policyset.cmcUserCertSet.6.default.params.keyUsageCrlSign=false policyset.cmcUserCertSet.6.default.params.keyUsageDataEncipherment=false policyset.cmcUserCertSet.6.default.params.keyUsageDecipherOnly=false policyset.cmcUserCertSet.6.default.params.keyUsageDigitalSignature=true policyset.cmcUserCertSet.6.default.params.keyUsageEncipherOnly=false policyset.cmcUserCertSet.6.default.params.keyUsageKeyAgreement=false policyset.cmcUserCertSet.6.default.params.keyUsageKeyCertSign=false policyset.cmcUserCertSet.6.default.params.keyUsageKeyEncipherment=true policyset.cmcUserCertSet.6.default.params.keyUsageNonRepudiation=true
policyset.cmcUserCertSet.6.default.class_id=userExtensionDefaultImpl policyset.cmcUserCertSet.6.default.name=User Supplied Key Default policyset.cmcUserCertSet.6.default.params.userExtOID=2.5.29.15
16.1.1.2.1. 密钥使用和扩展的密钥用法
用途/扩展的密钥用法 | 密钥用法 |
---|---|
TLS 服务器身份验证命令
id-kp-serverAuth
| 数字签名, keyEncipherment, 或 KeyAgreement |
TLS 客户端(Mutual)身份验证
id-kp-clientAuth
| 数字签名、密钥加密和/ 或 KeyAgreement |
代码签名
id-kp-codeSigning
| digitalSignature |
电子邮件保护
id-kp-emailProtection
| 数字签名、非替换 和/或(keyEncipherment 或 keyAgreement) |
OCSP 响应签名
id-kp-OCSPSigning
| KeyAgreement and/or nonRepudiation |
- 用于 OCSP 响应签名的注册配置文件包含扩展密钥使用 id-kp-OCSPSigning,但 密钥Encipherment 键使用位:
policyset.ocspCertSet.6.default.class_id=keyUsageExtDefaultImpl policyset.ocspCertSet..6.default.name=Key Usage Default policyset.ocspCertSet..6.default.params.keyUsageCritical=true policyset.ocspCertSet..6.default.params.keyUsageCrlSign=false policyset.ocspCertSet..6.default.params.keyUsageDataEncipherment=false policyset.ocspCertSet..6.default.params.keyUsageDecipherOnly=false policyset.ocspCertSet..6.default.params.keyUsageDigitalSignature=true policyset.ocspCertSet..6.default.params.keyUsageEncipherOnly=false policyset.ocspCertSet..6.default.params.keyUsageKeyAgreement=false policyset.ocspCertSet..6.default.params.keyUsageKeyCertSign=false policyset.ocspCertSet..6.default.params.keyUsageKeyEncipherment=true policyset.ocspCertSet..6.default.params.keyUsageNonRepudiation=true policyset.ocspCertSet.7.constraint.params.exKeyUsageOIDs=1.3.6.1.5.5.7.3.9 policyset.ocspCertSet.7.default.class_id=extendedKeyUsageExtDefaultImpl policyset.ocspCertSet.7.default.name=Extended Key Usage Default policyset.ocspCertSet.7.default.params.exKeyUsageCritical=false policyset.ocspCertSet.7.default.params.exKeyUsageOIDs=1.3.6.1.5.5.7.3.9
- 用于 TLS 服务器身份验证目的的注册配置文件包含扩展密钥 使用 id-kp-serverAuth,但 CRL 签名密钥用法位:
policyset.serverCertSet.6.default.name=Key Usage Default policyset.serverCertSet.6.default.params.keyUsageCritical=true policyset.serverCertSet.6.default.params.keyUsageDigitalSignature=true policyset.serverCertSet.6.default.params.keyUsageNonRepudiation=false policyset.serverCertSet.6.default.params.keyUsageDataEncipherment=true policyset.serverCertSet.6.default.params.keyUsageKeyEncipherment=false policyset.serverCertSet.6.default.params.keyUsageKeyAgreement=true policyset.serverCertSet.6.default.params.keyUsageKeyCertSign=false policyset.serverCertSet.6.default.params.keyUsageCrlSign=true policyset.serverCertSet.6.default.params.keyUsageEncipherOnly=false policyset.serverCertSet.6.default.params.keyUsageDecipherOnly=false policyset.cmcUserCertSet.7.default.class_id=extendedKeyUsageExtDefaultImpl policyset.cmcUserCertSet.7.default.name=Extended Key Usage Extension Default policyset.cmcUserCertSet.7.default.params.exKeyUsageCritical=false policyset.serverCertSet.7.default.params.exKeyUsageOIDs=1.3.6.1.5.5.7.3.1
- Red Hat Certificate System Administration Guide 中的 Extended Key Usage Extension Constraint 部分。
- Red Hat Certificate System Administration Guide 中的 keyUsage 部分。
- Red Hat Certificate System Administration Guide 中的 Extended Key Usage Extension Constraint 部分。
- Red Hat Certificate System Administration Guide 中的 extKeyUsage 部分。
16.1.1.2.2. 配置跨Pair 配置集
- 证书策略扩展(
CertificatePoliciesExtension
)指定证书在之下的术语,对于每个 PKI 通常是唯一的。 - Policy Mapping Extension (
PolicyMappingExtension
)通过映射两个环境的证书配置文件来封装两个 PKI 之间的信任。
policyset.userCertSet.p7.constraint.class_id=noConstraintImpl policyset.userCertSet.p7.constraint.name=No Constraint policyset.userCertSet.p7.default.class_id=certificatePoliciesExtDefaultImpl policyset.userCertSet.p7.default.name=Certificate Policies Extension Default policyset.userCertSet.p7.default.params.Critical=false policyset.userCertSet.p7.default.params.PoliciesExt.num=1 policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.enable=true policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.policyId=1.1.1.1 policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.CPSURI.enable=false policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.CPSURI.value= policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.enable=false policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.explicitText.value= policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.noticeReference.noticeNumbers= policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.noticeReference.organization=
Identifier: Certificate Policies: - 2.5.29.32 Critical: no Certificate Policies: Policy Identifier: 1.1.1.1
16.1.1.3. 在文件系统中直接添加配置文件输入
配置集/ca
目录中的证书配置文件包含该特定证书配置文件表单的输入信息。输入是终端页面注册表单中的字段。有一个参数 input.list,它列出了该配置集中包含的输入。其他参数定义输入;它们通过格式输入来标识 。ID.例如,这会在配置集中添加通用输入:
input.list=i1,i2,i3,i4 ... input.i4.class_id=genericInputImpl input.i4.params.gi_display_name0=Name0 input.i4.params.gi_display_name1=Name1 input.i4.params.gi_display_name2=Name2 input.i4.params.gi_display_name3=Name3 input.i4.params.gi_param_enable0=true input.i4.params.gi_param_enable1=true input.i4.params.gi_param_enable2=true input.i4.params.gi_param_enable3=true input.i4.params.gi_param_name0=gname0 input.i4.params.gi_param_name1=gname1 input.i4.params.gi_param_name2=gname2 input.i4.params.gi_param_name3=gname3 input.i4.params.gi_num=4
16.1.2. 更改证书的默认有效期时间
/var/lib/pki/instance_name/ca/profiles/ca/caCACert.cfg
文件并设置:
policyset.caCertSet.2.default.params.range=825
16.1.3. 配置 CA 系统证书配置文件
/var/lib/pki/[instance name]/ca/conf
文件中。这些配置集为:
caAuditSigningCert.profile
eccAdminCert.profile
rsaAdminCert.profile
caCert.profile
eccServerCert.profile
saServerCert.profile
caOCSPCert.profile
eccSubsystemCert.profile
rsaSubsystemCert.profile
- 如何将有效性更改为 CA 签名证书。
- 如何添加扩展(如证书策略扩展)。
- 备份
pkispawn
使用的原始 CA 证书配置文件。# cp -p /usr/share/pki/ca/conf/caCert.profile /usr/share/pki/ca/conf/caCert.profile.orig
- 打开配置向导使用的 CA 证书配置文件。
# vim /usr/share/pki/ca/conf/caCert.profile
- 将 Validity Default 中的有效期重置为您想要的任何有效期。例如,将周期改为两年:
2.default.class=com.netscape.cms.profile.def.ValidityDefault 2.default.name=Validity Default 2.default.params.range=7200
- 通过在配置集中创建新的默认条目并将其添加到列表中来添加任何扩展。例如,要添加证书策略扩展,请添加默认值(本例中为 default #9):
9.default.class_id=certificatePoliciesExtDefaultImpl 9.default.name=Certificate Policies Extension Default 9.default.params.Critical=false 9.default.params.PoliciesExt.certPolicy0.enable=false 9.default.params.PoliciesExt.certPolicy0.policyId= 9.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.CPSURI.enable=true 9.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.CPSURI.value=CertificatePolicies.example.com 9.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.enable=false 9.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.explicitText.value= 9.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.noticeReference.noticeNumbers= 9.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.noticeReference.organization=
然后,将默认数量添加到默认值列表中,以使用新默认值:list=2,4,5,6,7,8,
9
16.1.4. 管理智能卡 CA 配置文件
/var/lib/pki/instance_name/profiles/ca/
目录中,以及其他 CA 配置集。默认配置集列在 表 16.2 “默认令牌证书配置文件” 中。
表 16.2. 默认令牌证书配置文件
配置集名称 | 配置文件 | 描述 |
---|---|---|
常规注册配置文件 | ||
令牌设备密钥注册 | caTokenDeviceKeyEnrollment.cfg | 用于注册用于设备或服务器的令牌。 |
令牌用户加密证书注册 | caTokenUserEncryptionKeyEnrollment.cfg | 为用户在令牌中注册加密证书。 |
令牌用户签名证书注册 | caTokenUserSigningKeyEnrollment.cfg | 为用户在令牌中注册签名证书。 |
令牌用户 MS 登录证书注册 | caTokenMSLoginEnrollment.cfg | 用于注册用户证书以单点登录到 Windows 域或 PC。 |
临时令牌配置集 | ||
临时设备证书注册 | caTempTokenDeviceKeyEnrollment.cfg | 在临时令牌中注册设备的证书。 |
临时令牌用户加密证书注册 | caTempTokenUserEncryptionKeyEnrollment.cfg | 为用户在临时令牌中注册加密证书。 |
临时令牌用户签名证书注册 | caTempTokenUserSigningKeyEnrollment.cfg | 为用户在临时令牌中注册签名证书。 |
续订配置文件[a] | ||
令牌用户加密证书注册(续订) | caTokenUserEncryptionKeyRenewal.cfg | 如果允许续订,在令牌上为用户续订加密证书。 |
令牌用户签名证书注册(续订) | caTokenUserSigningKeyRenewal.cfg | 如果允许续订,在令牌上为用户续订签名证书。 |
[a]
续订配置文件只能与发布原始证书的配置集一起使用。有两个有用的设置:
|
16.1.4.1. 为 TPS 编辑注册配置文件
policyset.set1.p1.default.params.dnpattern=UID=$request.uid$, O=Token Key User policyset.set1.p1.default.params.ldap.enable=true policyset.set1.p1.default.params.ldap.basedn=ou=people,dc=host,dc=example,dc=com policyset.set1.p1.default.params.ldapStringAttributes=uid,mail policyset.set1.p1.default.params.ldap.ldapconn.host=localhost.example.com policyset.set1.p1.default.params.ldap.ldapconn.port=389
ldapStringAttributes
参数告知 CA 从 company 目录检索哪些 LDAP 属性。例如,如果目录包含 uid
作为 LDAP 属性名称,这将在证书的主题名称中使用,则 uid
必须列在 ldapStringAttributes
参数中,并且 request.uid 在 dnpattern
中列为其中一个组件。
dnpattern
参数的格式包括在 Subject Name Constraint 部分和 Red Hat Certificate System Administration Guide 中的 Subject Name Default 部分。
16.1.4.2. 创建自定义 TPS 配置集
- 为发布 CA 创建新令牌配置文件。设置配置文件的内容包括在 Red Hat Certificate System Administration Guide 中的 Setting up Certificate Profiles 部分。
- 将配置集复制到 CA 的配置集目录
/var/lib/instance_name/ca/profiles/ca/
中。 - 编辑 CA 的
CS.cfg
文件,并将新配置集引用和配置集名称添加到 CA 的配置集列表中。例如:# vim etc/pki/instance_name/ca/CS.cfg profile.list=caUserCert,...,caManualRenewal,
tpsExampleEnrollProfile
... profile.caTokenMSLoginEnrollment.class_id=caUserCertEnrollImpl profile.caTokenMSLoginEnrollment.config=/var/lib/pki/instance_name/profiles/ca/tpsExampleEnrollProfile.cfg - 编辑 TPS
CS.cfg
文件,并添加一行以指向新的 CA 注册配置文件。例如:# vim /etc/pki/instance_name/tps/CS.cfg op.enroll.userKey.keyGen.signing.ca.profileId=tpsExampleEnrollProfile
- 编辑智能卡配置集后重启实例:
# systemctl restart pki-tomcatd-nuxwdog@instance_name.service
如果 CA 和 TPS 位于单独的实例中,请重启两个实例。
externalReg
)设置的注册配置文件。
16.1.4.3. 使用 Windows 智能卡登录配置文件
caTokenMSLoginEnrollment.cfg
)。
- 如果尚未为 TLS 配置证书,向域控制器发布证书。
- 为每个用户配置智能卡登录,而不是作为全局策略,以防止锁定域管理员。
- 启用 CRL 发布到 Active Directory 服务器,因为域控制器在每次登录时检查 CRL。
16.1.5. 禁用证书 Enrolment 配置集
/var/lib/pki/instance_name/ca/profiles/ca/
目录中对应的 If cfg
文件,并将 visible
和 enable
参数设置为 false。
- 列出所有非CMC 配置集:
# ls -l /var/lib/pki/instance_name/ca/profiles/ca/ | grep -v "CMC"
- 在每个显示的文件中,将以下参数设置为 false :
visible=false enable=false
- 列出所有 CMC 配置集:
# ls -l /var/lib/pki/instance_name/ca/profiles/ca/*CMC*
- 在每个显示的文件中设置:
visible=false
第 17 章 配置密钥恢复授权
17.1. 手动设置密钥存档
- 在 CA 和 KRA 之间具有可信关系。
- 为密钥归档启用了注册表单后,这意味着它配置了密钥存档,并以表单存储 KRA 传输证书。
- 如有必要,创建一个可信管理器来建立证书管理器和 KRA 之间的关系。要使 CA 能够请求 KRA 的密钥存档,必须配置两个子系统才能识别、信任并相互通信。验证证书管理器是否已设置为具有 KRA 内部数据库中的适当 TLS 客户端身份验证证书的特权用户。默认情况下,证书管理器将其子系统证书用于 TLS 客户端身份验证到 KRA。
- 复制 KRA 的 base-64 编码传输证书。传输证书存储在 KRA 的证书数据库中,可以使用 certutil 工具来检索。如果传输证书由证书管理器签名,则通过 Retrieval 选项卡中的证书管理器终端实体页面提供证书副本。或者,使用 pki ultility 下载传输证书:
# pki cert-find --name "KRA Transport certificate's subject common name" # pki cert-show serial_number --output transport.pem
- 将传输证书添加到 CA 的
CS.cfg
文件中。ca.connector.KRA.enable=true ca.connector.KRA.host=server.example.com ca.connector.KRA.local=false ca.connector.KRA.nickName=subsystemCert cert-pki-ca ca.connector.KRA.port=8443 ca.connector.KRA.timeout=30 ca.connector.KRA.transportCert=MIIDbDCCAlSgAwIBAgIBDDANBgkqhkiG9w0BAQUFADA6MRgwFgYDVQQKEw9Eb21haW4gc28gbmFtZWQxHjAcBgNVBAMTFUNlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0wNjExMTQxODI2NDdaFw0wODEwMTQxNzQwNThaMD4xGDAWBgNVBAoTD0RvbWFpbiBzbyBuYW1lZDEiMCAGA1UEAxMZRFJNIFRyYW5zcG9ydCBDZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKnMGB3WkznueouwZjrWLFZBLpKt6TimNKV9iz5s0zrGUlpdt81/BTsU5A2sRUwNfoZSMs/d5KLuXOHPyGtmC6yVvaY719hr9EGYuv0Sw6jb3WnEKHpjbUO/vhFwTufJHWKXFN3V4pMbHTkqW/x5fu/3QyyUre/5IhG0fcEmfvYxIyvZUJx+aQBW437ATD99Kuh+I+FuYdW+SqYHznHY8BqOdJwJ1JiJMNceXYAuAdk+9t70RztfAhBmkK0OOP0vH5BZ7RCwE3Y/6ycUdSyPZGGc76a0HrKOz+lwVFulFStiuZIaG1pv0NNivzcj0hEYq6AfJ3hgxcC1h87LmCxgRWUCAwEAAaN5MHcwHwYDVR0jBBgwFoAURShCYtSg+Oh4rrgmLFB/Fg7X3qcwRAYIKwYBBQUHAQEEODA2MDQGCCsGAQUFBzABhihodHRwOi8vY2x5ZGUucmR1LnJlZGhhdC5jb206OTE4MC9jYS9vY3NwMA4GA1UdDwEB/wQEAwIE8DANBgkqhkiG9w0BAQUFAAOCAQEAFYz5ibujdIXgnJCbHSPWdKG0T+FmR67YqiOtoNlGyIgJ42fi5lsDPfCbIAe3YFqmF3wU472h8LDLGyBjy9RJxBj+aCizwHkuoH26KmPGntIayqWDH/UGsIL0mvTSOeLqI3KM0IuH7bxGXjlION83xWbxumW/kVLbT9RCbL4216tqq5jsjfOHNNvUdFhWyYdfEOjpp/UQZOhOM1d8GFiw8N8ClWBGc3mdlADQp6tviodXueluZ7UxJLNx3HXKFYLleewwIFhC82zqeQ1PbxQDL8QLjzca+IUzq6Cd/t7OAgvv3YmpXgNR0/xoWQGdM1/YwHxtcAcVlskXJw5ZR0Y2zA== ca.connector.KRA.uri=/kra/agent/kra/connector
- 然后,编辑注册表,并在 keyTransportCert 方法中添加或替换传输证书值。
vim /var/lib/pki/pki-tomcat/ca/webapps/ca/ee/ca/ProfileSelect.template var keyTransportCert = MIIDbDCCAlSgAwIBAgIBDDANBgkqhkiG9w0BAQUFADA6MRgwFgYDVQQKEw9Eb21haW4gc28gbmFtZWQxHjAcBgNVBAMTFUNlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0wNjExMTQxODI2NDdaFw0wODEwMTQxNzQwNThaMD4xGDAWBgNVBAoTD0RvbWFpbiBzbyBuYW1lZDEiMCAGA1UEAxMZRFJNIFRyYW5zcG9ydCBDZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKnMGB3WkznueouwZjrWLFZBLpKt6TimNKV9iz5s0zrGUlpdt81/BTsU5A2sRUwNfoZSMs/d5KLuXOHPyGtmC6yVvaY719hr9EGYuv0Sw6jb3WnEKHpjbUO/vhFwTufJHWKXFN3V4pMbHTkqW/x5fu/3QyyUre/5IhG0fcEmfvYxIyvZUJx+aQBW437ATD99Kuh+I+FuYdW+SqYHznHY8BqOdJwJ1JiJMNceXYAuAdk+9t70RztfAhBmkK0OOP0vH5BZ7RCwE3Y/6ycUdSyPZGGc76a0HrKOz+lwVFulFStiuZIaG1pv0NNivzcj0hEYq6AfJ3hgxcC1h87LmCxgRWUCAwEAAaN5MHcwHwYDVR0jBBgwFoAURShCYtSg+Oh4rrgmLFB/Fg7X3qcwRAYIKwYBBQUHAQEEODA2MDQGCCsGAQUFBzABhihodHRwOi8vY2x5ZGUucmR1LnJlZGhhdC5jb206OTE4MC9jYS9vY3NwMA4GA1UdDwEB/wQEAwIE8DANBgkqhkiG9w0BAQUFAAOCAQEAFYz5ibujdIXgnJCbHSPWdKG0T+FmR67YqiOtoNlGyIgJ42fi5lsDPfCbIAe3YFqmF3wU472h8LDLGyBjy9RJxBj+aCizwHkuoH26KmPGntIayqWDH/UGsIL0mvTSOeLqI3KM0IuH7bxGXjlION83xWbxumW/kVLbT9RCbL4216tqq5jsjfOHNNvUdFhWyYdfEOjpp/UQZOhOM1d8GFiw8N8ClWBGc3mdlADQp6tviodXueluZ7UxJLNx3HXKFYLleewwIFhC82zqeQ1PbxQDL8QLjzca+IUzq6Cd/t7OAgvv3YmpXgNR0/xoWQGdM1/YwHxtcAcVlskXJw5ZR0Y2zA==;
17.2. 加密 Of KRA 操作
- archival:
- 在证书请求消息格式(CRMF)软件包中归档的密钥加密,以传输到 KRA。
- 加密 KRA LDAP 数据库中存储的密钥。
- 恢复:
- 用户提供的会话密钥加密,以传输到密钥。
- 使用用户提供的会话密钥或创建 PKCSbusybox 软件包来解密 secret 和重新加密。
- generation:
- 为存储加密生成的密钥。
17.2.1. 客户端如何管理密钥操作加密
17.2.2. 在 KRA 中配置加密算法
/var/lib/pki/pki-instance_name/conf/kra/CS.cfg
文件中定义与密钥操作加密相关的配置参数组。我们推荐以下一组参数(请参阅上面的备注用于其他选项):
kra.allowEncDecrypt.archive=false kra.allowEncDecrypt.recovery=false kra.storageUnit.wrapping.1.sessionKeyLength=256 kra.storageUnit.wrapping.1.sessionKeyWrapAlgorithm=RSA kra.storageUnit.wrapping.1.payloadEncryptionPadding=PKCS5Padding kra.storageUnit.wrapping.1.sessionKeyKeyGenAlgorithm=AES kra.storageUnit.wrapping.1.payloadEncryptionAlgorithm=AES kra.storageUnit.wrapping.1.payloadEncryptionMode=CBC kra.storageUnit.wrapping.1.payloadWrapAlgorithm=AES KeyWrap kra.storageUnit.wrapping.1.sessionKeyType=AES kra.storageUnit.wrapping.1.payloadWrapIVLen=16 kra.storageUnit.wrapping.choice=1
/var/lib/pki/pki-instance_name/conf/kra/CS.cfg
文件中的 kra.storageUnit.wrapping.choice
参数中设置。
17.2.2.1. 参数及其值的说明
- payloadWrapAlgorithm 决定使用的嵌套算法。唯一一个有效的选择是 AES KeyWrap。
- 当 payloadWrapAlgorithm=AES/CBC/PKCS5Padding 时,必须指定 payloadWrapIVLength=16 来告知 PKI 我们需要生成一个 IV (因为 CBC 需要 1)。
- payloadEncryptionAlgorithm 决定使用的加密算法。唯一有效的选择是 AES。
- payloadEncryptionMode 决定块链模式。唯一有效的选择是 CBC。
- payloadEncryptionPadding 决定 padding 方案。唯一有效的选择是 PKCS5Padding。
- sessionKeyType 是要生成的密钥类型。唯一有效的选择是 AES。
- sessionKeyLength 是生成的会话键的长度。有效选择为 128 和 256,用于分别使用 128 位 AES 或 256 位 AES 加密有效负载。
- sessionKeyWrapAlgorithm 是 KRA 存储证书的密钥类型。本指南中唯一有效的选择是 RSA。
17.2.2.2. 在 KRA 中使用 AES 加密时解决 HSM 的限制
为密钥封装选择不同的算法
AES-128-CBC
作为密钥嵌套算法:
- 在
/var/lib/pki/pki-instance_name/conf/kra/CS.cfg
文件中设置以下参数:kra.storageUnit.wrapping.1.payloadWrapAlgorithm=AES KeyWrap kra.storageUnit.wrapping.1.payloadWrapIVLen=16 kra.storageUnit.wrapping.1.sessionKeyLength=128
- 重启实例:
# systemctl restart pki-tomcatd@instance_name.service
或(如果使用nuxwdog watchdog
)# systemctl restart pki-tomcatd-nuxwdog@instance_name.service
如果 KRA 在不同的实例中运行,则 CA 会重启这两个实例。
kra.storageUnit.wrapping.1.payloadWrap{Algorithm,IVLen}
和 kra.storageUnit.wrapping.1.payloadEncryption{Algorithm,Mode,Padding}
参数。
将 KRA 设置为加密模式
- 将
/var/lib/pki/pki-instance_name/conf/kra/CS.cfg
文件中的以下参数设置为 true :kra.allowEncDecrypt.archive=true kra.allowEncDecrypt.recovery=true
- 重启服务:
# systemctl restart pki-tomcatd@instance_name.service
或(如果使用nuxwdog watchdog
)# systemctl restart pki-tomcatd-nuxwdog@instance_name.service
如果 KRA 在与 CA 不同的实例中运行,您需要重启这两个实例。
kra.storageUnit.wrapping.1.payloadEncryption{Algorithm,Mode,Padding}
和 kra.storageUnit.wrapping.1.payloadWrap{Algorithm,IVLen}
参数。
17.3. 设置 Agent-Approved Key Recovery Schemes
17.3.1. 在命令行中配置代理批准密钥恢复
- 设置恢复管理器的数量,需要批准恢复。
- 设置这些用户必须属于的组。
CS.cfg
配置文件中设置。
- 在编辑配置文件前停止服务器。
# systemctl stop pki-tomcatd@instance_name.service
或(如果使用nuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- 打开 KRA 的
CS.cfg
文件。# vim /var/lib/pki/pki-tomcat/kra/conf/CS.cfg
- 编辑两个恢复方案参数。
kra.noOfRequiredRecoveryAgents=3 kra.recoveryAgentGroup=Key Recovery Authority Agents
- 重新启动服务器。
# systemctl start pki-tomcatd@instance_name.service
或者# systemctl start pki-tomcatd-nuxwdog@instance_name.service
17.3.2. 自定义密钥恢复表单
/var/lib/pki/pki-tomcat/kra/webapps/kra/agent/kra/
目录中,名为 confirmRecover.html
。
17.3.3. 在新的私有存储密钥中重新打包密钥
17.3.3.1. 关于 KRATool
例 17.1. 重新包装密钥
KRATool -kratool_config_file "/usr/share/pki/java-tools/KRATool.cfg" -source_ldif_file "/tmp/files/originalKRA.ldif" -target_ldif_file "/tmp/files/newKRA.ldif" -log_file "/tmp/kratool.log" -source_pki_security_database_path "/tmp/files/" -source_storage_token_name "Internal Key Storage Token" -source_storage_certificate_nickname "storageCert cert-pki-tomcat KRA" -target_storage_certificate_file "/tmp/files/omega.cert"
例 17.2. 重新编号密钥
KRATool -kratool_config_file "/usr/share/pki/java-tools/KRATool.cfg" -source_ldif_file "/tmp/files/originalKRA.ldif" -target_ldif_file "/tmp/files/newKRA.ldif" -log_file "/tmp/kratool.log" -append_id_offset 100000000000 -source_kra_naming_context "pki-tomcat-KRA" -target_kra_naming_context "pki-tomcat-2-KRA" -process_requests_and_key_records_only
KRATool (1)
手册页中详细讨论。
17.3.3.2. 将来自一个或多个 KRA 的 wrapping 和 Merging 键重新嵌套到单个 KRA 中
pki-tomcat
),并将它们存储在另一个证书系统 KRA 中(例如,targetkra.example.com上的 pki-tomcat-
2)。这不是唯一的用例;工具可以和源和目标在同一实例上运行,以重新包装现有密钥,或者只是将密钥从多个 KRA 实例复制到单个实例中,而无需全部重新包装密钥。
pki-tomcat-2
KRA 中的存储密钥大小和类型必须设置为 2048 位和 RSA。
- 登录到 targetkra.example.com。
- 停止
pki-tomcat-2
KRA。[root@targetkra ~]# systemctl stop pki-tomcatd@pki-tomcat-2.service
- 创建一个数据目录,以存储来自
pki-tomcat
KRA 实例导入的关键数据,它位于 sourcekra.example.com 上。[root@targetkra ~]# mkdir -p /export/pki
- 将
pki-tomcat-2
KRA 的公共存储证书导出到新数据目录中的平面文件。[root@targetkra ~]# certutil -L -d /var/lib/pki/pki-tomcat-2/alias -n "storageCert cert-pki-tomcat-2 KRA" -a > /export/pki/targetKRA.cert
- 停止
pki-tomcat-2
KRA 的 Directory 服务器实例(如果位于同一机器上)。[root@newkra ~]# systemctl stop dirsrv.target
- 导出
pki-tomcat-2
KRA 的配置信息。root@targetkra ~]# grep nsslapd-localuser /etc/dirsrv/slapd-instanceName/dse.ldif nsslapd-localuser: dirsrv [root@targetkra ~]# chown dirsrv:dirsrv /export/pki [root@targetkra ~]# /usr/lib64/dirsrv/slapd-instanceName/db2ldif -n pki-tomcat-2-KRA -a /export/pki/pki-tomcat-2.ldif
重要确保 LDIF 文件末尾包含一个空白行。 - 登录 sourcekra.example.com。
- 停止
pki-tomcat
KRA。[root@sourcekra ~]# systemctl stop pki-tomcatd@pki-tomcat.service
- 创建一个数据目录,以存储将导出到 targetkra.example.com 上的
pki-tomcat-2
KRA 实例的密钥数据。[root@sourcekra ~]# mkdir -p /export/pki
- 停止
pki-tomcat
KRA 的 Directory 服务器实例(如果位于同一机器上)。[root@sourcekra ~]# systemctl stop dirsrv.target
- 导出
pki-tomcat
KRA 的配置信息。[root@sourcekra ~]# grep nsslapd-localuser /etc/dirsrv/slapd-instanceName/dse.ldif nsslapd-localuser: dirsrv [root@sourcekra ~]# chown dirsrv:dirsrv /export/pki [root@sourcekra ~]# /usr/lib64/dirsrv/slapd-instanceName/db2ldif -n pki-tomcat-KRA -a /export/pki/pki-tomcat.ldif
重要确保 LDIF 文件末尾包含一个空白行。 - 将
pki-tomcat
KRA NSS 安全数据库复制到这个目录中。[root@sourcekra ~]# cp -p /var/lib/pki/pki-tomcat/alias/cert9.db /export/pki [root@sourcekra ~]# cp -p /var/lib/pki/pki-tomcat/alias/key4.db /export/pki [root@sourcekra ~]# cp -p /var/lib/pki/pki-tomcat/alias/pkcs11.txt /export/pki
- 使用
pki-tomcat-2
KRA 机器中的公钥将该文件复制到此计算机。例如:[root@sourcekra ~]# cd /export/pki [root@sourcekra ~]# sftp root@targetkra.example.com sftp> cd /export/pki sftp> get targetKRA.cert sftp> quit
- 如有必要,编辑默认的
KRATool.cfg
文件以用于该工具。默认 文件也可以在不更改的情况下使用。 - 运行 KRATool; 所有这些参数都应该在一行中:
[root@sourcekra ~]# KRATool -kratool_config_file "/usr/share/pki/java-tools/KRATool.cfg" -source_ldif_file /export/pki/pki-tomcat.ldif \ -target_ldif_file /export/pki/source2targetKRA.ldif \ -log_file /export/pki/kratool.log \ -source_pki_security_database_path /export/pki \ -source_storage_token_name 'Internal Key Storage Token' \ -source_storage_certificate_nickname 'storageCert cert-pki-tomcat KRA' \ -target_storage_certificate_file /export/pki/targetKRA.cert -append_id_offset 100000000000 \ -source_kra_naming_context "pki-tomcat-KRA" \ -target_kra_naming_context "pki-tomcat-2-KRA" \ -process_requests_and_key_records_only
注意命令可能会提示输入存储在pki-tomcat
KRA NSS 安全数据库中的令牌的密码。完成后,命令会创建-target_ldif_file
参数source2targetKRA.ldif
中指定的文件。 - 将此 LDIF 文件复制到
pki-tomcat-2
KRA 机器。例如:[root@sourcekra ~]# scp /export/pki/source2targetKRA.ldif root@targetkra.example.com:/export/pki
重要确保 LDIF 文件末尾包含一个空白行。 - 如果多个 KRA 实例被合并,则其数据可以合并到单个导入操作中。只需为每个 KRA 执行相同的步骤,这些步骤将被合并。重要确保为
-target_ldif_file
参数指定唯一值以创建单独的 LDIF 文件,并指定 unique-append_id_offset
值,以便在 LDIF 文件串联时没有冲突。 - 在
pki-tomcat-2
KRA 机器上,通过串联pki-tomcat-2
KRA 配置 LDIF 文件以及其它 KRA 实例的每个导出的 LDIF 文件来与其他密钥数据导入 LDIF 文件。例如:[root@targetkra ~]# cd /export/pki [root@targetkra ~]# cat pki-tomcat-2.ldif source2targetKRA.ldif > combined.ldif
- 将此组合的 LDIF 文件导入到
pki-tomcat-2
KRA 实例的目录服务器数据库中。[root@targetkra ~]# /usr/lib64/dirsrv/slapd-instanceName/ldif2db -n pki-tomcat-2-KRA -i /export/pki/combined.ldif
- 启动
pki-tomcat-2
KRA 的 Directory 服务器实例。[root@targetkra ~]# systemctl start dirsrv.target
- 启动
pki-tomcat-2
KRA。[root@targetkra ~]# systemctl start pki-tomcatd@pki-tomcat-2.service
17.3.4. 在关闭后更新 CA-KRA Connector 信息
第 18 章 配置日志
18.1. 证书系统日志设置
18.1.1. 已登录的服务
表 18.1. 服务日志
服务 | 描述 |
---|---|
ACL | 与访问控制列表相关的日志事件。 |
管理 | 记录与管理活动相关的事件,如控制台和实例之间的 HTTPS 通信。 |
All | 记录与所有服务相关的事件。 |
身份验证 | 使用身份验证模块记录与活动相关的事件。 |
证书颁发机构 | 记录与证书管理器相关的事件。 |
数据库 | 记录与内部数据库相关的活动事件。 |
HTTP |
记录与服务器的 HTTP 活动相关的事件。请注意,HTTP 事件实际上被记录到属于证书系统所包含的 Apache 服务器的错误日志中,以提供 HTTP 服务。
|
密钥恢复授权机构 | 日志记录与 KRA 相关的事件。 |
LDAP | 日志记录与 LDAP 目录相关的活动事件,用于发布证书和 CRL。 |
OCSP | 日志记录与 OCSP 状态相关的事件,如 OCSP 状态 GET 请求。 |
其他 | 记录与其他活动相关的事件,如命令行实用程序和其他进程。 |
请求队列 | 日志记录与请求队列活动相关的事件。 |
用户和组 | 日志记录与实例的用户和组相关的事件。 |
18.1.2. 日志级别(Message Categories)
0
到 10
表示,每个数字代表服务器要执行的日志记录级别。该级别设置如何详细记录。
表 18.2. Log Levels 和 Corresponding Log Messages
日志级别 | 消息类别 | 描述 |
---|---|---|
0 | 调试 | 这些消息包含调试信息。不建议常规使用这个级别,因为它会生成太多信息。 |
1 | informational (审计日志的默认选择) | 这些消息提供有关证书系统状态的常规信息,包括 证书系统初始化完成 等状态信息,以及操作 Request for 操作成功。 |
2 | 警告 | 这些消息只是警告,并不表示服务器正常操作中的任何失败。 |
3 | 失败;系统和错误日志的默认选择 | 这些消息表示阻止服务器正常运行的错误和失败,包括执行证书服务操作失败(用户身份验证失败 或证书 被撤销)和可能导致不良错误的意外情况(服务器无法通过来自客户端的同一频道向客户端发送请求)。 |
4 | 错误配置 | 这些消息表示服务器中的错误配置导致错误。 |
5 | 灾难性故障 | 这些消息表示因为错误,服务无法继续运行。 |
6 | 与安全相关的事件 | 这些消息标识了影响服务器安全性的发生。例如,带有撤销或未列出证书的用户尝试特权访问权限。 |
7 | 与 PDU 相关的事件(调试) | 这些消息包含 PDU 事件的调试信息。不建议常规使用这个级别,因为它会生成比通常有用的信息。 |
8 | 与 PDU 相关的事件 | 这些消息与在 PDU 上处理的事务和规则相关,如创建 MAC 令牌。 |
9 | 与 PDU 相关的事件 | 此日志级别为 PDU 上处理的事件提供详细的日志消息,如创建 MAC 令牌。 |
10 | 所有日志记录级别 | 这个日志级别启用了所有日志记录级别。 |
18.1.3. buffered 和 Unbuffered Logging
- 缓冲区已满。当缓冲区大小等于或大于 bufferSize 配置参数指定的值时,缓冲已满。此参数的默认值为 512 KB。
- 达到缓冲区的清除间隔。当最后一次缓冲区 flush 等于或大于 flushInterval 配置参数指定的值时,会达到 flush 间隔。此参数的默认值为 5 秒。
- 从控制台读取当前日志时。服务器在查询当前日志时检索最新的日志。
18.1.4. 日志文件轮转
- 已达到对应文件的大小限制。对应日志文件的大小等于或大于 maxFileSize 配置参数指定的值。此参数的默认值为 100 KB。
- 达到对应文件的年龄限制。对应的日志文件等于或早于 rolloverInterval 配置参数指定的时间间隔。此参数的默认值为 2592000 秒(每三十天)。
18.2. 操作系统( RHCS 的外部)日志设置
18.2.1. 启用操作系统级别的审计日志
auditd
日志记录框架提供了许多额外的审计功能。这些操作系统级别的审计日志补充功能由证书系统直接提供。在执行本节中的任何以下步骤前,请确保安装了 audit
软件包:
#
sudo yum install audit
yum
和 rpm
包含证书系统)的审计会自动执行,不需要额外的配置。
# auditctl -l
18.2.1.1. 审计证书系统审计日志删除
/etc/audit/rules.d/rhcs-audit-log-deletion.rules
:
-a always,exit -F arch=b32 -S unlink -F dir=/var/log/pki -F key=rhcs_audit_deletion -a always,exit -F arch=b32 -S rename -F dir=/var/log/pki -F key=rhcs_audit_deletion -a always,exit -F arch=b32 -S rmdir -F dir=/var/log/pki -F key=rhcs_audit_deletion -a always,exit -F arch=b32 -S unlinkat -F dir=/var/log/pki -F key=rhcs_audit_deletion -a always,exit -F arch=b32 -S renameat -F dir=/var/log/pki -F key=rhcs_audit_deletion -a always,exit -F arch=b64 -S unlink -F dir=/var/log/pki -F key=rhcs_audit_deletion -a always,exit -F arch=b64 -S rename -F dir=/var/log/pki -F key=rhcs_audit_deletion -a always,exit -F arch=b64 -S rmdir -F dir=/var/log/pki -F key=rhcs_audit_deletion -a always,exit -F arch=b64 -S unlinkat -F dir=/var/log/pki -F key=rhcs_audit_deletion -a always,exit -F arch=b64 -S renameat -F dir=/var/log/pki -F key=rhcs_audit_deletion
auditd
:
#
service auditd restart
18.2.1.2. 审计未授权证书系统使用 Secret 密钥
/etc/audit/rules.d/rhcs-audit-nssdb-access.rules
文件:
-w /etc/pki/<instance name>/alias -p warx -k rhcs_audit_nssdb
/etc/pki/<instance name>/alias 中的每个文件('<file&
gt;'),添加到 /etc/audit/rules.d/rhcs-audit-nssdb-access.rules
中,行:
-w /etc/pki/<instance name>/alias/<file> -p warx -k rhcs_audit_nssdb
pki-ca121318ec
和 cert9.db
,key4.db
,NHSM-CONN-XCcert9.db
,NHSM-CONN-XCkey4.db
, 和 pkcs11.txt
是文件,则配置文件将包含:
-w /etc/pki/pki-ca121318ec/alias -p warx -k rhcs_audit_nssdb -w /etc/pki/pki-ca121318ec/alias/cert9.db -p warx -k rhcs_audit_nssdb -w /etc/pki/pki-ca121318ec/alias/key4.db -p warx -k rhcs_audit_nssdb -w /etc/pki/pki-ca121318ec/alias/NHSM-CONN-XCcert9.db -p warx -k rhcs_audit_nssdb -w /etc/pki/pki-ca121318ec/alias/NHSM-CONN-XCkey4.db -p warx -k rhcs_audit_nssdb -w /etc/pki/pki-ca121318ec/alias/pkcs11.txt -p warx -k rhcs_audit_nssdb
auditd
:
#
service auditd restart
18.2.1.3. 审计时间更改事件
/etc/audit/rules.d/rhcs-audit-rhcs_audit_time_change.rules
文件:
-a always,exit -F arch=b32 -S adjtimex,settimeofday,stime -F key=rhcs_audit_time_change -a always,exit -F arch=b64 -S adjtimex,settimeofday -F key=rhcs_audit_time_change -a always,exit -F arch=b32 -S clock_settime -F a0=0x0 -F key=rhcs_audit_time_change -a always,exit -F arch=b64 -S clock_settime -F a0=0x0 -F key=rhcs_audit_time_change -a always,exit -F arch=b32 -S clock_adjtime -F key=rhcs_audit_time_change -a always,exit -F arch=b64 -S clock_adjtime -F key=rhcs_audit_time_change -w /etc/localtime -p wa -k rhcs_audit_time_change
auditd
:
#
service auditd restart
18.2.1.4. 审计对证书系统配置的访问
/etc/audit/rules.d/rhcs-audit-config-access.rules
文件:
-w /etc/pki/instance_name/server.xml -p wax -k rhcs_audit_config
/etc/pki/instance_name/
目录中为每个子系统添加以下内容:
-w /etc/pki/instance_name/subsystem/CS.cfg -p wax -k rhcs_audit_config
例 18.1. RHCS-audit-config-access.rules 配置文件
/etc/audit/rules.d/rhcs-audit-config-access.rules
文件将包含:
-w /etc/pki/pki-ca121318ec/server.xml -p wax -k rhcs_audit_config -w /etc/pki/pki-ca121318ec/ca/CS.cfg -p wax -k rhcs_audit_config
18.3. 在 CS.cfg 文件中配置日志
CS.cfg
来配置日志记录。
- 停止子系统实例。
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- 打开
/var/lib/pki/instance_name/subsystem_type/conf
目录中的CS.cfg
文件。 - 创建新日志。
- 要配置日志实例,请修改与该日志关联的参数。这些参数以 log.instance 开头。
表 18.3. 日志条目参数
参数 描述 type 日志文件的类型。系统 创建错误和系统日志; 事务 记录审计日志。 enable 设置日志是否活跃。仅启用的日志实际上记录事件。 level 在文本字段中设置日志级别。必须在字段中手动输入该级别;没有选择菜单。日志级别设置是一个数字值,如 第 18.1.2 节 “日志级别(Message Categories)” 中列出的。 fileName 日志文件的完整路径,包括文件名。子系统用户应具有文件的读取/写入权限。 bufferSize 日志的缓冲大小(KB)。当缓冲区达到这个大小后,缓冲区的内容将清除并复制到日志文件中。默认大小为 512 KB。有关缓冲的日志的详情,请参考 第 18.1.3 节 “buffered 和 Unbuffered Logging”。 flushInterval 缓冲区内容被清除并添加到日志文件中的时间(以秒为单位)。默认间隔为 5 秒。 maxFileSize 日志文件的大小(KB)在轮转前可能会成为它。达到这个大小后,文件会被复制到轮转的文件中,日志文件将启动新文件。有关日志文件轮转的详情,请参考 第 18.1.4 节 “日志文件轮转”。默认大小为 2000 KB。 rolloverInterval 服务器轮转活跃日志文件的频率。可用的选项有每小时、每天、每周、每月和每年。默认选择是 monthly。如需更多信息,请参阅 第 18.1.4 节 “日志文件轮转”。 logSigning[a] 启用签名的日志记录。启用此参数后,为 signedAuditCertNickname 参数提供一个值。这个选项意味着只能由审核员查看日志。该值可以是 true 或 false。 signedAuditCertNickname[a] 用于为审计日志签名的证书的别名。此证书的私钥必须可供子系统访问,才能为日志签名。 Events[a] 指定将哪些事件记录到审计日志。日志事件用逗号分开,没有空格。 [a] 这只适用于审计日志。 - 保存该文件。
- 启动子系统实例。
# systemctl start pki-tomcatd@instance_name.service
或(如果使用nuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@instance_name.service
18.3.1. 启用并配置签名的审计日志
18.3.1.1. 启用签名的审计日志记录
# pki-server subsystem-audit-config-show Enabled: True Log File: audit_signing_log_file Buffer Size (bytes): 512 Flush Interval (seconds): 5 Max File Size (bytes): 2000 Rollover Interval (seconds): 2592000 Expiration Time (seconds): 0 Log Signing: False Signing Certificate: audit_signing_certificate
- 使用
pki-server
实用程序将--logSigning
选项设置为 true :# pki-server subsystem-audit-config-mod --logSigning True ... Log Signing: True ...
- 重启实例:
# systemctl restart pki-tomcatd@instance_name.service
或(如果使用nuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@instance_name.service
18.3.1.2. 配置审计事件
18.3.1.2.1. 启用和禁用审计事件
18.3.1.2.2. 过滤审计事件
表 18.4. 支持的审计事件过滤器
类型 | 格式 | 示例 |
---|---|---|
存在 | (attribute=*) | (ReqID=*) |
ç›¸ç‰ | (attribute=value) | (outcome=Failure) |
子字符串 | (attribute=initial*any*...*any*final) | (SubjectID=*admin*) |
AND 操作 | (&(filter_1)(filter_2)...(filter_n)) | (& (SubjectID=admin) (Outcome=Failure)) |
OR 操作 | (|(filter_1)(filter_2)...(filter_n)) | (|(SubjectID=admin)(Outcome=Failure)) |
NOT 操作 | (! (filter) | (!(SubjectID=admin)) |
例 18.2. 过滤审计事件
$ pki-server ca-audit-event-show PROFILE_CERT_REQUEST Event Name: PROFILE_CERT_REQUEST Enabled: True Filter: None $ pki-server ca-audit-event-show CERT_REQUEST_PROCESSED Event Name: CERT_REQUEST_PROCESSED Enabled: True Filter: None
InfoName
字段设置为 rejectReason 或 cancelReason 的证书请求:
- 执行以下命令:
$ pki-server ca-audit-event-update PROFILE_CERT_REQUEST --filter "(Outcome=Failure)" ... Filter: (Outcome=Failure) $ pki-server ca-audit-event-update CERT_REQUEST_PROCESSED --filter "(|(InfoName=rejectReason)(InfoName=cancelReason))" ... Filter: (|(InfoName=rejectReason)(InfoName=cancelReason))
- 重启证书系统:
# systemctl restart pki-tomcatd@instance_name.service
或(如果使用nuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@instance_name.service
18.3.2. 配置自测试
CS.cfg
文件中注册并配置 self-tests 功能和单独的 self-tests。如果启用了自助测试,则会根据需要列出自助测试或启动,并且 为空或设置为 critical。
CS.cfg
文件中的相应设置来更改自测试的关键性。
18.3.2.1. 启动的默认自测试
- CAPresence - 用于验证 CA 子系统是否存在。
- CAValidity - 用于确定 CA 子系统当前是否有效且未过期。这包括检查 CA 证书的过期时间。
- SystemCertsVerification - 用于确定系统证书当前有效且尚未过期或被撤销。对于 CA 子系统,只有每个证书的有效性测试才会进行,保留证书验证测试,这可能会导致 OCSP 请求。此行为可使用以下配置参数覆盖:
selftests.plugin.SystemCertsVerification.FullCAandOCSPVerify=true
默认情况下,如果根本不存在,则此配置参数被视为 false。
- KRAPresence - 用于验证 KRA 子系统是否存在。
- KRAValidity - 用于确定 KRA 子系统当前是否有效且未过期。这包括检查 KRA 证书的过期时间。
- SystemCertsVerification - 用于确定系统证书当前有效且尚未过期或被撤销。
- OCSPPresence - 用于验证 OCSP 子系统是否存在。
- OCSPValidity - 用于确定 OCSP 子系统当前是否有效且未过期。这包括检查 OCSP 证书的过期。
- SystemCertsVerification - 用于确定系统证书当前有效且尚未过期或被撤销。对于 OCSP 子系统,只有每个证书的有效性测试才会进行,省略证书验证测试,这可能会导致 OCSP 请求。此行为可使用以下配置参数覆盖:
selftests.plugin.SystemCertsVerification.FullCAandOCSPVerify=true
默认情况下,如果根本不存在,则此配置参数被视为 false。
- TKSKnownSessionKey - 用于验证 TKS 子系统的已知会话密钥。这会验证 TKS 能够代表 TPS 和支持的智能卡正确创建密钥。
- SystemCertsVerification - 用于确定系统证书当前有效且尚未过期或被撤销。
- TPSPresence - 用于验证 TPS 子系统是否存在。
- TPSValidity - 用于确定 TPS 子系统当前是否有效且未过期。这包括检查 TPS 证书的过期时间。
- SystemCertsVerification - 用于确定系统证书当前有效且尚未过期或被撤销。
18.3.2.2. 修改自测试配置
- 停止子系统实例。
- 打开位于实例的
conf/
目录中的CS.cfg
文件。 - 要编辑 self-test 日志的设置,请编辑以 selftests.container.logger 开头的条目。除非另有指定,否则这些参数不会影响合规性。这些参数包括以下参数:
- bufferSize - 指定日志的缓冲大小(KB)。默认大小为 512 KB。当缓冲区达到这个大小后,缓冲区的内容将清除并复制到日志文件中。
- enable - 指定要启用的 true。仅启用的日志实际上记录事件。必须启用 这个值才能合规。
- filename - 向写入消息的文件指定完整路径,包括文件名。服务器必须具有文件的读/写权限。默认情况下,self-test 日志文件为
/var/log/pki-name/logs/selftest.log
- flushInterval - 指定间隔(以秒为单位)以将缓冲区刷新到文件。默认间隔为 5 秒。flushInterval 是缓冲区内容被清除并添加到日志文件中的时间长度。
- level - 默认选择为 1;此日志没有为 1 以外的任何级别设置。
- maxFileSize - 以 KB 为单位指定错误日志的文件大小。默认大小为 100 KB。maxFileSize 决定日志文件轮转前的大小。达到此大小后,文件将复制到轮转的文件,并启动新的日志文件。
- rolloverInterval - 指定服务器轮转活跃错误日志文件的频率。选择是每小时、每天、每周、每月和年份。默认选择是 monthly。
- type - 设置为 transaction; 不要更改它。
- 要编辑运行自测试的顺序,请通过列出任何 self-test 作为用逗号分开的以下参数值来指定顺序。要标记 self-test critical,请将冒号和单词 critical 添加到列表中自助测试的名称。要禁用 self-test,请将其移除为 selftests.container.order.onDemand 或 selftests.container.order.startup 参数的值。
- 保存该文件。
- 启动子系统。
18.3.3. Debug Log 的额外配置
18.3.3.1. 启用和禁用调试日志记录
- 编辑
/var/lib/pki/instance_name/subsystem_type/conf/CS.cfg
文件并设置debug.enabled
参数:- 要禁用调试日志记录,请设置:
debug.enabled=false
注意调试日志 不是 审计日志的一部分。当试图在证书系统或失败时调试特定故障时,调试日志非常有用。默认情况下启用调试日志。如果不需要,管理员可以安全地禁用调试日志记录来关闭详细程度。 - 要启用调试日志记录,请设置:
debug.enabled=true
- 重启证书系统实例:
# systemctl restart pki-tomcatd@instance-name.service
或(如果使用nuxwdog watchdog
)# systemctl restart pki-tomcatd-nuxwdog@instance-name.service
18.3.3.2. 设置调试日志文件的轮转
logrotate
等外部实用程序来轮转日志。
例 18.3. 使用 logrotate
轮转调试日志
/etc/logrotate.d/rhcs_debug
:
/var/log/pki/instance_name/subsystem/debug { copytruncate weekly rotate 5 notifempty missingok }
/var/log/pki/instance_name/ca/debug /var/log/pki/instance_name/kra/debug { ... }
logrotate
和示例中使用的参数的详情,请查看 logrotate(8) man page。
18.4. 审计保留
- 扩展审计保留:为证书的生命周期保留所需的维护的审计数据(来自其过期或撤销日期)。在证书系统中,它们出现在以下区域:
- 签名的审计日志 :在附录 E 中定义的所有事件。Red Hat Certificate System Administration Guide 的审计事件。
- 在 CA 内部 LDAP 服务器中,CA 接收的证书请求记录和请求被批准的证书记录。
- 普通的审计保留:通常只保留的审计数据来支持正常操作。这包括不在 扩展的审计保留类别下的所有事件。
18.4.1. 审计数据的位置
18.4.1.1. 审计日志的位置
/var/log/pki-name/logs/signedAudit/
目录中。例如,CA 的审计日志存储在 /var/lib/pki/instance_name/ca/logs/signedAudit/
目录中。普通用户无法访问此目录中的文件。请参阅
18.4.1.2. 证书请求和证书记录的位置
pkispawn
工具创建 CA 时,在以下参数中指定 CA 的内部目录服务器:
pki_ds_hostname
pki_ds_ldap_port
pki_ds_database
pki_ds_base_dn
- 在 https://host_name 下登录 CA EE 门户:端口/ca/ee/ca/。
- 单击 Check Request Status。
- 输入 Request Identifier。
- 单击 Issued Certificate。
- 搜索 Validity。
- 在 https://host_name 下登录 CA EE 门户:端口/ca/ee/ca/。
- 输入序列号范围。如果您搜索了一个特定记录,请在最低和最高的序列号字段中输入记录的序列号。
- 点搜索结果。
- 搜索 Validity。
第 19 章 创建角色用户
- 在操作系统中创建证书系统管理用户
- 在证书系统中创建 PKI 角色
19.1. 在操作系统上创建 PKI 管理用户
- 在操作系统上创建
pkiadmin
组。# groupadd -r pkiadmin
- 将
pkiuser
添加到pkiadmin
组中:# usermod -a -G pkiadmin pkiuser
- 在操作系统上创建用户。例如,要创建
jsmith
帐户:# useradd -g pkiadmin -d /home/jsmith -s /bin/bash -c "Red Hat Certificate System Administrator John Smith" -m jsmith
详情请查看 useradd(8) man page。 - 将用户
jsmith
添加到pkiadmin
组中:# usermod -a -G pkiadmin jsmith
详情请查看 usermod(8) man page。如果您使用 nCipher 硬件安全模块(HSM),请将管理 HSM 设备的用户添加到nfast
组中:# usermod -a -G nfast pkiuser # usermod -a -G nfast jsmith
- 添加正确的
sudo
规则,以允许pkiadmin
组到证书系统和其他系统服务。为了简单起见,可以配置证书系统和目录服务器进程,以便 PKI 管理员(而不是只有 root)可以启动和停止服务。设置子系统时推荐的选项是使用pkiadmin
系统组。(详细信息为 第 6.9 节 “证书系统用户和组”)。然后,所有将成为证书系统管理员的操作系统用户都会被添加到此组中。如果存在这个pkiadmin
系统组,则可以授予 sudo 访问权限来执行某些任务。- 编辑
/etc/sudoers
文件;在 Red Hat Enterprise Linux 中,可以使用 visudo 命令完成:# visudo
- 根据机器上安装的内容,为目录服务器、管理服务器、PKI 管理工具和每个 PKI 子系统实例添加一行,为 pkiadmin 组授予 sudo 权限:
# For Directory Server services %pkiadmin ALL = PASSWD: /usr/bin/systemctl * dirsrv.target %pkiadmin ALL = PASSWD: /usr/bin/systemctl * dirsrv-admin.service # For PKI instance management %pkiadmin ALL = PASSWD: /usr/sbin/pkispawn * %pkiadmin ALL = PASSWD: /usr/sbin/pkidestroy * # For PKI instance services %pkiadmin ALL = PASSWD: /usr/bin/systemctl * pki-tomcatd@instance_name.service
重要确保为计算机上的每个证书系统、目录服务器和管理服务器设置 sudo 权限,并且仅对 计算机上的这些实例设置 sudo 权限。机器上可能有多个相同子系统类型的实例,或者没有子系统类型的实例。它取决于部署。 - 将以下文件中的组设置为
pkiadmin
:# chgrp pkiadmin /etc/pki/instance_name/server.xml # chgrp -R pkiadmin /etc/pki/instance_name/alias # chgrp pkiadmin /etc/pki/instance_name/subsystem/CS.cfg # chgrp pkiadmin /var/log/pki/instance_name/subsystem/debug
19.2. 在证书系统中创建 PKI 角色用户
第 20 章 删除 Bootstrap 用户
20.1. 禁用多角色支持
multirole
属性来完成。
- 停止服务器:
# systemctl stop pki-tomcatd@instance_name.service
或(如果使用nuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- 打开
CS.cfg
文件:vim /var/lib/pki/instance_name/ca/conf/CS.cfg
- 将
multiroles.enable
参数值从 true 更改为 false。 - 在证书系统中添加或编辑受多角色设置影响的默认角色列表。如果禁用了多角色,并且用户属于
multiroles.false.groupEnforceList
参数中列出的 角色之一,则无法将该用户添加到列表中任何其他角色的任何组中。multiroles.false.groupEnforceList
=Administrators,Auditors,Trusted Managers,Certificate Manager Agents,Registration Manager Agents,Key Recovery Authority Agents,Online Certificate Status Manager Agents,Token Key Service Manager Agents,Enterprise CA Administrators,Enterprise KRA Adminstrators,Enterprise OCSP Administrators,Enterprise TKS Administrators,Enterprise TPS Administrators,Security Domain Administrators,Subsystem Group - 重启服务器:
# systemctl start pki-tomcatd@instance_name.service
或(如果使用nuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@instance_name.service
部分 IV. 升级到证书系统 10.x
第 21 章 从证书系统 9 升级到证书系统 10
21.1. 迁移 CA
21.1.1. 从以前的系统中导出数据
/var/lib/pki/<instance_name
>。
- 导出 CA 签名证书和密钥。
#
grep internal= /var/lib/pki/<instance_name>/conf/password.conf | awk -F= '{print $2;}' > internal.txt
#
echo <Secret.123> > password.txt
#
PKCS12Export -d /var/lib/pki/<instance_name>/alias -p internal.txt -o ca.p12 -w password.txt
- 导出证书签名请求(CSR)。
#
echo "-----BEGIN NEW CERTIFICATE REQUEST-----" > ca_signing.csr
#
sed -n "/^ca.signing.certreq=/ s/^[^=]*=// p" < /var/lib/pki/<instance_name>/ca/conf/CS.cfg >> ca_signing.csr
#
echo "-----END NEW CERTIFICATE REQUEST-----" >> ca_signing.csr
- 如果旧 CA 是中间 CA (链中有一个 root CA),请从 NSS 数据库中提取 root CA:
#
certutil -L -d /var/lib/pki/<instance_name>/alias/ -n root_CA_nickname -a > ca_rootca_signing.crt
- 备份内部 LDAP 数据库。
- 通过检查 CA 的
CS.cfg
中的internaldb.database
的值来查找 CA 数据库的名称:#
grep internaldb.database /etc/pki/<instance_name>/ca/CS.cfg
internaldb.database=<CS_database_name> - 使用在实例创建时由
setup-ds.pl
生成的特定于实例的脚本,将此数据库导出到.ldif
文件:#
cd /usr/lib64/dirsrv/<instance_name>
#
./db2ldif -n "<CS_database_name>" -a /tmp/old_ca.ldif
db2ldif 命令以 DB 用户身份运行,因此它需要具有写入权限的目标文件夹。
- 将
old_ca.ldif
,ca.p
12,ca_signing.csr
文件传送到新的 CA 机器。如果正在迁移的 CA 也是中间 CA,还要传输ca_rootca_signing.crt
。
21.1.2. 验证 PKCS12 文件
PKCS12
文件包含旧系统的所有系统证书。验证该文件是否包含 CA 签名证书和密钥。
pki-pkcs12
CLI。
- 查找 CA 签名证书和密钥。
$
echo "<Secret.123>" > password.txt
$
pki pkcs12-cert-find --pkcs12-file ca.p12 --pkcs12-password-file password.txt
$
pki pkcs12-key-find --pkcs12-file ca.p12 --pkcs12-password-file password.txt
- 验证是否存在 CA 签名证书的信任标记。如果标志不是 "CTu,Cu" 或缺少它们,请添加它们。
$
pki pkcs12-cert-mod "<caSigningCert cert-pki-rootCA>" \ --pkcs12-file ca.p12 --pkcs12-password-file password.txt \ --trust-flags "CTu,Cu,Cu"
- 删除其他证书和密钥。
$
pki pkcs12-cert-del "<Server-Cert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
$
pki pkcs12-cert-del "<subsystemCert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
$
pki pkcs12-cert-del "<ocspSigningCert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
$
pki pkcs12-cert-del "<auditSigningCert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
- 如果正在迁移的 CA 也是中间 CA,请从
PKCS
criu 文件中删除 root CA 证书。$
pki pkcs12-cert-del "<Top-level Root CA Signing Certificate>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
21.1.3. 在新主机上设置 CA
- 使用旧 CA 的参数,为 pkispawn 创建配置文件,如 CA.cfg。此实例在标准端口(389)上运行。
[DEFAULT] pki_instance_name=<new_instance_name> pki_admin_password=<caadmin_password> pki_client_pkcs12_password=<pkcs12_file_password> pki_ds_password=<DS_password> pki_ds_ldap_port=389 pki_existing=True [CA] pki_ca_signing_csr_path=<path/to/ca_signing.csr> pki_ca_signing_cert_path=<path/to/ca_signing.crt> pki_ca_signing_nickname=<caSigningCert cert-nickname> pki_ds_base_dn=<o=pki-tomcat-CA> pki_ds_database=<instance_name-CA> pki_serial_number_range_start=<starting_number_for_cert_serial_numbers> pki_request_number_range_start=<starting_number_for_request_IDs> pki_master_crl_enable=False
如果旧 CA 是中间 CA,请在配置文件中添加以下两行。它们对应于 root CA 证书的路径和在 NSS 数据库中存储证书时要使用的 nickname。pki_cert_chain_path=<rootca_signing.crt> pki_cert_chain_nickname=<caSigningCert cert-pki-ca>
有关详情和参数描述,请查看 pkispawn(8) man page。 - 在新主机上运行 pkispawn 以创建新 CA 实例:
#
pkispawn -s CA -f ca.cfg -v
21.1.4. 将旧数据导入到新 CA
- 停止 CA 服务。
#
systemctl stop pki-tomcatd@<instance_name>.service
- 可选:备份新主机上的 CA 数据库。
#
dsctl -v idm-qe-01 db2bak
备份存储在/var/lib/dirsrv/ <instance_name> /bak/ <host_name-time_stamp>/
目录中。 - 从新的 RHEL 8 内部数据库中删除签名证书条目。
#
ldapdelete -x -w <password< -D 'cn=Directory Manager' "cn=<serial_number<,ou=certificateRepository,ou=ca,o=pki-tomcat-CA"
该条目现在从旧数据导入,以便该条目中的 CRL 属性指向正确的条目。 - 将数据导入到新数据库中:
#
ldapmodify -x -W <password> -D 'cn=Directory Manager' -a -c -f <path/to/old_ca.ldif>
ldapmodify 工具只添加新条目,且不更新安装 CA 时创建的现有条目。 - 可选:验证
import.log
文件中的输出。您可以搜索失败的操作,如ldap_add: Invalid syntax (21)
。 - 删除旧的安全域的目录条目。
#
ldapmodify -W <password> -x -D "cn=Directory Manager"
dn: cn=<server.example.com:9445>,cn=CAList,ou=Security Domain,<o=pki-tomcat-CA> changetype: delete - 在
/etc/pki/ <instance_name> /ca/CS.cfg 文件中启用
参数,使 CA 充当证书撤销列表(CRL) master:ca.
crl.MasterCRL.enableca.crl.MasterCRL.enable=true
- 重启 CA 服务:
#
systemctl start pki-tomcatd@<instance_name>
21.1.5. 将用户重新分配给默认组
- 设置客户端:
#
pki -c <password> client-init
Client initialized#
pk12util -i ~/.dogtag/<instance_name>/ca_admin_cert.p12 -d ~/.dogtag/nssdb/
Enter Password or Pin for "NSS Certificate DB": Enter password for PKCS12 file: pk12util: PKCS12 IMPORT SUCCESSFUL ... 将用户帐户添加到
管理员和安全域
管理员组中# pki -n "<PKI Administrator for example.com>" -c <password> \ user-membership-add <user_name> "Certificate Manager Agents"
RHCS 9 和 RHCS 10 中的默认(bootstrap)管理员用户具有相同的默认角色,即相同的组成员资格。但是,如果您有一个非默认的 admin 用户,或者在 RHCS 9 中自定义了 admin 角色,则这些更改可能无法正确迁移。在这种情况下,重新配置 RHCS 10 中的角色:# pki -n "<PKI Administrator for example.com>" -c <password> \ user-membership-add <user> "Administrators" # pki -n "<PKI Administrator for example.com>" -c <password> \ user-membership-add <user> "Security Domain Administrators"
21.2. 迁移 KRA
Hostname | PKI KRA 版本 |
---|---|
alpha.example.com | RHCS 9.7 上的 PKI KRA 10.5 |
omega.example.com | RHCS 10.4 上的 PKI KRA 10.13 |
21.2.1. 在新主机上设置 KRA
root
用户身份:
- 在 omega.example.com 上安装和配置一个新的 PKI 10.13 KRA。
- 停止 KRA 实例。
#
systemctl stop pki-tomcatd@<pki-kra>
- 创建目录以导出所有必需的文件。
#
mkdir -p /export/pki
- 将 KRA 存储证书导出到文件。稍后您将需要 KRA 存储证书来重新加密 alpha 上 KRA 的解密的旧数据。在以下示例中,该文件名为 omega.crt :
#
cd /var/lib/pki/<pki-kra>/alias/
#
pki-server cert-export kra_storage -i <pki-kra> --cert-file <omega.crt>
Certificate: Data: Version: 3 (0x2) Serial Number: 8 (0x8) Signature Algorithm: sha256WithRSAEncryption Issuer: O = example.com Security Domain, OU = topology-02-CA, CN = CA Signing Certificate Validity Not Before: Dec 19 10:58:02 2019 GMT Not After : Dec 8 10:58:02 2021 GMT Subject: O = example.com Security Domain, OU = topology-02-KRA, CN = DRM Storage Certificate Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:99:c1:f6:f4:0d:75:67:ff:58:3a:28:ee:34:f1: 40:0a:e1:5b:f3:9d:f4:c2:5a:1e:d0:d5:0c:62:c1: - 将
omega.crt
文件移到/export/pki
目录中。#
mv omega.crt /export/pki/
- 停止 Directory 服务器。
#
systemctl stop dirsrv@omega
注意如果缺少db2ldif
,请安装 389-ds-base-legacy-tools 软件包。 - 提取 KRA LDAP 数据库配置。您需要新的 KRA LDAP 数据库配置,才能将旧数据转换为新数据。
#
/usr/lib64/dirsrv/slapd-omega/db2ldif -n <pki-kra-KRA> -a /tmp/omega.ldif
- 将
/tmp/omega.ldif
文件移到/export/pki
目录。#
mv /tmp/omega.ldif /export/pki/
21.2.2. 从以前的系统导出内容
root
用户身份:
- 创建通用目录:
#
mkdir -p /export/pki
- 停止 Directory 服务器。在本例中,服务器名为 alpha:
#
systemctl stop dirsrv@alpha
- 从 KRA LDAP 数据库生成 LDIF:
#
/usr/lib64/dirsrv/slapd-alpha/db2ldif -n <pki-kra-KRA> -a /tmp/alpha.ldif
- 将
/tmp/alpha.ldif
文件移到/export/pki
目录中:#
mv /tmp/alpha.ldif /export/pki/
- 将 KRA NSS 安全数据库复制到数据区域:
#
cp -p /var/lib/pki/<pki-kra>/alias/* /export/pki/
- 进入 /export/pki 目录:
#
cd /export/pki
- 从 omega.example.com 获取包含新 KRA 存储证书的 flat-file:
sftp root@omega.example.com sftp> cd /export/pki sftp> get omega.crt sftp> quit
- 获取内部密码:
#
cat /var/lib/<instance_name>/conf/password.conf
- 在 alpha.example.com 上运行
KRATool
:# KRATool \ -kratool_config_file /usr/share/pki/java-tools/KRATool.cfg \ -source_ldif_file /export/pki/alpha.ldif \ -target_ldif_file /export/pki/alpha2omega.ldif \ -log_file /tmp/KRATool_26_05_2023.log \ -source_pki_security_database_path /export/pki/ \ -source_storage_token_name "Internal Key Storage Token" \ -source_storage_certificate_nickname "<storageCert cert-pki-tomcat KRA>" \ -target_storage_certificate_file /export/pki/omega.crt \ -source_kra_naming_context alpha.example.com \ -target_kra_naming_context omega.example.com \ -unwrap_algorithm AES \ -process_requests_and_key_records_only PROCESSING KRATOOL CONFIG FILE: ................................... FINISHED. SUCCESSFULLY processed kratool config file! Initializing source PKI security databases in '/export/pki/'. Retrieving token from CryptoManager. Retrieving source storage token called 'Internal Key Storage Token'. Retrieving source storage cert with nickname of 'storageCert cert-pki-tomcat KRA'. BEGIN: Obtaining the private key from the source storage token . . . Enter password for Internal Key Storage Token ************ FINISHED: Obtaining the private key from the source storage token. BEGIN: Obtaining the public key from the target storage certificate . . . FINISHED: Obtaining the public key from the target storage certificate. PROCESSING: xxxxxxxxxxxxxxxxxxxxxxxxx...... SUCCESSFULLY converted source LDIF file --> target LDIF file! FINISHED "KRATool -kratool_config_file /usr/share/pki/java-tools/KRATool.cfg -source_ldif_file /export/pki/alpha.ldif -target_ldif_file /export/pki/alpha2omega.ldif -log_file /tmp/DRMTool_20_05_2021.log -source_pki_security_database_path /export/pki/ -source_storage_token_name 'Internal Key Storage Token' -source_storage_certificate_nickname 'storageCert cert-pki-tomcat KRA' -target_storage_certificate_file /export/pki/omega.crt -source_pki_security_database_pwdfile '/export/pki/password.cfg' -source_kra_naming_context 'alpha.example.com' -target_kra_naming_context 'omega.example.com' -process_requests_and_key_records_only"
注意或者,您可以创建一个受未授权访问的纯文本文件,其中包含一个被证书或证书数据库自动访问的密码。使用-source_pki_security_database_pwdfile < path_to_PKI_password_file> 命令行选项将此文件添加到
KRATool
中。 - 将
alpha2omega.ldif
文件复制到 omega.example.com :sftp root@omega.example.com sftp> cd /export/pki sftp> put alpha2omega.ldif sftp> quit
21.2.3. 将数据导入到新的 KRA 中
root
用户身份:
- 进入
/export/pki
目录#
cd /export/pki
- 连接
ldif
文件:#
cat omega.ldif alpha2omega.ldif > omega_alpha.ldif
- 将
omega_alpha.ldif
文件导入到与 PKI KRA 关联的 LDAP 数据库中:#
/usr/lib64/dirsrv/slapd-omega/ldif2db -n <pki-kra-KRA> -i /export/pki/omega_alpha.ldif
- 启动 Directory 服务器:
#
systemctl start dirsrv@omega
- 启动 KRA 实例。
#
systemctl start pki-tomcatd@<pki-kra>
21.2.4. 从 KRA Agent Page 验证迁移的密钥是否存在
[root@pki1 pki]#
pki -d /root/nssdb/ -p 21080 -n '<PKI Administrator - example.com Security Domain>' kra-key-find
Enter password for Internal Key Storage Token ---------------- 3 key(s) matched ---------------- Key ID: 0x1 Algorithm: 1.2.840.113549.1.1.1 Size: 1024 Owner: UID=alpha1 Key ID: 0x2 Algorithm: 1.2.840.113549.1.1.1 Size: 1024 Owner: UID=alpha2 Key ID: 0x3 Algorithm: 1.2.840.113549.1.1.1 Size: 1024 Owner: UID=alpha3 ---------------------------- Number of entries returned 3 ----------------------------
21.2.5. 升级后测试
过程 21.1. 密钥恢复测试
- 显示升级前创建的 base64 用户证书。
#
<pki -n 'PKI Administrator - example.com>' -c <Secret.123> ca-cert-export <0xd>
Serial Number: 0xd Subject DN: UID=alpha Issuer DN: CN=CA Signing Certificate,OU=pki-tomcat,O=example.com Security Domain Status: VALID Not Valid Before: Wed Jun 07 01:49:07 EDT 2023 Not Valid After: Mon Dec 04 01:49:07 EST 2023 ----BEGIN CERTIFICATE---- MIIDODCCAiCgAwIBAgIBDTANBgkqhkiG9w0BAQsFADBtMTUwMwYDVQQKDCxpZG1xZS5sYWIuZW5n LmJvcy5yZWRoYXQuY29tIFNlY3VyaXR5IERvbWFpbjETMBEGA1UECwwKcGtpLXRvbWNhdDEfMB0G A1UEAwwWQ0EgU2lnbmluZyBDZXJ0aWZpY2F0ZTAeFw0yMzA2MDcwNTQ5MDdaFw0yMzEyMDQwNjQ5 [...output truncated...] EJyoMFM+RaAcTh+C3S0JZEoKlAS3UlJOMxk3BFZdWpv7ia+1faV6LFPZSCZ/m8i2c3KZNxFW2xv1 DTIIVc7a1uEDApVDHf5aFcm0nGpEVeK+yvP4r1eD ----END CERTIFICATE---- - 使用此证书通过 KRA Agent UI 生成密钥恢复请求。
- 批准恢复请求。
#
pki -c <Secret.123> -n '<PKI Administrator - example.com Security Domain>' -p 8443 -P https kra-key-request-review <0x2> --action approve
----- Result ------ Request ID: 0x2 Type: recovery Status: approved - 从 KRA UI 下载密钥。
第 22 章 将证书系统 10 升级到最新的次版本
- 升级服务器中的所有软件包:
# yum update
在更新过程中,证书系统配置文件(如/etc/pki/ <instance_name> /subsystem/CS.cfg
和/etc/pki/<instance_name> /server.xml
)会自动修改到新版本。在证书系统升级过程中生成的日志文件是:/var/log/pki/pki-server-upgrade-version.log
/var/log/pki/pki-upgrade-version.log
请注意,日志文件名称中的版本号代表 pki* 软件包版本,而不是证书系统版本。注意如果在其他主机上安装目录服务器,还要更新该主机上的所有软件包。有关更新目录服务器的详情,请参考:- Red Hat Directory Server 发行注记,用于目录服务器中的显著变化、错误修复和已知问题。
- 重启证书系统实例:
# systemctl restart pki-tomcatd@<instance_name>.service
部分 V. 卸载证书系统子系统
第 23 章 删除子系统
pkidestroy -s subsystem_type -i instance_name
s
选项指定要删除的子系统(如 CA、KRA、OCSP、TKS 或 TPS)。i
选项指定实例名称,如 pki-tomcat
。
例 23.1. 删除 CA 子系统
$ pkidestroy -s CA -i pki-tomcat Loading deployment configuration from /var/lib/pki/pki-tomcat/ca/registry/ca/deployment.cfg. Uninstalling CA from /var/lib/pki/pki-tomcat. Removed symlink /etc/systemd/system/multi-user.target.wants/pki-tomcatd.target. Uninstallation complete.
pkidestroy
工具移除子系统以及任何相关的文件,如证书数据库、证书、密钥和相关用户。它不会卸载子系统软件包。如果子系统是服务器实例上的最后一个子系统,则也会删除服务器实例。
第 24 章 删除证书系统子系统软件包
yum
)单独删除每个软件包。
- 删除所有关联的子系统。例如:
pkidestroy -s CA -i pki-tomcat
- 运行卸载工具。例如:
yum remove pki-subsystem_type
子系统类型可以是ca
、kra
、ocsp
、tks
或tps
。 - 要删除其他软件包和依赖项,请使用
yum
删除软件包。安装的软件包的完整列表位于 第 7.2 节 “证书系统软件包”。
术语表
一个
- Administrator
- 安装和配置一个或多个证书系统管理器并为它们设置特权用户或代理的人员。另请参阅 agent。
- agent
- APDU
- 应用程序协议数据单元。用于在智能卡和智能卡读卡器之间的通信的通信的通信单元(大概为字节)。
- 代理批准的注册
- 在签发证书前,注册需要代理批准请求。
- 代理服务
- 1.可以通过由证书系统 agent 通过为代理分配所需权限的证书系统子系统提供的 HTML 页面管理的服务。2.用于管理此类服务的 HTML 页面。
- 审核员
- 查看已签名的审计日志的特权用户。
- 审计日志
- 记录各种系统事件的日志。此日志可以签名,提供未篡改的证明,并且只能由审核员用户读取。
- 属性值断言(AVA)
- 授权
- 访问由服务器控制的资源的权限。授权通常在服务器评估与资源关联的 ACL 后进行。请参阅 访问控制列表(ACL)。
- 自动注册
- 配置证书系统子系统的方法,以允许对最终用户注册进行自动身份验证,而无需人为干预。通过这种身份验证形式,成功完成身份验证模块处理的证书请求将成功批准进行配置文件处理和证书颁发。
- 访问控制
- 控制特定用户被允许执行的操作。例如,对服务器的访问控制通常基于由密码或证书建立的身份,以及有关该实体可以做什么的规则。另请参阅 访问控制列表(ACL)。
- 访问控制列表(ACL)
- 一组访问控制条目,用于定义在服务器收到访问特定资源时要评估的访问规则的层次结构。请参阅 访问控制指令(ACI)。
- 访问控制指令(ACI)
- 一个访问规则,用于指定请求访问的主题如何被标识或拒绝特定主题的权限。请参阅 访问控制列表(ACL)。
- 身份验证
- 身份验证模块
- 一组规则(作为 Java™ 类实施)来验证端点实体、代理、管理员或需要与证书系统子系统交互的任何其他实体。在典型的最终用户注册中,在用户提供注册表单请求的信息后,注册 servlet 会使用与该表单关联的身份验证模块来验证信息并验证用户的身份。请参阅 servlet。
- 高级加密标准(AES)
- 高级加密标准(AES),如其前身数据加密标准(DES),是一个 FIPS 批准的对称密钥加密标准。AES 由美国政府 2002 年采用。它定义了三个块密码,AES-128、AES-192 和 AES-256。美国国家标准与技术研究院(NIST)在美国.FIPS PUB 197.如需更多信息,请参阅 http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf。
B
- 绑定 DN
- 用户 ID,采用可分辨名称(DN)的形式,用于向 Red Hat Directory Server 进行身份验证。
C
- CA 层次结构
- root CA 委派权限以将证书签发到从属 CA 的 CA 层次结构。从属 CA 还可以通过将发出状态委派给其他 CA 来扩展层次结构。另请参阅 证书颁发机构(CA)、subordinate CA、root CA。
- CA 服务器密钥
- 提供 CA 服务的服务器的 SSL 服务器密钥。
- CA 签名密钥
- 与 CA 证书中的公钥对应的私钥。CA 使用其签名密钥为证书签名和 CRL。
- CA 证书
- certificate
- 根据 X.509 标准格式化的数字数据,指定个人、公司或其他实体(证书的 主题名称 )的名称,证书也包含在证书中,该实体也属于该实体。公钥证书由 证书颁发机构(CA) 发布并数字签名。可以通过 数字签名 技术检查 CA 的 公钥加密 来验证证书的有效性。要在 公钥基础架构(PKI) 中信任,证书必须由在 PKI 中注册的其他实体信任的 CA 发布并签名。
- CMC
- 请参阅 通过加密消息语法(CMC)的证书管理消息。
- CMC Enrollment
- 允许使用代理签名证书将签名注册或签名的撤销请求发送到证书管理器的功能。然后,证书管理器会自动处理这些请求。
- CMMF
- 请参阅 证书管理消息格式(CMMF)。
- CRL
- 请参阅 证书撤销列表(CRL)。
- CRMF
- 请参阅 证书请求消息格式(CRMF)。
- CSP
- 请参阅 加密服务提供商(CSP)。
- 串联 CA
- 请参阅 链接的 CA。
- 信任链
- 请参阅 证书链。
- 加密服务提供商(CSP)
- 一个加密模块,它执行加密服务(如密钥生成、密钥存储和加密)代表使用标准接口(如 PKCSVRF 定义)来请求此类服务的软件。
- 加密模块
- 请参阅 PKCS rebased 模块。
- 加密消息语法(CS)
- 用于数字签名、摘要、验证或加密任意消息的语法,如 CMMF。
- 加密算法
- 用于执行加密操作的一组规则或指示,如 encryption 和 解密。
- 基于证书的验证
- 基于证书和公钥加密进行身份验证。另请参阅 基于密码的身份验证。
- 客户端 SSL 证书
- 用于通过 SSL 协议将客户端标识到服务器的证书。请参阅 安全套接字层(SSL)。
- 客户端身份验证
- 密码
- 请参阅 加密算法。
- 证书扩展
- X.509 v3 证书包含一个 extensions 字段,允许将任意数量的其他字段添加到证书。证书扩展提供了一种为证书添加其他主题名称和使用限制等信息的方法。PKIX 工作组定义了很多标准扩展。
- 证书指纹
- 与证书关联的 单向哈希。数字不是证书本身的一部分,而是通过将哈希功能应用到证书的内容来生成。如果证书的内容发生变化,即使由一个字符表示,相同的功能也会生成不同的数字。因此,可以使用证书指纹来验证证书是否已被篡改。
- 证书撤销列表(CRL)
- 由 X.509 标准定义,按序列号吊销的证书列表,由 证书颁发机构(CA) 生成并签名。
- 证书管理器
- 充当证书颁发机构的独立证书系统子系统。证书管理器实例问题、续订和撤销证书,该证书可以与 CRL 一起发布到 LDAP 目录。它接受来自端点实体的请求。请参阅 证书颁发机构(CA)。
- 证书管理器代理
- 属于组的用户,有权管理证书管理器的代理服务。这些服务包括访问和修改(批准和拒绝)证书请求和发布证书的能力。
- 证书管理消息格式(CMMF)
- 消息格式用于传达来自结束实体的证书请求和撤销请求,并将各种信息发送到最终实体。来自互联网工程任务组(IETF) PKIX 工作组的提议标准。CMMF 被另一个提议的标准 通过加密消息语法(CMC)的证书管理消息 使用。有关详细信息,请参阅 https://tools.ietf.org/html/draft-ietf-pkix-cmmf-02。
- 证书系统
- 证书系统子系统
- 证书系统控制台
- 可以为任何单个证书系统实例打开的控制台。证书系统控制台允许证书系统管理员控制相应证书系统实例的配置设置。
- 证书请求消息格式(CRMF)
- 用于管理 X.509 证书的消息的格式。这个格式是 CMMF 的子集。另请参阅 证书管理消息格式(CMMF)。有关详细信息,请参阅 http://www.ietf.org/rfc/rfc2511.txt。
- 证书配置文件
- 定义特定类型的注册类型的一组配置设置。证书配置文件为特定类型的注册设置策略,以及证书配置文件中的身份验证方法。
- 证书链
- 由连续证书颁发机构签名的分层一系列证书。CA 证书标识了一个 证书颁发机构(CA),用于签署该机构发布的证书。CA 证书可反过由父 CA 的 CA 证书签名,以此类推 root CA。证书系统允许任何端点检索证书链中的所有证书。
- 证书颁发机构(CA)
- 在验证证书要识别的人员或实体的身份后,发出 certificate 的可信实体。CA 还会续订并撤销证书并生成 CRL。在证书的 issuer 字段中命名的实体始终是 CA。证书颁发机构可以是独立的第三方,也可以是使用证书颁发服务器软件(如 Red Hat Certificate System)的人员或机构。
- 跨对证书
- 由一个 CA 发布的证书到另一个 CA,然后由两个 CA 存储以形成信任圆圈。两个 CA 相互发布证书,然后将两个跨对证书存储为证书对。
- 跨认证
- 在不同的认证层次结构或链中通过两个 CA 交换证书。交叉认证扩展了信任链,以便它包含这两个层次结构。另请参阅 证书颁发机构(CA)。
- 通过加密消息语法(CMC)的证书管理消息
- 用于将证书请求发送到证书管理器的消息格式。来自互联网工程任务组(IETF) PKIX 工作组的提议标准。有关详细信息,请参阅 https://tools.ietf.org/html/draft-ietf-pkix-cmc-02。
D
- delta CRL
- 一个 CRL,其中包含自上次完整的 CRL 发布以来已撤销的证书列表。
- 分发点
- 用于 CRL 以定义一组证书。每个分发点都由发布的一组证书定义。可以为特定的发布点创建 CRL。
- 双密钥对
- 可区分名称(DN)
- 一系列 AVAs 用于识别证书主题。请参阅 属性值断言(AVA)。
- 密钥恢复授权代理
- 属于组的用户,有权管理密钥恢复授权的代理服务,包括管理请求队列并使用基于 HTML 的管理页面授权恢复操作。
- 密钥恢复授权机构
- 为结束实体管理 RSA 加密密钥的长期归档和恢复的可选独立证书系统子系统。在发布新证书前,可将证书管理器配置为使用密钥恢复授权来归档最终实体的加密密钥。只有在端点实体加密数据(如敏感电子邮件)时,Key Recovery Authority 才有用,组织可能需要恢复一天。它只能与支持双密钥对的末尾实体一起使用:两个单独的密钥对,一个用于加密,另一个用于数字签名。
- 密钥恢复授权机构传输证书
- 认证终端实体使用的公钥,以加密实体的加密密钥以传输到密钥恢复授权。密钥恢复授权机构使用与认证公钥对应的私钥来解密最终实体的密钥,然后才能使用存储密钥对其进行加密。
- 密钥恢复授权机构存储密钥
- 密钥恢复机构用来加密最终实体加密密钥的特殊密钥,在使用密钥恢复机构的私钥解密后对其进行加密。存储密钥永远不会保留密钥恢复授权。
- 密钥恢复授权机构恢复代理
- 拥有部分存储密钥的 n 人之一 密钥恢复授权机构。
- 数字 ID
- 请参阅 certificate。
- 数字签名
- 要创建数字签名,签名软件首先从要签名的数据(如新签发的证书)创建一个 单向哈希。然后,使用签名人的私钥加密单向哈希。生成的数字签名对于签名的每个数据都是唯一的。即使在消息中添加了一个逗号会更改该消息的数字签名。使用签名人的公钥成功解密数字签名,并与同一数据的另一个哈希进行比较,提供 篡改检测。为包含公钥的证书验证 证书链,提供签名人验证。另请参阅 nonrepudiation、encryption。
- 解密
- 取消加密的数据。请参阅 encryption。
E
- eavesdropping
- Surreptitious 截获在网络中发送的信息并非预期的实体。
- Elliptic Curve Cryptography (ECC)
- 使用 elliptic curves 为加密密钥基础的数学问题创建 additive logarithms 的加密算法。ECC 密码比 RSA 密码使用效率更高,因为其内部复杂性比 RSA 密码更小。如需更多信息,请参阅 https://tools.ietf.org/html/draft-ietf-tls-ecc-12。
- encryption
- 以忽略其含义的方式对信息进行模糊处理。请参阅 解密。
- enrollment
- 请求和接收 X.509 证书以便在 公钥基础架构(PKI) 中使用的过程。也称为 注册。
- extensions 字段
- 请参阅 证书扩展。
- 加密密钥
- 结束实体
- 在 公钥基础架构(PKI) 中,个人、路由器、服务器或其他使用 certificate 识别其自身的实体。
F
- Federal Bridge 证书颁发机构(FBCA)
- 一个配置,其中两个 CA 形成一个信任圆圈,方法是相互发出跨对证书,并将两个跨对证书存储为单个证书对。
- fingerprint
- 请参阅 证书指纹。
- FIPS PUBS 140
- Federal Information Standards Publications (FIPS PUBS) 140 是实施加密模块的美国政府标准、加密和解密数据的硬件或软件,或者执行其他加密操作,如创建或验证数字签名。许多销售到美国政府的产品必须符合一个或多个 FIPS 标准。请参阅 http://www.nist.gov/itl/fipscurrent.cfm。
- firewall
- 在两个或多个网络间强制实施边界的系统或组合。
H
- 超文本传输协议(HTTP)和 Hypertext 传输协议安全(HTTPS)
- 用于与 Web 服务器通信的协议。HTTPS 由通过传输层安全(TLS)加密的连接内通过 HTTP (Hypertext 传输协议)进行通信。HTTPS 的主要目的是验证访问的网站以及交换数据隐私和完整性的保护。
I
- IP 欺骗
- 客户端 IP 地址的伪造。
- IPv4 和 IPv6
- 证书系统支持 IPv4 和 IPv6 地址命名空间,用于与所有子系统和工具的通信和操作,以及客户端、子系统创建和令牌和证书注册。
- 中间 CA
- 其证书位于 root CA 和 证书链 中发布的证书的 CA。
- 模拟
- 充当通过网络发送的信息的预期接收者。模拟可以采用两种形式: 欺骗 和 misrepresentation。
- 输入
- 在证书配置文件功能上下文中,它定义了特定证书配置文件的注册表单。每个输入都会被设置,然后从为此注册配置的所有输入动态创建注册表单。
J
- JAR 文件
- 为压缩的文件集合进行数字信封,根据 Java™ 存档(JAR)格式 进行组织。
- Java™ Development Kit (JDK)
- Sun Microsystems 提供的软件开发套件,用于使用 Java™ 编程语言开发应用程序和小程序。
- Java™ 加密架构(JCA)
- 由 Sun Microsystems 开发用于加密服务的 API 规格和参考。See http://java.sun.com/products/jdk/1.2/docs/guide/security/CryptoSpec.Introduction.
- Java™ 原生接口(JNI)
- 在给定平台上提供 Java™ 虚拟机(JVM)不同实施的标准编程接口,允许使用 C 或 C++ 等语言编写的现有代码来绑定到 Java™。See http://java.sun.com/products/jdk/1.2/docs/guide/jni/index.html.
- Java™ 存档(JAR)格式
- 一组将数字签名、安装程序脚本和其他信息与目录中的文件关联的约定。
- Java™ 安全服务(JSS)
- 用于控制网络安全服务(NSS)执行的安全操作的 Java™ 接口。
K
- KEA
- 请参阅 密钥交换算法(KEA)。
- key
- KEYGEN 标签
- 生成密钥对以用于证书的 HTML 标签。
- 密钥交换
- 一个包括客户端和服务器的流程,以确定他们在 SSL 会话期间要使用的对称密钥。
- 密钥交换算法(KEA)
- 美国政府用于密钥交换的算法。
L
- 轻量级目录访问协议(LDAP)
- 用于在 TCP/IP 和多个平台上运行的目录服务协议。LDAP 是简化的目录访问协议(DAP)版本,用于访问 X.500 目录。LDAP 受 IETF 更改控制,已演变以满足互联网要求。
- 链接的 CA
- 一个内部部署的 证书颁发机构(CA),它的证书由公共的第三方 CA 签名。内部 CA 充当其问题的根 CA,第三方 CA 充当与其他 CA 链接到同一第三方 root CA 发布的证书的根 CA。也称为"链接 CA",以及由不同公共 CA 使用的其他术语。
M
N
- non-TMS
- 非令牌管理系统。指的是 不直接 处理智能卡的子系统(CA 和可选,KRA 和 OCSP)的配置。
参见令牌管理系统(TMS).
- nonrepudiation
- 消息的发送者无法拒绝发送邮件。数字签名 提供了一种非缓解形式。
- 网络安全服务(NSS)
- 一组库,旨在支持支持安全的通信应用程序的跨平台开发。使用 NSS 库构建的应用程序支持 安全套接字层(SSL) 协议进行身份验证、篡改检测和加密令牌接口,以及用于加密令牌接口的 PKCSROX 协议。NSS 也作为软件开发工具包单独提供。
O
- OCSP
- 在线证书状态协议.
- operation
- 在访问控制指令中允许或拒绝的特定操作,如读取或写入。
- output
- 在证书配置文件功能上下文中,它定义了从成功为特定证书配置文件的证书注册而生成的表单。设置每个输出,然后从为此注册配置的所有输出动态创建表单。
- 单向哈希
- 1.从任意长度的数据生成的固定长度很多,并附带哈希算法。数字也称为消息摘要,对散列数据是唯一的。对数据的任何更改(甚至删除或更改单个字符)都会生成不同的值。2.散列数据的内容无法从哈希中推断出来。
- 对象签名
- 文件签名方法,使软件开发人员能够签署 Java 代码、JavaScript 脚本或任何类型的文件,并允许用户识别签名者并对本地系统资源控制访问。
- 对象签名证书
- 关联的私钥证书用于为对象签名 ; 与 对象签名 相关。
P
- PKCS #10
- 管理证书请求的公钥加密标准。
- PKCS #11
- 管理加密令牌(如智能卡)的公钥加密标准。
- PKCS #12
- 管理关键可移植性的公钥加密标准。
- PKCS #7
- 管理签名和加密的公钥加密标准。
- PKCS rebased 模块
- 通过 PKCS reflects 接口提供加密服务的加密设备的驱动程序,如加密和解密。在硬件或软件中,可以实施 PKCSBACKEND 模块 (也称为 加密模块或加密服务提供商 )。PKCSBACKEND 模块始终具有一个或多个插槽,这些插槽可能以某种形式的物理读取器(如用于智能卡)或软件中的概念插槽作为物理硬件插槽实施。PKCSjpeg 模块的每个插槽可以包含一个令牌,这是实际提供加密服务的硬件或软件设备,并选择性地存储证书和密钥。红帽使用证书系统提供了一个内置的 PKCS facilities 模块。
- PKIX 证书和 CRL 配置文件
- 由 IETF 为互联网的公共密钥基础架构开发的标准。它为证书指定配置集和 CRL。
- 公钥
- 公钥加密中使用的一对密钥。公钥是免费发布,并作为 certificate 的一部分发布。它通常用于加密发送到公钥所有者的数据,然后使用对应的 私钥 解密数据。
- 公钥加密
- 组经过精心设计的技术和标准,允许实体以电子方式验证身份或签名和加密电子数据。涉及两个密钥,一个公钥和一个私钥。公钥 作为证书的一部分发布,该证书将该密钥与特定身份相关联。对应的私钥已保密。使用公钥加密的数据只能使用私钥解密。
- 公钥基础架构(PKI)
- 有助于在联网环境中使用公钥加密和 X.509 v3 证书的标准和服务。
- 基于密码的身份验证
- 存档证明(POA)
- 使用私钥恢复授权传输密钥签名的数据,其中包含有关存档最终用户密钥的信息,包括密钥序列号、密钥恢复机构的名称、对应证书的 主题名称 以及归档日期。签名的验证数据是密钥恢复授权在成功密钥归档操作后向证书管理器返回的响应。另请参阅 密钥恢复授权机构传输证书。
- 私钥
- 公钥加密中使用的一对密钥。私钥已保存 secret,用于解密使用对应 公钥 加密的数据。
R
- RC2, RC4
- 由 Rivest 为 RSA 数据安全性开发的加密算法。另请参阅 加密算法。
- Red Hat Certificate System
- registration
- 请参阅 enrollment。
- root CA
- RSA 密钥交换
- 基于 RSA 算法的 SSL 的密钥交换算法。
- RSA 算法
- Rivest-Shamir-Adleman 的缩写是加密和身份验证的公共密钥算法。它由 Ronald Rivest、Adi Shamir 和 Leonard Adleman 开发的,在 1978 年推出。
S
- sandbox
- Java™ 术语,用于精心定义的 Java™ 代码必须在其中操作的限制。
- Security-Enhanced Linux (SELinux)
- 安全增强型 Linux (SELinux)是一组在 Linux 系统内核强制执行强制访问控制的安全协议。SELinux 由美国国家安全局开发,通过宽松或有缺陷的访问控制保持应用程序访问机密或受保护文件。
- servlet
- 用于代表证书系统子系统处理特定类型的与结束实体的 Java™ 代码。例如,证书注册、撤销和密钥恢复请求都由单独的 servlet 来处理。
- SHA
- 安全哈希算法,这是美国政府使用的哈希函数。
- slot
- PKCS rebased 模块 的一部分,在硬件或软件中实施,其中包含 token。
- SSL
- 请参阅 安全套接字层(SSL)。
- subject
- 由 certificate 标识的实体。特别是,证书的 subject 字段包含一个唯一描述认证实体的 主题名称。
- subordinate CA
- 主题名称
- 单点登录
- 1.在证书系统中,通过存储内部数据库和令牌的密码来简化到 Red Hat Certificate System 的方法。每次用户登录时,都需要输入此单一密码。2.用户可以一次性登录单个计算机,并由网络中的各种服务器自动进行身份验证。部分单点登录解决方案可以采用多种形式,包括用于自动跟踪不同服务器使用密码的机制。证书支持 公钥基础架构(PKI) 中的单点登录。用户可以一次登录到本地客户端的私钥数据库,只要客户端软件正在运行,则依赖 基于证书的验证 访问用户可访问的机构中的每个服务器。
- 安全域
- PKI 子系统的集中存储库或清单。它的主要目的是,通过自动在子系统之间建立可信关系,促进新 PKI 服务的安装和配置。
- 安全套接字层(SSL)
- 允许客户端和服务器间的相互身份验证的协议,以及验证和加密的连接建立。SSL 在 TCP/IP 之上运行,低于 HTTP、LDAP、IMAP、NNTP 和其他高级网络协议。
- 安全频道
- TPS 和智能卡之间的安全关联,允许根据 TKS 和智能卡 APDU 生成的共享主密钥进行加密。
- 对称加密
- 使用相同的加密密钥来加密和解密给定消息的加密方法。
- 智能卡
- 包含微处理器的小型设备并存储加密信息,如密钥和证书,并执行加密操作。智能卡实现一些或者所有 PKCS #11 接口。
- 服务器 SSL 证书
- 使用 安全套接字层(SSL) 协议将服务器标识到客户端的证书。
- 服务器身份验证
- 向客户端识别服务器的过程。另请参阅 客户端身份验证。
- 欺骗
- 准备成为其他人.例如:一个人可以假定使用电子邮件地址 jdoe@example.com,或者计算机可以将自己识别为名为 www.redhat.com 的站点(如果不存在)。欺骗是 模拟 的一种形式。另请参阅 misrepresentation。
- 签名密钥
- 签名的审计日志
- 请参阅 审计日志。
- 签名算法
- 签名证书
- 是公钥的证书与用于创建数字签名的私钥对应。例如,证书管理器必须具有一个签名证书,该签名证书与其用来为问题的证书签名的私钥对应。
- 简单的证书注册协议(SCEP)
- Cisco 设计的协议,用于指定路由器与 CA 通信以进行路由器注册的方法。证书系统支持 SCEP 的 CA 操作模式,其中请求使用 CA 签名证书加密。
- 自我测试
- 在实例启动和按需时测试证书系统实例的功能。
T
- token
- 与 slot 中的 PKCS rebased 模块 关联的硬件或者软件设备。它提供加密服务,并选择性地存储证书和密钥。
- trust
- 确信依赖个人或其他实体。在 公钥基础架构(PKI) 中,信任是指证书用户和签发证书的 证书颁发机构(CA) 之间的关系。如果 CA 受信任,则可以信任由该 CA 发布的有效证书。
- 令牌处理系统(TPS)
- 直接交互企业安全客户端和智能卡的子系统,以管理这些智能卡上的密钥和证书。
- 令牌密钥服务(TKS)
- 令牌管理系统中的子系统,它根据智能卡 APDU 和其他共享信息(如令牌 CUID)生成特定、单独的密钥。
- 令牌管理系统(TMS)
- 相关的子系统 - CA、TKS、TPS 以及可选的 KRA - 用于管理智能卡(令牌)上的证书。
- 传输层安全性(TLS)
- 一组规则,用于管理服务器和客户端之间的服务器身份验证、客户端身份验证和加密通信。
- 树状层次结构
- LDAP 目录的层次结构。
- 篡改检测
- 确保以电子形式接收的数据完全与相同数据的原始版本相对应的机制。
U
- UTF-8
- 证书注册页面支持特定字段的所有 UTF-8 字符(通用名称、机构单元、请求者名称和其他备注)。UTF-8 字符串是可搜索的,在 CA、OCSP 和 KRA 最终用户和代理服务页面中正确显示。但是,UU-8 支持没有扩展到国际化的域名,如电子邮件地址中使用的域名。
V
- 虚拟专用网络(VPN)
- 连接地理距离企业部门的方式。VPN 允许部门通过加密频道进行通信,允许经过身份验证的机密事务,这些事务通常仅限于专用网络。
X
- X.509 版本 1 和版本 3
- International Telecommunications Union (ITU)推荐的数字证书格式。
索引
符号
- 为 CA 签名密钥,选择签名密钥类型和长度
- 从属 CA,从属证书系统 CA
- 代理
- 代理证书,用户证书
- 令牌
- external,用于清理证书系统子系统密钥和证书的令牌
- internal,用于清理证书系统子系统密钥和证书的令牌
- Windows 登录,使用 Windows 智能卡登录配置文件
- 定义,用于清理证书系统子系统密钥和证书的令牌
- 查看安装了哪些令牌,查看令牌
- 令牌处理系统,使用证书系统进行智能卡令牌管理
- 令牌密钥服务和,使用证书系统进行智能卡令牌管理
- 可扩展性,使用智能卡
- 令牌密钥服务,使用证书系统进行智能卡令牌管理
- 令牌处理系统和,使用证书系统进行智能卡令牌管理
- 位置
- 活跃日志文件,日志
- 克隆,CA Cloning
- 公钥
- 内部令牌,用于清理证书系统子系统密钥和证书的令牌
- 发布
- 发布队列,启用和配置发布队列
- 启用,启用和配置发布队列
- 可信 CA,定义,CA 证书如何建立信任
- 可区分名称(DN)
- for CA,规划 CA 可辨识名称
- 扩展属性支持,更改 CA-Isued 证书中的 DN 属性
- 在 CS 中扩展 directory-attribute 支持,更改 CA-Isued 证书中的 DN 属性
- 基于密码的身份验证,定义,基于密码的身份验证
- 基于证书的验证
- 定义,身份验证确认一个身份
- 外部令牌
- 如何搜索键,归档密钥
- 子系统
- 配置密码文件,配置 password.conf 文件
- 安装,安装和配置证书系统
- 规划,规划 PKI 的检查列表
- 客户端身份验证
- 定义的 SSL/TLS 客户端证书,证书类型
- 密码
- 定义,加密和解密
- 对于子系统实例,管理系统密码
- 由子系统实例使用,配置 password.conf 文件
- 配置 password.conf 文件,配置 password.conf 文件
- 密钥归档,归档密钥
- 密钥恢复,恢复密钥
- 密钥恢复授权机构
- 设置
- 密钥长度,选择签名密钥类型和长度
- 归档
- 轮转日志文件,日志文件轮转
- 恢复用户的私钥,恢复密钥
- 拓扑决策,用于部署,使用证书系统进行智能卡令牌管理
- 数字签名
- 定义,数字签名
- 日志的清除间隔,buffered 和 Unbuffered Logging
- 时间日志轮转,日志文件轮转
- 智能卡
- Windows 登录,使用 Windows 智能卡登录配置文件
- 更改
- DER-encoding 顺序,更改 DER-Encoding 顺序
- 未缓冲的日志,buffered 和 Unbuffered Logging
- 根 CA,从属证书系统 CA
- 活跃日志
- 添加新目录属性,添加新或自定义属性
- 用于部署的 CA 决策
- CA 续订服务器,续订或恢复 CA 签署证书
- root 与下级,定义证书颁发机构层次结构
- 可区分名称,规划 CA 可辨识名称
- 签名密钥,选择签名密钥类型和长度
- 签名证书,设置 CA Signing Certificate Validity Period
- 用户证书,用户证书
- 电子邮件、签名和加密,签名和加密的电子邮件
- 目录属性
- 在 CS 中支持,更改 CA-Isued 证书中的 DN 属性
- 添加新,添加新或自定义属性
- 硬件令牌,用于清理证书系统子系统密钥和证书的令牌
- 请参阅外部令牌,用于清理证书系统子系统密钥和证书的令牌
- 硬件加速器,用于清理证书系统子系统密钥和证书的令牌
- 私钥,定义,公钥加密
- 签名证书
- 缓冲的日志,buffered 和 Unbuffered Logging
- 自动撤销检查,在 CA 上启用自动撤销检查
- 自签名证书,CA 层次结构
- 规划安装,规划 PKI 的检查列表
- 设置
- 证书
- 证书管理器
- CA 层次结构,从属证书系统 CA
- CA 签名证书,CA 签署证书
- KRA 和,为 Lost 密钥计划:密钥归档和恢复
- 作为 root CA,从属证书系统 CA
- 作为从属 CA,从属证书系统 CA
- 克隆,CA Cloning
- 链到第三方 CA,链接的 CA
- 证书配置集
- Windows 智能卡登录,使用 Windows 智能卡登录配置文件
- 身份验证
- password-based,基于密码的身份验证
- 另请参阅客户端身份验证,基于证书的身份验证
- 另请参阅服务器身份验证,基于证书的身份验证
- 基于证书的,基于证书的身份验证
- 客户端和服务器,身份验证确认一个身份
- 轮转日志文件
- 部署计划
- CA 决策
- root 与下级,定义证书颁发机构层次结构
- 可区分名称,规划 CA 可辨识名称
- 签名密钥,选择签名密钥类型和长度
- 签名证书,设置 CA Signing Certificate Validity Period
- 令牌管理,使用证书系统进行智能卡令牌管理
- 配置文件,CS.cfg Files
- CS.cfg,CS.cfg 配置文件概述
- 链接的 CA,链接的 CA
- 错误日志
A
- Accelerators,用于清理证书系统子系统密钥和证书的令牌
- algorithm
- 加密,加密和解密
C
- CA
- certificate,证书类型
- trusted,CA 证书如何建立信任
- 定义,一个证书标识了 someone 或 something
- 层次结构和 root,CA 层次结构
- CA 可扩展性,CA Cloning
- CA 层次结构,从属证书系统 CA
- CA 签名证书,CA 签署证书,设置 CA Signing Certificate Validity Period
- CA 链,链接的 CA
- CRL
- CRL 签名证书,其他签名证书
- CS.cfg,CS.cfg Files
- 注释和 TPS,CS.cfg 配置文件概述
D
- DER-encoding 顺序,更改 DER-Encoding 顺序
E
- encryption
- public-key,公钥加密
- symmetric-key,symmetric-Key 加密
- 定义,加密和解密
- extensions
- 结构,证书扩展结构
K
- keys
- KRA
- 证书管理器和,为 Lost 密钥计划:密钥归档和恢复
L
- logging
- buffered vs. unbuffered,buffered 和 Unbuffered Logging
- 日志文件
- 日志类型,日志
- Error,Tomcat 错误和访问日志
- 日志级别,日志级别(Message Categories)
- 它们与消息类别的关系,日志级别(Message Categories)
- 选择正确的级别的信号,日志级别(Message Categories)
- 默认选择,日志级别(Message Categories)
- 记录的服务,已登录的服务
P
- password
- 使用 进行身份验证,身份验证确认一个身份
- password.conf
- PKCS rebased 支持,用于清理证书系统子系统密钥和证书的令牌
- ports
R
- root 与从属 CA,定义证书颁发机构层次结构
- RSA,选择签名密钥类型和长度
S
- s/MIME 证书,证书类型
- SSL/TLS
- 客户端证书,证书类型
- SSL/TLS 客户端证书,SSL/TLS 服务器和客户端证书
- SSL/TLS 服务器证书,SSL/TLS 服务器和客户端证书
T
- TPS
- CS.cfg 文件中的注释,CS.cfg 配置文件概述
- Windows 智能卡登录,使用 Windows 智能卡登录配置文件
W
- Windows 智能卡登录,使用 Windows 智能卡登录配置文件
附录 A. 修订历史记录
修订历史 | |||
---|---|---|---|
修订 10.3-0 | Tue Feb 22 2022 | Florian Delehaye | |
| |||
修订 10.2-0 | Wed Jul 14 2021 | Florian Delehaye | |
| |||
修订 10.1-2 | Fri Feb 27 2021 | Florian Delehaye | |
| |||
修订 10.1-1 | Mon Jan 25 2021 | Florian Delehaye | |
| |||
修订 10.1-0 | Wed Dec 3 2020 | Florian Delehaye | |
| |||
修订 10.0-1 | Tues Nov 3 2020 | Florian Delehaye | |
| |||
修订 10.0-0 | Thur Sep 17 2020 | Florian Delehaye | |
|