Java 8迁移至Java 11时sun.security相关类缺失,需引入何种依赖包?
Java 8迁移至11:解决sun.security相关类缺失问题
核心说明
sun.security.tools.keytool.CertAndKeyGen与sun.security.x509.X500Name属于JDK内部非公开API,Java 9及后续版本将其隐藏或移除,不建议继续依赖这类内部API,长期来看存在兼容性风险。
推荐方案:替换为标准API
直接改用Java官方提供的标准安全API,无需额外依赖:
- 替换
CertAndKeyGen:使用java.security.KeyPairGenerator生成密钥对,结合java.security.cert.CertificateFactory构建证书 - 替换
X500Name:使用javax.security.auth.x500.X500Principal处理X.500名称
临时过渡方案:添加依赖保留原有代码
如果因业务限制无法立即修改代码,可通过以下Maven依赖引入对应JDK模块(仅适用于OpenJDK 11环境):
<dependency> <groupId>org.openjdk.jdk</groupId> <artifactId>jdk.crypto.cryptoki</artifactId> <version>11</version> <scope>system</scope> <systemPath>${java.home}/lib/ext/jdk.crypto.cryptoki.jar</systemPath> </dependency>
注意:system依赖的路径需匹配本地JDK 11的实际安装位置,且该方案不具备跨环境通用性,仅作为临时过渡使用。
内容的提问来源于stack exchange,提问作者eastwater
相关产品推荐
相关产品推荐

