第 17 章 故障排除
本章涵盖了在安装证书系统时遇到的一些更常见用法问题。
- 问: 初始化脚本返回 OK 状态,但我的 CA 实例没有响应。这是因为什么?
- 问: 我无法打开 pkiconsole,在 stdout 中看到 Java 异常
- 问: 我尝试运行 pkiconsole,并在 stdout 中得到"Socket exceptions in stdout"。这是因为什么?
- 问: 我尝试注册证书,收到错误 "request is not submitted…Subject Name Not Found"?
- 问: 为什么我的注册证书未发布?
- 问: 如何从远程主机打开 pkiconsole 工具?
初始化脚本返回 OK 状态,但我的 CA 实例没有响应。这是因为什么?
这不应发生。通常(但不总是)这表示 CA 的监听程序问题,但它可能有许多不同原因。检查 catalina.out
、系统和调试实例的日志文件,以查看发生了哪些错误。这将列出几个常见错误。一个情况是 CA 的 PID,表示进程正在运行,但没有为服务器打开监听程序。这将在 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.jav64) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav43) at java.lang.reflect.Method.invoke(Method.jav615) at org.apache.catalina.startup.Bootstrap.load(Bootstrap.jav243) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.jav408) Caused by: java.lang.UnsatisfiedLinkError: jss4
这可能意味着您存在错误的 JSS 或 NSS 版本。这个过程需要在路径中使用 libnss3.so
。使用以下命令检查它:
# ldd /usr/lib64/libjss4.so
如果没有找到 libnss3.so
,请尝试取消设置 LD_LIBRARY_PATH
变量,然后重新启动 CA。
# unset LD_LIBRARY_PATH
# pki-server restart <instance_name>
我无法打开 pkiconsole
,在 stdout 中看到 Java 异常
这可能意味着您安装了错误的 JRE,或者 JRE 错误的 JRE 设置为默认值。运行 alternatives --config java
以查看所选的 JRE。红帽认证系统需要 OpenJDK 1.8。
我尝试运行 pkiconsole
,并在 stdout 中得到"Socket exceptions in stdout"。这是因为什么?
这意味着存在端口问题。管理端口的 SSL 设置不正确(在 server.xml
中有不当的配置),或者为访问 admin 界面提供错误的端口。端口错误类似如下:
NSS Cipher Supported '0xff04' java.io.IOException: SocketException cannot read on socket at org.mozilla.jss.ssl.SSLSocket.read(SSLSocket.jav1006) at org.mozilla.jss.ssl.SSLInputStream.read(SSLInputStream.jav70) at com.netscape.admin.certsrv.misc.HttpInputStream.fill(HttpInputStream.jav303) at com.netscape.admin.certsrv.misc.HttpInputStream.readLine(HttpInputStream.jav224) at com.netscape.admin.certsrv.connection.JSSConnection.readHeader(JSSConnection.jav439) at com.netscape.admin.certsrv.connection.JSSConnection.initReadResponse(JSSConnection.jav430) at com.netscape.admin.certsrv.connection.JSSConnection.sendRequest(JSSConnection.jav344) at com.netscape.admin.certsrv.connection.AdminConnection.processRequest(AdminConnection.jav714) at com.netscape.admin.certsrv.connection.AdminConnection.sendRequest(AdminConnection.jav623) at com.netscape.admin.certsrv.connection.AdminConnection.sendRequest(AdminConnection.jav590) at com.netscape.admin.certsrv.connection.AdminConnection.authType(AdminConnection.jav323) at com.netscape.admin.certsrv.CMSServerInfo.getAuthType(CMSServerInfo.jav113) at com.netscape.admin.certsrv.CMSAdmin.run(CMSAdmin.jav499) at com.netscape.admin.certsrv.CMSAdmin.run(CMSAdmin.jav548) at com.netscape.admin.certsrv.Console.main(Console.jav1655)
我尝试注册证书,收到错误 "request is not submitted…Subject Name Not Found"?
这大多数情况下,在自定义 LDAP 目录身份验证配置集中,它会显示目录操作失败。特别是,它失败,因为它无法构建正常工作的 DN。这个错误将位于 CA 的调试日志中。例如,此配置集使用了一个目录无法识别的自定义属性(MYATTRIBUTE
):
[14/Feb/2011:15:52:25][http-1244-Processor24]: BasicProfile: populate() policy setid =userCertSet [14/Feb/2011:15:52:25][http-1244-Processor24]: AuthTokenSubjectNameDefault: populate start [14/Feb/2011:15:52:25][http-1244-Processor24]: AuthTokenSubjectNameDefault: java.io.IOException: Unknown AVA keyword 'MYATTRIBUTE'. [14/Feb/2011:15:52:25][http-1244-Processor24]: ProfileSubmitServlet: populate Subject Name Not Found [14/Feb/2011:15:52:25][http-1244-Processor24]: CMSServlet: curDate=Mon Feb 14 15:52:25 PST 2011 id=caProfileSubmit time=13
任何自定义组件 - 属性、对象类和未注册 OID - 在主题 DN 中使用的 OID 可能会导致失败。在大多数情况下,RHC 2253 中定义的 X.509 属性应在主题 DN 中使用,而不是自定义属性。
为什么我的注册证书未发布?
这通常表示 CA 错误配置。要查找错误的主要位置是 debug 日志,它可以指示错误配置的位置。例如,映射程序有问题:
[31/Jul/2010:11:18:29][Thread-29]: LdapSimpleMap: cert subject dn:UID=me,E=me@example.com,CN=yes [31/Jul/2010:11:18:29][Thread-29]: Error mapping: mapper=com.netscape.cms.publish.mappers.LdapSimpleMap@258fdcd0 error=Cannot find a match in the LDAP server for certificate. netscape.ldap.LDAPException: error result (32); matchedDN = ou=people,c=test; No such object
在 CA 的 CS.cfg
文件中或 CA 控制台的 发布 选项卡中检查发布配置。在本例中,问题存在于 mapping 参数中,它必须指向 现有的 LDAP 后缀:
ca.publish.mapper.instance.LdapUserCertMap.dnPattern=UID=$subj.UID,dc=publish
如何从远程主机打开 pkiconsole
工具?
在某些情况下,管理员希望从远程主机打开证书系统服务器上的 pkiconsole
。为此,管理员可以使用虚拟网络计算(VNC)连接:
例如,在 Red Hat Certificate System 服务器中设置 VNC 服务器。有关远程桌面访问的详情,请参考 Red Hat Enterprise Linux 8 文档中的 远程访问桌面。
重要pkiconsole 工具无法在启用了联邦信息处理标准(FIPS)模式的服务器上运行。如果在证书系统服务器上启用了 FIPS 模式,在 Red Hat Enterprise Linux 中使用其他主机来运行 VNC 服务器。请注意,这个工具将被弃用。
在 VNC 窗口中打开
pkiconsole
工具。例如:# pkiconsole -d nssdb -n 'optional client cert nickname' https://server.example.com:8443/ca
VNC viewer 可用于不同类型的操作系统。但是,红帽只支持从集成仓库在 Red Hat Enterprise Linux 中安装的 VNC viewer。
- 当 LDAP 服务器没有响应时,我该怎么办?
如果用于内部数据库的红帽目录服务器实例没有运行,则会出现连接问题或发生 TLS 连接失败,那么您无法连接到依赖它的子系统实例。实例调试日志会特别识别 LDAP 连接的问题。例如,如果 LDAP 服务器没有在线:
[02/Apr/2019:15:55:41][authorityMonitor]: authorityMonitor: failed to get LDAPConnection. Retrying in 1 second. [02/Apr/2019:15:55:42][authorityMonitor]: In LdapBoundConnFactory::getConn() [02/Apr/2019:15:55:42][authorityMonitor]: masterConn is null. [02/Apr/2019:15:55:42][authorityMonitor]: makeConnection: errorIfDown true [02/Apr/2019:15:55:42][authorityMonitor]: TCP Keep-Alive: true java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.jav350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.jav206) [02/Apr/2019:15:55:42][authorityMonitor]: Can't create master connection in LdapBoundConnFactory::getConn! Could not connect to LDAP server host example911.redhat.com port 389 Error netscape.ldap.LDAPException: Unable to create socket: java.net.ConnectException: Connection refused (Connection refused) (-1)
在修复底层网络问题(如未插入的电缆)后,红帽目录服务器会停止,发生大量数据包丢失,或者确保可以重新创建 TLS 连接,然后启动证书系统实例。
# systemctl stop pki-tomcatd-nuxwdog@<instance_name>.service
# systemctl start pki-tomcatd-nuxwdog@<instance_name>.service