NetBackup Java 管理控制台 bpjava-msvc X.509 证书验证失败的排查与修复
2026-05-23
# NetBackup Java 管理控制台 bpjava-msvc X.509 证书验证失败的排查与修复
## 背景
某 NetBackup Master Server 的 Java 管理控制台登录失败,客户端弹窗提示类似:
> 连接到 bpjava-msvc 服务时,X.509 证书验证失败。
一开始容易误判为端口、服务或网络连通性问题,但本次实际根因是 NetBackup 证书链中存在过期证书,并且涉及两类证书:
1. Web / Tomcat / nbwmc 使用的 JKS 证书;
2. bpjava-msvc 握手时使用的 Host ID / Machine Certificate。
下面记录完整排查和成功修复流程。文中主机名、IP、域名均已脱敏。
---
## 环境信息
- NetBackup 角色:Master Server
- 操作系统:Linux
- 管理端:NetBackup Java Administration Console
- 报错服务:`bpjava-msvc`
- 相关端口:`1556`、`13724`
- NetBackup 安装路径:`/usr/openv`
脱敏示例:
```text
Master Server: nbu-master.example.local
Client/Admin PC: Windows Java Console
```
---
## 故障现象
Java 管理控制台输入主机名、用户名、密码后,登录失败,提示:
```text
连接到 bpjava-msvc 服务时,X.509 证书验证失败。
```
在修复过程中,客户端还曾弹出 CA 信任提示:
```text
证书由信任存储区中未列出的证书颁发机构签署。
是否要将证书颁发机构添加到信任存储区?
```
经核对,该 CA 指纹与服务端 NetBackup CA 一致,可以信任;但点击“是”之后仍然报 `bpjava-msvc` X.509 验证失败,说明问题不止客户端信任库,还存在服务端证书过期问题。
---
## 一、基础连通性检查
先确认不是网络或端口问题。
在管理端或跳板机上测试 Master Server 的关键端口:
```powershell
Test-NetConnection nbu-master.example.local -Port 1556
Test-NetConnection nbu-master.example.local -Port 13724
```
如果端口连通,例如返回:
```text
TcpTestSucceeded : True
```
说明基础网络不是主要问题。
服务端检查 NetBackup 进程:
```bash
/usr/openv/netbackup/bin/goodies/netbackup status
/usr/openv/netbackup/bin/bpps -x
```
重点关注:
```text
vnetd
nbatd
nbwmc
nbwebsvc
bpjava / bpjava-msvc
```
本次基础服务和端口都正常,因此继续查证书。
---
## 二、检查 NetBackup 证书状态
### 1. 查看本机 Host ID 证书
```bash
/usr/openv/netbackup/bin/nbcertcmd -listCertDetails
```
故障时可看到 Master Server 的 Host ID 证书已经过期,例如:
```text
Master Server : nbu-master.example.local
Host ID : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Issued By : /CN=broker/OU=root@nbu-master.example.local/O=vx
Serial Number : 0x5e91d84800000031
Expiry Date : Dec 25 06:35:21 2025 GMT
```
### 2. 查看 CA 证书
```bash
/usr/openv/netbackup/bin/nbcertcmd -listCACertDetails
```
服务端 CA 本身未过期,例如:
```text
Subject Name : /CN=nbatd/OU=root@nbu-master.example.local/O=vx
Expiry Date : Dec 08 19:45:39 2042 GMT
SHA1 Fingerprint : 72:0D:3E:65:51:F4:39:1B:12:EC:1E:88:0B:20:7E:D5:06:01:1F:3A
```
如果客户端弹出 CA 信任提示,应先核对弹窗中的指纹是否与该输出一致。一致后再点击信任。
### 3. 预检查证书获取
```bash
/usr/openv/netbackup/bin/nbcertcmd -getCertificate -preCheck -server nbu-master.example.local
```
故障时可能返回:
```text
Failed to fetch security level for nbu-master.example.local. 8506: The certificate has expired.
Failed to fetch certificate revocation list for nbu-master.example.local. 8506: The certificate has expired.
```
这说明证书链或 CRL 刷新已经受过期证书影响。
---
## 三、排查 Web / Tomcat / nbwmc JKS 证书
NetBackup Web 管理组件使用 JKS,例如:
```text
/usr/openv/var/global/vxss/tomcatcreds/nbwebservice.jks
/usr/openv/var/global/wsl/credentials/nbwebservice.jks
```
JKS 密码通常保存在:
```text
/usr/openv/var/global/jkskey
```
检查 JKS 中 `nbwmc` alias:
```bash
for ks in \
/usr/openv/var/global/vxss/tomcatcreds/nbwebservice.jks \
/usr/openv/var/global/wsl/credentials/nbwebservice.jks; do
echo "### $ks"
/usr/openv/java/jre/bin/keytool -list -v \
-keystore "$ks" \
-storepass "$(cat /usr/openv/var/global/jkskey)" 2>/dev/null \
| egrep 'Alias name:|Owner:|Issuer:|Valid from:|SHA256:'
done
```
故障时 `nbwmc` 证书过期,例如:
```text
Alias name: nbwmc
Owner: O=vx, OU=TOMCAT@nbu-master.example.local, CN=nbu-master.example.local
Valid from: Wed Dec 25 12:28:33 CST 2024 until: Thu Dec 25 13:43:33 CST 2025
```
---
## 四、先备份证书目录
修复前先备份证书相关目录,方便回退:
```bash
mkdir -p /root/nbu-cert-fix-$(date +%Y%m%d-%H%M%S)-stores
cp -a /usr/openv/var/global/vxss/tomcatcreds \
/root/nbu-cert-fix-$(date +%Y%m%d-%H%M%S)-stores/ 2>/dev/null
cp -a /usr/openv/var/global/wsl/credentials \
/root/nbu-cert-fix-$(date +%Y%m%d-%H%M%S)-stores/ 2>/dev/null
cp -a /usr/openv/var/global/vxss/websvccreds \
/root/nbu-cert-fix-$(date +%Y%m%d-%H%M%S)-stores/ 2>/dev/null
cp -a /usr/openv/var/websvccreds \
/root/nbu-cert-fix-$(date +%Y%m%d-%H%M%S)-stores/ 2>/dev/null
```
实际操作中建议固定一个备份目录变量,避免多次 `date` 生成不同目录:
```bash
BAK=/root/nbu-cert-fix-$(date +%Y%m%d-%H%M%S)-stores
mkdir -p "$BAK"
cp -a /usr/openv/var/global/vxss/tomcatcreds "$BAK"/
cp -a /usr/openv/var/global/wsl/credentials "$BAK"/
cp -a /usr/openv/var/global/vxss/websvccreds "$BAK"/ 2>/dev/null || true
cp -a /usr/openv/var/websvccreds "$BAK"/ 2>/dev/null || true
```
---
## 五、修复 Web / Tomcat / nbwmc 证书
### 1. 重新生成 Tomcat 证书
```bash
/usr/openv/netbackup/bin/admincmd/nbcertconfig -t -user nbwebsvc -renewkeypair -f
```
成功输出:
```text
Security certificate generated successfully for tomcat.
```
但仅执行这一步后,JKS 中的 `nbwmc` alias 可能仍是旧证书,因此还需要执行 Web 证书配置脚本。
### 2. 停止 nbwmc
```bash
/usr/openv/netbackup/bin/nbwmc stop
```
`nbwmc` 影响的是 Web / Java 管理相关组件,通常不会直接停止核心备份作业进程。
### 3. 重新生成并同步 Web Server 证书
```bash
/usr/openv/wmc/bin/install/configureCerts -renew_webserver_keys
```
成功输出类似:
```text
NetBackup AT service configuration for web service user completed successfully.
NetBackup AT service configuration for web services completed successfully.
Security certificate generated successfully for tomcat.
```
### 4. 启动 nbwmc
```bash
/usr/openv/netbackup/bin/nbwmc start
```
成功输出:
```text
Starting NetBackup Web Management Console could take a couple of minutes ... started.
```
### 5. 验证 JKS 中 nbwmc 证书已更新
```bash
for ks in \
/usr/openv/var/global/vxss/tomcatcreds/nbwebservice.jks \
/usr/openv/var/global/wsl/credentials/nbwebservice.jks; do
echo "### $ks"
/usr/openv/java/jre/bin/keytool -list -v \
-keystore "$ks" \
-storepass "$(cat /usr/openv/var/global/jkskey)" 2>/dev/null \
| egrep 'Alias name:|Owner:|Issuer:|Valid from:|SHA256:'
done
```
修复后可看到 `nbwmc` 证书已经变为未来有效期,例如:
```text
Alias name: nbwmc
Owner: O=vx, OU=TOMCAT@nbu-master.example.local, CN=nbu-master.example.local
Issuer: O=vx, OU=root@nbu-master.example.local, CN=broker
Valid from: Sat May 23 13:42:47 CST 2026 until: Sun May 23 14:57:47 CST 2027
SHA256: C8:BA:01:2C:CD:CB:7C:9E:A7:5F:B9:CD:98:B7:43:F8:9D:DB:28:B5:86:0F:EA:C0:97:E1:9F:A0:4C:56:BA:5F
```
---
## 六、为什么修完 nbwmc 后仍可能报 bpjava-msvc X.509 失败?
本次踩坑点就在这里。
修复 `nbwmc` JKS 后,客户端第一次登录时弹出 CA 信任提示。核对 CA 指纹一致后点击“是”,但随后仍然提示:
```text
连接到 bpjava-msvc 服务时,X.509 证书验证失败。
```
原因是:
- `nbwmc` / Tomcat JKS 证书已经修复;
- 但 `bpjava-msvc` 实际 SSL 握手还会使用 Host ID / Machine Certificate;
- Master Server 本机 Host ID 证书仍然过期。
通过 `strings` 查看 `bpjava-msvc` 也可以看到它会查找 Host ID / Machine Certificate:
```bash
strings /usr/openv/netbackup/bin/bpjava-msvc | egrep -i 'certificate|hostid|machine|bpjava'
```
其中能看到类似信息:
```text
bpjava-msvc unable to find any hostid Certificate.
Host ID Certificate and Machine Certificate both are missing.
Certificate to be used for SSL
```
所以仅修 Web/JKS 不够,还必须处理 Host ID 证书。
---
## 七、修复 Host ID / Host Name 证书
### 1. 普通 renew 可能失败
尝试:
```bash
/usr/openv/netbackup/bin/nbcertcmd -renewCertificate -server nbu-master.example.local
```
本次返回:
```text
nbcertcmd: The -renewCertificate operation failed.
EXIT STATUS 5930: The request could not be authorized.
```
即使先执行 `bpnbat -Login -LoginType WEB` 成功登录,普通 `-renewCertificate` 仍可能失败。
### 2. 使用 force 重新获取 Host Certificate
最终成功命令是:
```bash
/usr/openv/netbackup/bin/nbcertcmd -getCertificate -force -server nbu-master.example.local
```
成功输出:
```text
Host certificate and certificate revocation list received successfully from server nbu-master.example.local.
```
### 3. 续期 Host Name-based certificates
```bash
/usr/openv/netbackup/bin/nbcertcmd -renewCertificate -hostnameCerts -server nbu-master.example.local
```
成功输出:
```text
Host name-based certificates are successfully renewed by master server nbu-master.example.local
```
### 4. 验证 Host ID 证书已更新
```bash
/usr/openv/netbackup/bin/nbcertcmd -listCertDetails
```
修复前:
```text
Serial Number : 0x5e91d84800000031
Expiry Date : Dec 25 06:35:21 2025 GMT
```
修复后:
```text
Serial Number : 0x79948392000001ad
Expiry Date : May 23 07:30:55 2027 GMT
SHA1 Fingerprint : 50:A6:13:33:4E:BF:58:24:65:8A:F2:5C:4A:82:48:BC:BD:29:5C:61
SHA256 Fingerprint : A5:25:99:0E:27:DB:35:13:19:74:14:92:9D:0C:DB:96:FF:CD:54:12:2F:EC:D8:A2:E8:F3:DA:E9:93:73:F1:06
```
---
## 八、刷新 vnetd / bpjava-msvc 入口
`bpjava-msvc` 是 transient 服务,通过 `vnetd` 拉起。Host 证书更新后,为避免旧进程或旧连接缓存影响,可以刷新 `vnetd`。
先看相关进程:
```bash
/usr/openv/netbackup/bin/bpps -x | egrep -i 'bpjava|vnetd|nbwmc|nbwebsvc'
```
低影响刷新方式:
```bash
pkill -TERM -x vnetd 2>/dev/null || true
sleep 5
/usr/openv/netbackup/bin/vnetd -standalone >/dev/null 2>&1 &
sleep 5
```
再次确认:
```bash
/usr/openv/netbackup/bin/bpps -x | egrep -i 'bpjava|vnetd|nbwmc|nbwebsvc|pbx'
```
可以看到新的 `vnetd` 进程已经起来。
> 注意:生产环境建议优先选择业务低峰期操作。本文为了降低影响,没有直接全量重启 NetBackup,只针对 Web 管理和 vnetd 相关入口做了刷新。
---
## 九、最终验证
### 1. 证书预检查
```bash
/usr/openv/netbackup/bin/nbcertcmd -getCertificate -preCheck -server nbu-master.example.local
```
成功返回:
```json
{
"errorCode": 0,
"errorMessage": "the requested operation was successfully completed",
"tokenType": ""
}
```
### 2. 检查 NetBackup 进程
```bash
/usr/openv/netbackup/bin/goodies/netbackup status
/usr/openv/netbackup/bin/bpps -x
```
确认核心进程和管理组件仍在运行:
```text
vnetd
nbatd
nbwmc
nbwebsvc
bprd
bpdbm
nbpem
nbjm
pbx_exchange
```
### 3. 客户端重新登录
在 Java 管理控制台客户端上:
1. 完全关闭 NetBackup Java Console;
2. 重新打开;
3. 如果弹出 CA 信任提示,核对指纹一致后点击“是”;
4. 再次登录 Master Server。
本次修复完成后,`bpjava-msvc` X.509 证书验证失败问题消失,Java 管理控制台恢复登录。
---
## 十、完整修复命令汇总
以下命令为脱敏后的核心流程,执行前请按实际主机名替换 `nbu-master.example.local`。
```bash
# 1. 基础状态
/usr/openv/netbackup/bin/goodies/netbackup status
/usr/openv/netbackup/bin/bpps -x
# 2. 查看证书
/usr/openv/netbackup/bin/nbcertcmd -listCertDetails
/usr/openv/netbackup/bin/nbcertcmd -listCACertDetails
/usr/openv/netbackup/bin/nbcertcmd -getCertificate -preCheck -server nbu-master.example.local
# 3. 备份证书目录
BAK=/root/nbu-cert-fix-$(date +%Y%m%d-%H%M%S)-stores
mkdir -p "$BAK"
cp -a /usr/openv/var/global/vxss/tomcatcreds "$BAK"/
cp -a /usr/openv/var/global/wsl/credentials "$BAK"/
cp -a /usr/openv/var/global/vxss/websvccreds "$BAK"/ 2>/dev/null || true
cp -a /usr/openv/var/websvccreds "$BAK"/ 2>/dev/null || true
# 4. 重建 Tomcat / Web 管理证书
/usr/openv/netbackup/bin/admincmd/nbcertconfig -t -user nbwebsvc -renewkeypair -f
/usr/openv/netbackup/bin/nbwmc stop
/usr/openv/wmc/bin/install/configureCerts -renew_webserver_keys
/usr/openv/netbackup/bin/nbwmc start
# 5. 验证 JKS
for ks in \
/usr/openv/var/global/vxss/tomcatcreds/nbwebservice.jks \
/usr/openv/var/global/wsl/credentials/nbwebservice.jks; do
echo "### $ks"
/usr/openv/java/jre/bin/keytool -list -v \
-keystore "$ks" \
-storepass "$(cat /usr/openv/var/global/jkskey)" 2>/dev/null \
| egrep 'Alias name:|Owner:|Issuer:|Valid from:|SHA256:'
done
# 6. 强制重新获取 Host ID 证书
/usr/openv/netbackup/bin/nbcertcmd -getCertificate -force -server nbu-master.example.local
# 7. 续期 Host Name-based certificates
/usr/openv/netbackup/bin/nbcertcmd -renewCertificate -hostnameCerts -server nbu-master.example.local
# 8. 验证 Host ID 证书
/usr/openv/netbackup/bin/nbcertcmd -listCertDetails
/usr/openv/netbackup/bin/nbcertcmd -getCertificate -preCheck -server nbu-master.example.local
# 9. 刷新 vnetd,避免 bpjava-msvc 使用旧入口/旧连接
pkill -TERM -x vnetd 2>/dev/null || true
sleep 5
/usr/openv/netbackup/bin/vnetd -standalone >/dev/null 2>&1 &
sleep 5
# 10. 最终进程检查
/usr/openv/netbackup/bin/bpps -x | egrep -i 'bpjava|vnetd|nbwmc|nbwebsvc|pbx|bprd|bpdbm|nbpem|nbjm'
```
---
## 总结
这次故障的关键点是不要只盯着一个证书。
本次实际存在两层问题:
1. `nbwmc` / Tomcat JKS 中的 Web 管理证书过期;
2. `bpjava-msvc` 握手使用的 Host ID 证书也过期。
因此完整修复路径是:
```text
检查端口和服务
→ 检查 NetBackup CA / Host ID / JKS 证书
→ 备份证书目录
→ 重建 Tomcat / Web / nbwmc 证书
→ 强制重新获取 Host ID 证书
→ 续期 Host Name 证书
→ 刷新 vnetd / bpjava-msvc 入口
→ 客户端重新信任 CA 并登录验证
```
如果只执行 `configureCerts -renew_webserver_keys`,可能会让 Web/JKS 证书恢复,但 Java Console 仍然在 `bpjava-msvc` 握手阶段失败。最终一定要确认:
```bash
/usr/openv/netbackup/bin/nbcertcmd -listCertDetails
/usr/openv/netbackup/bin/nbcertcmd -getCertificate -preCheck -server nbu-master.example.local
```
均正常,客户端登录才算真正恢复。