(tl,博士在最后)
我们有一个生成自签名 SSL 证书的小方法,它显然取决于sun.security.x509
。因此,目前我们仍在使用 JDK8 构建它,尽管代码库的其余部分(它只是一个小型的单个库)是使用 JDK11 构建并使用 JVM11 运行的。
不幸的是,根据(和CertificateFactory
与生成证书几乎没有什么关系,与 javadoc 所说的相反......):
- https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8165481 https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8165481
- https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8058778 https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8058778
一种选择是使用 BouncyCastle,但我们确实不需要额外的 4MB,特别是对于这么小的任务,所以我正在考虑如何访问它
据我所见,包和所需的类仍然是包,相关的类仍然存在(请参阅sun.security.x509在 github 上 https://github.com/AdoptOpenJDK/openjdk-jdk/tree/master/src/java.base/share/classes/sun/security/x509但在构建它时(使用 Maven)我收到错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project: Compilation failure: Compilation failure:
[ERROR] OldSelfSignedCertificateGenerator.java:[20,25] package sun.security.x509 does not exist
[ERROR] OldSelfSignedCertificateGenerator.java:[71,45] cannot find symbol
[ERROR] symbol: class X509CertInfo
[ERROR] location: class OldSelfSignedCertificateGenerator
我搜索了一下并添加:
<arg>--add-exports</arg><arg>java.base/sun.security.x509=ALL-UNNAMED</arg>
to maven-compiler-plugin
它有点起作用 - 我只得到WARNING
不考虑sun.security.x509
包裹:
[WARNING] OldSelfSignedCertificateGenerator.java:[20,25] sun.security.x509.AlgorithmId is internal proprietary API and may be removed in a future release
但!现在看来我(不情愿地!)进入了模块系统,它抱怨访问其他基本 Java 类(以及我们的另一个依赖项):
[ERROR] CertificateUtil.java:[35,17] package java.util.logging is not visible
(package java.util.logging is declared in module java.logging, but module java.base does not read it)
我尝试添加java.logging
模块以相同的方式导出,但没有取得太大成功。看来我还必须转换这个库及其对模块系统的依赖,这并不是真正想要的。
这个问题有点相关如何仅使用 JDK 支持的类生成自签名证书? https://stackoverflow.com/questions/39143858/how-to-generate-a-self-signed-certificate-using-only-jdk-supported-classes
TL,博士;
有没有办法使用编译库sun.security.x509
JDK 11下的包没有模块系统?一些简单的开关?