有为青年

在生命的旅途中,感悟岁月的深度与珍贵,追求内心的平静与成长。

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

```

均正常,客户端登录才算真正恢复。