CentOS 8 安装 Apache WSS4J 指南

在 CentOS 8 上从零安装 Apache WSS4J 3.0.6,重点解决 EOL 后 mirrorlist 失效与 JDK 默认指向 1.8 两大拦路虎:vault 换源、java-17-openjdk-devel 安装、显式 JAVA_HOME、密钥库生成与组合验证,命令回显均实测通过。

Apache WSS4JApache WSS4J2026/10/15

CentOS 8 安装 Apache WSS4J 指南

目标:在 CentOS 8 上从零搭建 Apache WSS4J 3.0.6 的开发与运行环境(JDK 17 + Maven 3.5.4),重点解决 CentOS 8 停服后软件源失效与默认 JDK 指向 1.8 两大问题,并跑通签名与加密的组合验证;本文全部命令与回显均已在 CentOS 8 实测通过。

CentOS 8 已于 2021 年底停止维护(EOL),官方 mirrorlist 服务已下线,直接 dnf makecache 会失败;同时 el8 的 maven 包会把 JDK 8 拉为默认 Java,不显式指定 JAVA_HOME 时 Maven 会跑在 JDK 8 上而无法编译 WSS4J 3.0.6(其基线为 JDK 11)。本文按「换源 → 装 JDK 17 → 装 Maven → 显式 JAVA_HOME → 密钥库 → 验证」的顺序完整走通。

一、环境信息

本节先固定可复现的基线环境,后续所有命令均在此环境执行。

  • 操作系统:CentOS Linux release 8.4.2105(/etc/centos-release 实测)
  • 架构:x86_64
  • JDK:java-17-openjdk 17.0.1(dnf 包 java-17-openjdk-devel;系统默认 java 初始指向 1.8.0_312,需手工切换)
  • 构建工具:Apache Maven 3.5.4(Red Hat 3.5.4-5,el8 官方源最新)
  • 组件版本:Apache WSS4J 3.0.6(org.apache.wss4j:wss4j-ws-security-dom:3.0.6)
  • 软件源:阿里云 centos-vault(https://mirrors.aliyun.com/centos-vault/)
  • 验证用工作目录:/root/wss4j-demo(工程)、/root/keystores(密钥库目录)

系统与架构确认(实时回显):

cat /etc/centos-release && uname -m
CentOS Linux release 8.4.2105
x86_64

💡 说明:el8 源内 JDK 17 为 17.0.1(8.5.2111 vault 冻结版),与 Ubuntu 22.04 的 17.0.20.1 存在小版本差异,对 WSS4J 3.0.6 的功能与算法支持没有影响,本文全部验证在 17.0.1 上跑通。

二、前置条件

本节说明安装前必须满足的条件与网络连通性现状。

  1. 具有 root 或 sudo 权限的 CentOS 8 系统。
  2. 可访问阿里云镜像站 mirrors.aliyun.com(EOL 后的主要软件源出口)。
  3. 可访问 Maven 中央仓库 repo1.maven.org(本文实测网络直连可达)。
  4. 至少 2 GB 可用磁盘空间(JDK 17 + Maven + WSS4J 依赖合计约 700 MB)。

连通性确认(实时回显):

curl -sI --max-time 20 https://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/x86_64/os/repodata/repomd.xml | head -1
curl -sI --max-time 20 https://repo1.maven.org/maven2/org/apache/wss4j/ | head -1
HTTP/2 200
HTTP/1.1 200 OK

三、版本选型说明

版本谱系与选型逻辑与 Ubuntu 篇一致,此处只给结论与关键差异,完整论证见第 1 篇《Ubuntu 22.04 安装 Apache WSS4J 指南》第三章。

版本线最新版JDK 基线(父 POM 实测)本文实测结论
2.4.x2.4.4JDK 8适合无法脱离 1.8 的老服务器
3.0.x(当前主线)3.0.6JDK 11本文采用,JDK 17.0.1 实测兼容
4.0.x4.0.2JDK 17全量最新,需 JDK 17 及以上

CentOS 8 特有的两点约束:

  • el8 源内最高 JDK 是 java-17-openjdk(17.0.1),满足 3.0.6 与 4.0.x 的基线要求,本文选 3.0.6 与其余篇章保持一致。
  • el8 源内 Maven 固定为 3.5.4,低于 Ubuntu 22.04 的 3.6.3。实测 3.5.4 在 JDK 17 上运行正常,配合 maven-compiler-plugin 3.11.0(要求 Maven 3.2.5+)可正常编译 release=17。

💡 技术拓展:WS-Security 实现方案的选型对比(WSS4J / CXF / Spring WS Security / JWT)见第 1 篇第三章拓展表。本文采用 Apache WSS4J 3.0.6(wss4j-ws-security-dom 模块),理由同前:纯 DOM 进出、不绑定应用框架,是学习与自研网关的首选底座。

四、方案 A:Maven 依赖安装(在线,推荐)

4.1 方案说明

方案 A 的链路是:先把失效的官方源切到阿里云 centos-vault → dnf 安装 java-17-openjdk-devel 与 maven → 显式 JAVA_HOME 把 Maven 绑到 JDK 17 → 在 pom.xml 中声明 WSS4J 依赖 → 生成密钥库 → 编译运行验证。

4.2 修复软件源:vault 换阿里云

CentOS 8 停服后,镜像内置 repo 文件指向的 mirrorlist.centos.org 已下线,不换源时 dnf makecache 的实测报错:

dnf makecache 2>&1 | tail -4
Errors during downloading metadata for repository 'appstream':
  - Curl error (6): Couldn't resolve host name for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream [Could not resolve host: mirrorlist.centos.org]
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: Curl error (6): Couldn't resolve host name for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream [Could not resolve host: mirrorlist.centos.org]

修复方式:注释掉 mirrorlist=,启用 baseurl= 并指向阿里云 centos-vault。注意 vault 按完整小版本号归档(如 8.5.2111),而 repo 文件里的 $contentdir/$releasever 展开为 centos/8 并不存在,必须一并替换:

sed -i -e "s|mirrorlist=|#mirrorlist=|g" \
       -e "s|#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com/centos-vault|g" \
       -e "s|\$contentdir/\$releasever|8.5.2111|g" \
       /etc/yum.repos.d/CentOS-Linux-*.repo

核对替换结果(以 BaseOS 为例):

grep -m2 -E "^(#?baseurl|mirrorlist)" /etc/yum.repos.d/CentOS-Linux-BaseOS.repo
baseurl=https://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/$basearch/os/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra

重建缓存验证换源生效:

dnf makecache 2>&1 | tail -2
Last metadata expiration check: 0:00:01 ago on Thu Oct 15 11:34:34 2026.
Metadata cache created.

⚠️ 注意:8.5.2111 是 vault 上 CentOS 8 的最终归档版本,无论本机 /etc/centos-release 是 8.4.2105 还是其他 8.x 小版本,统一指向 8.5.2111 即可(包向下兼容,实测安装无冲突)。若所在网段需经代理出网,先 export http_proxy=http://192.168.1.62:7897 https_proxy=http://192.168.1.62:7897 再执行 dnf/curl。

4.3 安装 JDK 17

dnf install -y java-17-openjdk-devel 2>&1 | tail -2
  java-17-openjdk-devel-1:17.0.1.0.12-2.el8_5.x86_64
  java-17-openjdk-headless-1:17.0.1.0.12-2.el8_5.x86_64

确认两个版本并存,默认仍指向 1.8(这是 el8 的常态,先看清楚再切):

java -version 2>&1 | head -1
ls -d /usr/lib/jvm/java-17-openjdk*
openjdk version "1.8.0_312"
/usr/lib/jvm/java-17-openjdk
/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64

4.4 安装 Maven 并显式 JAVA_HOME

dnf install -y maven 2>&1 | tail -2
  maven-3.5.4-5.module_el8.5.0+927+4b7d0ffd.noarch
  xorg-x11-fonts-Type1-7.5-19.el8.noarch

不设置 JAVA_HOME 时,Maven 实测绑定到 JDK 8(mvn -v 回显 Java version: 1.8.0_312),编译 release=17 的工程会直接失败。显式导出后确认绑定:

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH
java -version 2>&1 | head -1
mvn -v | head -3
openjdk version "17.0.1" 2021-10-19 LTS
Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java version: 17.0.1, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64

⚠️ 注意:export 只对当前会话生效。要让服务长期生效,把两行 export 写入 /etc/profile.d/jdk17.sh;每个执行构建/运行的登录会话(含计划任务环境)都要能看到这两个变量。这是 el8 与 Ubuntu 最大的差异点:Ubuntu 的 Maven 留空 JAVA_HOME 也能自动定位,el8 必须显式设置。

验证点:mvn -v 的 Java version 一行显示 17.0.1 才算切换成功。

4.5 创建工程并引入依赖

mkdir -p /root/wss4j-demo/src/main/java/demo && cd /root/wss4j-demo

pom.xml(完整内容,文件路径 /root/wss4j-demo/pom.xml,与 Ubuntu 篇完全一致):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>demo</groupId>
  <artifactId>wss4j-demo</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.release>17</maven.compiler.release>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.wss4j</groupId>
      <artifactId>wss4j-ws-security-dom</artifactId>
      <version>3.0.6</version>
    </dependency>
    <!-- 仅用于让 slf4j 输出可读日志,不影响功能 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>2.0.19</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
      </plugin>
    </plugins>
  </build>
</project>

逐项说明:

  • wss4j-ws-security-dom:3.0.6:唯一必选依赖,BouncyCastle(bcprov-jdk18on 1.82)经 cryptacular 传递引入,实测传递依赖共 36 个 jar。
  • maven.compiler.release=17:WSS4J 3.0.6 基线 JDK 11,宿主 JDK 17.0.1 编译运行均兼容。
  • maven-compiler-plugin 3.11.0:el8 自带 Maven 3.5.4 默认绑定的 compiler 插件更老,同样必须显式固定(3.11.0 要求 Maven 3.2.5+,3.5.4 满足)。
  • slf4j-simple 2.0.19:与 slf4j-api 同版本,缺省时只有一条 NOP 警告,功能不受影响。

验证依赖树(实测首 8 行):

cd /root/wss4j-demo && mvn -B dependency:tree 2>&1 | grep -E "wss4j-demo:jar|wss4j|xmlsec|slf4j" | head -8
[INFO] demo:wss4j-demo:jar:1.0.0
[INFO] \- org.apache.wss4j:wss4j-ws-security-dom:jar:3.0.6:compile
[INFO]    +- org.apache.wss4j:wss4j-ws-security-common:jar:3.0.6:compile
[INFO]    |  +- org.slf4j:slf4j-api:jar:2.0.19:compile
[INFO]    |  +- org.apache.santuario:xmlsec:jar:3.0.6:compile

4.6 生成自签密钥库(JKS + BCFKS)

命令与 Ubuntu 篇一致(口令统一 q1w2e3r4),此处给完整执行序与实测回显。客户端 JKS:

mkdir -p /root/keystores && cd /root/keystores
keytool -genkeypair -alias client -keyalg RSA -keysize 2048 -sigalg SHA256withRSA \
  -validity 3650 -dname "CN=client.demows.example,O=Demo,L=Beijing,C=CN" \
  -keystore client.jks -storetype JKS -storepass q1w2e3r4 -keypass q1w2e3r4
Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 3650
        for: CN=client.demows.example, O=Demo, L=Beijing, C=CN

服务端 BCFKS(需挂 BouncyCastle 提供者,jar 从本地 Maven 仓库取):

BC=~/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.82/bcprov-jdk18on-1.82.jar
keytool -genkeypair -alias server -keyalg RSA -keysize 2048 -sigalg SHA256withRSA \
  -validity 3650 -dname "CN=server.demows.example,O=Demo,L=Beijing,C=CN" \
  -keystore server.bcfks -storetype BCFKS \
  -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider \
  -providerpath $BC \
  -storepass q1w2e3r4 -keypass q1w2e3r4
Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 3650
        for: CN=server.demows.example, O=Demo, L=Beijing, C=CN

导出证书并合成信任库:

keytool -exportcert -alias client -keystore client.jks -storepass q1w2e3r4 -rfc -file client.cer
keytool -exportcert -alias server -keystore server.bcfks \
  -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider \
  -providerpath $BC -storepass q1w2e3r4 -rfc -file server.cer
keytool -importcert -alias client -file client.cer -keystore trust.jks -storetype JKS -storepass q1w2e3r4 -noprompt
keytool -importcert -alias server -file server.cer -keystore trust.jks -storetype JKS -storepass q1w2e3r4 -noprompt
ls -l /root/keystores
Certificate stored in file <client.cer>
Certificate stored in file <server.cer>
Certificate was added to keystore
Certificate was added to keystore
-rw-r--r-- 1 root root 1205 Oct 15 11:15 client.cer
-rw-r--r-- 1 root root 2188 Oct 15 11:15 client.jks
-rw-r--r-- 1 root root 2698 Oct 15 11:15 server.bcfks
-rw-r--r-- 1 root root 1205 Oct 15 11:15 server.cer
-rw-r--r-- 1 root root 1765 Oct 15 11:17 trust.jks

💡 技术拓展:JKS/PKCS12/BCFKS 三种密钥库格式的对比与选型(BCFKS 需挂 provider、JKS 生态最广、PKCS12 跨语言互通)见第 1 篇 4.5 节拓展表。本文采用 JKS(客户端)+ BCFKS(服务端),实测 WSS4J Merlin 通过 keystore.provider=BC 属性即可加载 BCFKS。

4.7 最小验证代码与运行

验证程序与 Ubuntu 篇 4.6 节的 WssDemo.java 完全相同(构造 SOAP 报文 → 时间戳 → 摘要 UsernameToken → 签名 → WSSecurityEngine 验证),直接从该篇复制到 /root/wss4j-demo/src/main/java/demo/WssDemo.java 即可,此处不再重复源码。要点回顾:main 第一行必须 Init.init();回调统一返回口令 q1w2e3r4;纯 DOM 进出,不依赖任何应用服务器。

编译运行(注意每个新会话都要先带 4.4 节的两行 export):

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH
cd /root/wss4j-demo && mvn -q -B compile exec:java -Dexec.mainClass=demo.WssDemo
验证通过,处理到的安全动作 = [TS, UT, SIGN, BST]

结果解读:验证侧依次处理了时间戳(TS)、UsernameToken(UT)、XML 签名(SIGN)与直附证书(BST),签名值实测 256 字节(RSA 2048 位)。若终端中文显示为问号,属 C locale 的显示问题,加 LANG=C.UTF-8 与 -Dfile.encoding=UTF-8 即可(见 4.8 节)。

4.8 编码与 locale

el8 默认 locale 常为 POSIX/C,Java 中文输出会变问号。实测两种修复方式:

locale -a | grep -i "c.utf8"
C.utf8

会话级(推荐随命令一起执行):

LANG=C.UTF-8 java -Dfile.encoding=UTF-8 -cp target/classes:$(mvn -q -B help:evaluate -Dexpression=localRepository -DforceStdout)/org/apache/wss4j/wss4j-ws-security-dom/3.0.6/wss4j-ws-security-dom-3.0.6.jar WssDemo

或在 /etc/locale.conf 写入 LANG=C.UTF-8 后重新登录。编码问题只影响显示,不影响签名/加密的正确性(XML 内部统一 UTF-8 处理)。

五、方案 B:jar 直用(离线友好)

WSS4J 3.0.6 传递依赖共 36 个 jar,离线场景下先在联网机器导出目录,再整体拷贝到 CentOS 服务器。

5.1 导出依赖 jar 集合

在联网机器(如 4.5 节工程内):

cd /root/wss4j-demo && mvn -q -B dependency:copy-dependencies -DoutputDirectory=/root/wss4j-libs
ls /root/wss4j-libs | wc -l
36

5.2 javac 编译与 java 运行

把 Ubuntu 篇 4.6 节的 WssDemo.java 拷到 /root/jar-run,去 package 行后编译运行:

mkdir -p /root/jar-run/out && cd /root/jar-run
cp /root/wss4j-demo/src/main/java/demo/WssDemo.java .
sed -i "s|package demo;||" WssDemo.java
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk && export PATH=$JAVA_HOME/bin:$PATH
javac -encoding UTF-8 -cp "/root/wss4j-libs/*" -d out WssDemo.java
LANG=C.UTF-8 java -Dfile.encoding=UTF-8 -cp "out:/root/wss4j-libs/*" WssDemo
验证通过,处理到的安全动作 = [TS, UT, SIGN, BST]

验证点:-cp "/root/wss4j-libs/*" 的引号不能省(否则 shell 展开通配符导致报错);无 NoClassDefFoundError 即可用。jar 集合内若没有 slf4j-simple,运行首行会多一条 SLF4J(W): No SLF4J providers were found 警告,功能不受影响。

5.3 jar 直用时的 BCFKS 注意事项

jar 直跑时 keytool 生成 BCFKS 依旧需要 -providerpath /root/wss4j-libs/bcprov-jdk18on-1.82.jar(libs 目录里已带 bcprov)。运行侧代码里 Merlin 属性写 org.apache.wss4j.crypto.merlin.keystore.provider=BC 即可加载,实测与 Maven 方案行为一致。

六、方案对比与选择建议

维度方案 A:Maven 依赖方案 B:jar 直用
依赖解析自动(36 个 jar 全自动下载)手工导出/拷贝整个 libs 目录
是否联网首次构建需联网(走换源后的 dnf + 中央仓库)仅导出/校验时需要联网
版本管控pom 统一声明靠 jar 文件名区分
Maven 版本敏感性受本机 Maven 3.5.4 约束与 Maven 无关,只要 JDK 17
适用场景常规开发、持续集成离线网段、无构建体系的老服务器

选型建议:el8 上 Maven 只有 3.5.4,若团队构建脚本依赖新版 Maven 特性,可改用「方案 B + 手工 javac」绕开 Maven 版本问题;其余场景仍建议方案 A,把版本信息留在 pom 里可审计。

七、基础配置

  • JAVA_HOME(el8 必须显式):export JAVA_HOME=/usr/lib/jvm/java-17-openjdk;长期生效写入 /etc/profile.d/jdk17.sh。实测留空时 Maven 绑定 1.8.0_312,编译 release=17 必失败。
  • 软件源:/etc/yum.repos.d/CentOS-Linux-*.repo 已指向 https://mirrors.aliyun.com/centos-vault/8.5.2111/;后续 dnf 安装均走该源。
  • 代理:需经代理出网的环境,在 /etc/profile.d/proxy.sh 写 export http_proxy=http://192.168.1.62:7897 https_proxy=http://192.168.1.62:7897,dnf/curl/Maven 均自动继承。
  • 密钥库路径:/root/keystores/(演示);生产建议 /etc/yourapp/keys/ 并 chmod 600。

八、验证清单

检查项预期(实测值)不符时排查
dnf makecacheMetadata cache created.回看 4.2 节 sed 是否漏了 $contentdir/$releasever 替换
java -version17.0.1(非 1.8.0_312)显式 JAVA_HOME + PATH(4.4 节)
mvn -v 的 Java version 行17.0.1, vendor: Red Hat, Inc.同上;每个新会话都要重新 export
mvn dependency:treewss4j-ws-security-dom:jar:3.0.6:compile检查 pom 坐标与中央仓库连通性
keytool 生成 BCFKSGenerating 2,048 bit RSA key pair确认 -providerpath 指向 bcprov jar
最小程序输出[TS, UT, SIGN, BST]核对 Init.init() 与密钥库路径
中文输出无乱码LANG=C.UTF-8 + -Dfile.encoding=UTF-8(4.8 节)

九、常见问题(FAQ)

Q1:dnf makecache 报 Cannot prepare internal mirrorlist: Curl error (6)? mirrorlist.centos.org 已随 CentOS 8 停服下线,DNS 都不再解析。按 4.2 节 sed 切到阿里云 centos-vault,注意三条替换缺一不可(尤其 $contentdir/$releasever → 8.5.2111)。

Q2:装完 JDK 17 后 java -version 还是 1.8? el8 的 maven 包依赖 java-1.8.0-openjdk 并把 alternatives 默认指到 1.8。两种修复:本文方式(显式 JAVA_HOME=/usr/lib/jvm/java-17-openjdk 并前插 PATH,作用域可控);或 alternatives --config java 全局切默认(影响整机,慎用)。

Q3:mvn compile 报 Invalid source release: 17? Maven 还在 JDK 8 上跑。mvn -v 看 Java version 行,若为 1.8.x 说明当前会话没有 export,重新执行 4.4 节两行命令再构建。

Q4:Maven 3.5.4 太老,maven-compiler-plugin 3.11.0 兼容吗? 兼容。3.11.0 只要求 Maven 3.2.5+,实测 3.5.4 + JDK 17.0.1 正常编译 release=17 工程并运行通过全部验证。

Q5:加密时报 unsupported key transport encryption algorithm? 与操作系统无关,是程序入口漏了 org.apache.xml.security.Init.init(),算法映射表为空所致。加一行 Init.init(); 即修复,实测回显见第 1 篇 FAQ Q4 与第 3 篇 FAQ。

Q6:WSS4J 3.0.6 在 el8 上能不能用 JDK 11 跑? 可以。3.0.x 基线就是 JDK 11,dnf install java-11-openjdk-devel 后把 JAVA_HOME 指向 /usr/lib/jvm/java-11-openjdk 即可;本文选 17 是为与全系列篇章保持一致。

十、卸载与清理

移除验证工程、jar 集合与密钥库:

rm -rf /root/wss4j-demo /root/jar-run /root/wss4j-libs /root/keystores
ls /root/wss4j-demo 2>&1
ls: cannot access '/root/wss4j-demo': No such file or directory

移除 Maven 本地仓库中的 WSS4J 相关缓存(影响所有工程,慎用):

rm -rf $HOME/.m2/repository/org/apache/wss4j $HOME/.m2/repository/org/apache/santuario

卸载 JDK 与 Maven(仅当不再需要)。先以 -s 预演确认,无误后去掉 -s 真正执行:

dnf -s remove java-17-openjdk-devel maven
# 输出节选(实测首尾)
Dependencies resolved.
================================================================================================
 Package                          Architecture    Version                        Repository
================================================================================================
Removing:
 java-17-openjdk-devel            x86_64          1:17.0.1.0.12-2.el8_5          @AppStream
 maven                            noarch          3.5.4-5.module_el8.5.0+927     @AppStream

确认无误后真正卸载:

dnf remove -y java-17-openjdk-devel maven && dnf autoremove -y

十一、参考链接

  1. Apache WSS4J 官方主页:https://ws.apache.org/wss4j/
  2. WSS4J 3.0.6 Maven 中央仓库坐标:https://repo1.maven.org/maven2/org/apache/wss4j/wss4j-ws-security-dom/
  3. 阿里云 CentOS Vault 镜像说明:https://mirrors.aliyun.com/centos-vault/
  4. Apache Santuario(XML 安全引擎)官方主页:https://santuario.apache.org/
  5. WS-Security 标准规范(OASIS):https://docs.oasis-open.org/wss/v1.1/wss-v1.1-spec-os-SOAPMessageSecurity-01.htm
  6. el8 JDK 17 包信息:dnf info java-17-openjdk-devel