(tl, dr в конце) У нас есть небольшой метод, который генерирует самоподписанный сертификат SSL, и он, очевидно, зависит от sun.security.x509
. В настоящее время мы по-прежнему собираем его с использованием JDK8, хотя остальная часть кодовой базы (это всего лишь небольшая библиотека) собирается с использованием JDK11 и работает с JVM11.
К сожалению, в замене нет main JDK, согласно (и CertificateFactory
практически не имеет ничего общего с генерированием сертификатов, в отличие от того, что это javado c состояний…):
Одним из вариантов будет использование BouncyCastle, но это дополнительные 4 МБ, которые нам действительно не нужны, особенно для такой небольшой задачи, поэтому я был обдумывая способы доступа к нему, пока
Из того, что я видел, пакет и требуемые классы все еще являются пакетными, и соответствующие классы все еще там (см. sun.security.x509
на github , но при сборке (используя 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>
к 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
НО! Сейчас кажется, что я вошел (неохотно!) в модульную систему и жалуется на доступ к другим, базовым c 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 поддерживает классы?
tl, dr; Есть ли способ скомпилировать библиотеку, используя пакет sun.security.x509
под JDK 11 без системы модулей? Какой-то простой переключатель?