OSX: параметр trustAnchors должен быть не пустым - PullRequest
0 голосов
/ 24 октября 2018

Я использую macOS 10.12.6 (16G1510).Мой Java:

$ java -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (3):
    1.8.0_172, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
    1.6.0_65-b14-468, x86_64:   "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.6.0_65-b14-468, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home

Существует /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security/cacerts, но нет подпапки security в /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home/lib/.

Я нашел исправление cd $(/usr/libexec/java_home -v 1.7)/jre/lib/security ln -fsh /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts из здесь .но в этом случае /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home/jre/lib/security/cacerts существует и будет перезаписан.

Когда я запускаю искровое задание в scala, я получаю следующую ошибку:

ForkJoinPool-1-worker-13, handling exception: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

Я искал иобнаружил, что что-то может отсутствовать в /etc/ssl/certs/java/cacerts, но это для Ubuntu.Я понятия не имею, как проверить и исправить эту проблему в Mac.Кстати, в моем mac нет каталога /etc/ssl/certs/java.

Любые идеи приветствуются.Спасибо

ОБНОВЛЕНИЕ

Теперь, /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home/jre/lib/security/cacerts -> /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts.Проблема НЕ решена.

И я обнаружил, /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts не существует.

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Это незначительное отклонение от моего ответа на "Обновление java 6 cacerts с теми из java 8

Ситуация: Необходимо использовать jdk6 локально для сравнительного тестирования.Наблюдение: все загрузки, инициированные maven, завершились неудачно с peer not authenticated. Проблема: ключевые файлы безопасности установки jdk6 разрешены в несуществующие местоположения.

Версии вещей:

working $ $mvn --version
Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 09:22:22-0600)
Maven home: /usr/local/Cellar/maven@3.1/3.1.1/libexec
Java version: 1.6.0_65, vendor: Apple Inc.
Java home: /Library/Java/JavaVirtualMachines/jdk1.6.0_65.jdk/Contents/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "mac os x", version: "10.13.6", arch: "x86_64", family: "mac"

A рабочее решение: заменить поврежденные символические ссылки ссылками на соответствующие файлы в (работающем) jdk

# store path to java 6 home
tmp $ j6Security=$(/usr/libexec/java_home -v '1.6*')/lib/security;

# show pre-update state
tmp $ ls -la  "$j6Security"
total 16
drwxr-xr-x  10 root  wheel    320 Jan 20 19:39 .
drwxr-xr-x  41 root  wheel   1312 Jan 20 19:39 ..
-rw-r--r--   1 root  wheel   2469 Jul 14  2015 US_export_policy.jar
lrwxr-xr-x   1 root  wheel     79 Jan 20 19:39 blacklist -> /System/Library/Java/Support/Deploy.bundle/Contents/Home/lib/security/blacklist
lrwxr-xr-x   1 root  wheel     81 Jan 20 19:39 cacerts -> /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts
-rw-r--r--   1 root  wheel   3443 Jul 14  2015 java.policy
-rw-r--r--   1 root  wheel  13458 Jul 14  2015 java.security
-rw-r--r--   1 root  wheel   2486 Jul 14  2015 local_policy.jar
-rw-r--r--   1 root  wheel    347 Jul 14  2015 sunpkcs11-macosx.cfg
lrwxr-xr-x   1 root  wheel     87 Jan 20 19:39 trusted.libraries -> /System/Library/Java/Support/Deploy.bundle/Contents/Home/lib/security/trusted.libraries

# store path to current (i.e., switcher) home
tmp $ jXSecurity=/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security;

# replace (broken) j6 files with symlink to current files
tmp $ for file in blacklist cacerts trusted.libraries; do src="${jXSecurity}/${file}" tgt="${j6Security}/${file}"; test -f $tgt && sudo rm $tgt; sudo ln -s "$src" "$tgt"; done

# show post-update state
tmp $ ls -la "$j6Security"
total 16
drwxr-xr-x  10 root  wheel    320 Jan 20 20:33 .
drwxr-xr-x  41 root  wheel   1312 Jan 20 19:39 ..
-rw-r--r--   1 root  wheel   2469 Jul 14  2015 US_export_policy.jar
lrwxr-xr-x   1 root  wheel     87 Jan 20 20:33 blacklist -> /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/blacklist
lrwxr-xr-x   1 root  wheel     85 Jan 20 20:33 cacerts -> /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts
-rw-r--r--   1 root  wheel   3443 Jul 14  2015 java.policy
-rw-r--r--   1 root  wheel  13458 Jul 14  2015 java.security
-rw-r--r--   1 root  wheel   2486 Jul 14  2015 local_policy.jar
-rw-r--r--   1 root  wheel    347 Jul 14  2015 sunpkcs11-macosx.cfg
lrwxr-xr-x   1 root  wheel     95 Jan 20 20:33 trusted.libraries -> /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/trusted.libraries

Сначала я прикрепил к java 8, что-то вроде j8Security=$(/usr/libexec/java_home -v '1.8*') вместо jXSecurity=/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/trusted.libraries. Кроме того, вместо ссылок вы можете просто скопировать файлы. (Копирование «мне показалось» хуже, но ссылка на конкретную рабочую версию кажется более безопасной. Я просто пытался узнать, как настраивался macos, и где остановился.Я остановился.)

Я изо всех сил пытался найти точное решение в сети, но кое-что, что привлекло мое внимание и, кажется, стоит выделить: * Если тип cacerts хранилище изменено * в будущих версиях Java, ссылка на «текущую» версию (виртуальная версия, автоматически обновляемая Java-плагином) может вызвать проблемы.Если это касается вас, вероятно, лучше закрепить (или скопировать).(Мой основной jdk - jdk8, и я не вижу новой версии для своей работы на горизонте.: L)

Для тех, кто любит однострочники bash при выполнении работы:

ls -la "$j6Security"; j6Security=$(/usr/libexec/java_home -v '1.6*')/lib/security; jXSecurity=/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security; for file in blacklist cacerts trusted.libraries; do src="${jXSecurity}/${file}" tgt="${j6Security}/${file}"; test -f $tgt && sudo rm $tgt; sudo ln -s "$src" "$tgt"; done; ls -la "$j6Security"

или только команды

ls -la "$j6Security"
j6Security=$(/usr/libexec/java_home -v '1.6*')/lib/security
jXSecurity=/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security
for file in blacklist cacerts trusted.libraries; do
  src="${jXSecurity}/${file}" tgt="${j6Security}/${file}"
  test -f $tgt && sudo rm $tgt
  sudo ln -s "$src" "$tgt"
done
ls -la "$j6Security"

Примечания: - Кавычки необходимы около $jXSecurity, так как пространство в «интернет-плагинах» необходимо сохранить.(Присвоение не требует кавычек, потому что пробел освобождается обратной косой чертой (\).) - Я попытался переустановить.- Устаревший установщик macos java 6 доступен по адресу https://support.apple.com/downloads/java-6. - У меня было 1.6.0_37-b06-434.jdk/ на моем компьютере из многих предыдущих обновлений ОС, и он сломался аналогичным образом.(Это была версия, которую я использовал, когда впервые столкнулся с проблемой. Я нашел новую версию только при изучении межтрубных каналов.)

0 голосов
/ 29 октября 2018

У меня была похожая проблема.Я добавил следующее в ~ / .bash_profile

export JAVA_HOME=$(/usr/libexec/java_home)
export JAVA_TOOL_OPTIONS="-Djavax.net.ssl.trustAnchors=$JAVA_HOME/jre/lib/security/cacerts -Djavax.net.ssl.trustStore=$JAVA_HOME/jre/lib/security/cacerts"

Затем source ~/.bash_profile

, чтобы загрузить изменения.

...