Java applet manifest-Allow allowable-Codebase

Od wersji Java 7u45 aplet będzie wyświetlał komunikat ostrzegawczy (nawet jeśli jest podpisany zaufanym certyfikatem), jeśli strona internetowa spróbuje z nim współdziałać za pomocą javascript, a ta strona nie jest wymieniona w atrybucie Caller-Allowable-Codebase manifestu.

Uwagi do wydania dotyczące tej zmiany: http://www.oracle.com/technetwork/java/javase/7u45-relnotes-2016950.html

Oracle blog post o tym błędzie: https://blogs.oracle.com/java-platform-group/entry/7u45_caller_allowable_codebase_and

Opis atrybutu: http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/manifest.html#caller_allowable

Próbowałem tylko wildcard ( * ), ale nadal dostaję Ostrzeżenie.

Czy istnieje inny sposób na obejście tego, niż lista wszystkich baz kodowych, na których może działać?

Powodem dla którego jest to dla mnie problem jest to, że ten aplet działa na wielu różnych maszynach i sieci, ale zawsze w intranetach w różnych lokalizacjach. Ten aplet musi również komunikować się z javascript, ponieważ rozmawia z lokalnymi wagami USB i wyświetla wyniki i współdziała ze stroną.

Przykład komunikatu ostrzegawczego

Aplet w pytaniu: https://github.com/JaggedJax/CIO_Scale

Author: William W, 2013-10-16

16 answers

Usunięcie atrybutu Trusted-Library wydaje się być obowiązkowe, aby uruchomić bazę kodu wywołującego, bez więcej ostrzeżeń. Powoduje to jednak złamanie kodu Java 7 Update 21 - 40, który traktował kod JavaScript wywołujący kod w podpisanym aplecie działającym z wszystkimi uprawnieniami jako mieszany kod i okna dialogowe ostrzegawcze są podnoszone, jeśli podpisane pliki JAR nie są oznaczone atrybutem Trusted-Library = true.

 26
Author: Nikolas Pooch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-16 08:53:35

Moje ustalenia są takie same:

Zapobiega to ostrzeżeniom z Java 7u21 - 7u40:

Manifest-Version: 1.0
Trusted-Library: true

To wyłącznie zapobiega ostrzeżeniom z Java 7u45:

Manifest-Version: 1.0
Application-Library-Allowable-Codebase: *
Caller-Allowable-Codebase: *

Mieszanie obu nie zadziała w 7u45.

Co teraz? Czy ktoĹ "znalazĹ ' moĹźliwoĹ" Ä ‡ zezwolenia na uruchamianie podpisanych apletăłw z "all-permissions" bez ostrzeĺźeĺ " w obu wersjach JRE? Co jest nie tak z wyrocznią?
 35
Author: fiffy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-16 09:56:21

[[0]} zostanie to naprawione w przyszłym wydaniu, zgodnie z postem na blogu oracle:

Https://blogs.oracle.com/java-platform-group/entry/7u45_caller_allowable_codebase_and

Rozpoznają błąd "oba te atrybuty powinny współpracować, aby obsługiwać różne wersje instalacji klienckich". Ale na razie ich rozwiązaniem jest: "obecne obejście polegałoby na korzystaniu z Dozwolonego kodu rozmówcy zamiast starego połączenia z zaufaną biblioteką. "

 10
Author: vbail,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-21 13:43:10

Miałem ten sam problem. Rozwiązaniem dla mnie było użycie tych samych parametrów w manifeście, co Oracle używane na stronie donwload w aplecie do weryfikacji wersji java http://www.java.com/en/download/installed.jsp Ich aplet nie wyświetla żadnych ostrzeżeń.

Więc rozwiązanie jest:


Manifest-Wersja: 1.0
Codebase: *
Permissions: all-permissions
Application-Library-Allowable-Codebase: *
Caller-Allowable-Codebase: *
Aplikacja-Nazwa: APPNAME

Działa na:
1.7.0_17-b02
1.7.0_25-b17
1.7.0_45-b18

 6
Author: user2886551,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-16 13:27:18

Z oracle:

Area: Deployment / Plugin Synopsis: Caller-Allowable-Codebase może być ignorowany, gdy jest używany z Trusted-Library.

Jeśli zaufany, podpisany jar używa atrybutu Manifest Caller-Allowable-Codebase wraz z Trusted-Library, wpis manifest Caller-Allowable-Codebase zostanie zignorowany, a w rezultacie wywołanie JavaScript -> Java wyświetli natywne Ostrzeżenie LiveConnect. Obejście polega na usunięciu manifestu zaufanej Biblioteki wejście.

Http://www.oracle.com/technetwork/java/javase/7u45-relnotes-2016950.html

 5
Author: rob2000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-16 13:23:45

Jedynym rozwiązaniem, jakie przychodzi mi na myśl, które działa z wersjami 7u45 i Trusted-Library (7u21, 7u25 i 7u40), jest utworzenie dwóch różnych słoików z różnymi manifestami, a następnie wykrycie wersji użytkownika i załadowanie właściwej.

Główna wersja serwowana do wersji przed 7u21 i 7u45 i up będzie miała nową bazę kodu wywołującego i nie będzie wpisów Trusted-Library. Druga produkowana wersja będzie miała Trusted-Library i będzie obsługiwana tylko do 7u21, 7u25 i 7u40

Oto makro ant do utworzenia nowego jar ze zmodyfikowanym manifestem:

<macrodef name="addtrustedlibrarytojar">
    <attribute name="jarpath" />
    <attribute name="newjarpath" />
    <sequential>
        <echo>Unzipping @{jarpath} to add Trusted-Library</echo>
        <mkdir dir="build/temp_trusted_library" />
        <unjar src="@{jarpath}" dest="build/temp_trusted_library" />

        <echo>Inserting Trusted-Library in manifest</echo>
        <replaceregexp match="^" replace="Trusted-Library: true${line.separator}" flags="s">
            <fileset dir="build/temp_trusted_library/META-INF" includes="MANIFEST.MF"/>
        </replaceregexp>

        <echo>Creating @{newjarpath}</echo>
        <zip file="@{newjarpath}" basedir="build/temp_trusted_library" />

        <echo>Deleting build/temp_trusted_library directory</echo>
        <delete dir="build/temp_trusted_library" />
    </sequential>
</macrodef>

Wywołanie makra w ten sposób dla każdego Jara, który wymaga zmiany:

    <addtrustedlibrarytojar jarpath="dist/myapplet.jar" newjarpath="dist/myapplet_tl.jar" />
Pamiętaj o podpisaniu nowego słoika. Jeśli został już podpisany, ta zmiana unieważni podpis.

Używamy biblioteki PluginDetect do wykrywania wersji Javy. Wystarczy wyodrębnić PluginDetect_Java_Simple.js i getJavaInfo.słoik. Kod ten otrzyma wersję Javy:

<script type="text/javascript" src="js/PluginDetect_Java_Simple.js"></script>
<script type="text/javascript">
var javaVersionDetected = '0';
function javaDetectionDone(pd) {
    javaVersionDetected = pd.getVersion("Java");
    if (console) console.info('Detected java version: ' + javaVersionDetected);
}
PluginDetect.onDetectionDone("Java", javaDetectionDone, "js/getJavaInfo.jar", null);
</script>

Używamy javascript, aby uruchomić nasze aplety, więc używamy tego do decydowania między apletami standard i trusted-library:

        if (javaVersionDetected === '1,7,0,21' || javaVersionDetected === '1,7,0,25' || javaVersionDetected === '1,7,0,40') {
            if (console) console.debug('Using TL applet');
            attribs['archive'] = 'applets/myapplet_tl.jar';
        }
        else {
            if (console) console.debug('Using normal applet');
            attribs['archive'] = 'applets/myapplet.jar';
        }
 3
Author: Sarel Botha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-21 15:02:05

Miałem ten sam problem, więc usunąłem Trusted-Library = true z manifestu.MF, work Caller-Allowable-Codebase atrybut fine.

 2
Author: user2885326,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-16 07:10:18

W przypadku aktualizacji 1.7.0_25 (i prawdopodobnie 21-40) ustawienie ustawień zabezpieczeń na Medium w zakładce Java Control Panel - > Security usuwa monit o użycie znaczników manifestu dla aktualizacji 1.7.0_45.

 2
Author: englebart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-17 11:58:17

Ten zestaw atrybutów pozwala apletowi wczytywać się bez ostrzeżeń w Javie 7u45:

Application-Name: ...
Main-Class: com...
Sealed: true
Codebase: *
Caller-Allowable-Codebase: *
Permissions: all-permissions

Przetestowaliśmy na następujących systemach JVMs:

  • Java 6u20 (OK, no cóż!)
  • Java 7u21 - musi zawierać Trusted-Library, aby uniknąć ostrzeżenia
  • Java 7u25 - musi zawierać Trusted-Library, aby uniknąć ostrzeżenia
  • Java 7u40 - musi zawierać Trusted-Library, aby uniknąć ostrzeżenia
  • Java 7u45

Więc długie i krótkie jest to, że mamy dylemat; aby nie mieć ostrzeżenia na 7u21, 7u25 i 7u40 musisz dołączyć Trusted-Library: true, a aby nie mieć ostrzeżenia na 7u45 musisz pominąć tę właściwość.

Thanks Oracle for a Kobayashi Maru-we love you.

 2
Author: Lawrence Dol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-18 21:14:15

Znajduję teraz, że niektórzy z moich użytkowników nadal otrzymują to Ostrzeżenie" mixed signed and unsigned code " (ze względu na połączenia LiveConnect na stronie internetowej do apletu), mimo że ustawiłem poprawnie bazę kodu Caller-Allowable-Codebase, a różnica między tymi, którzy go dostają, a tymi, którzy go nie dostają, polega na tym, czy mają aplet .buforowanie plików jar włączone w hoście klienta. Te, które pozwalają Javie na przechowywanie plików tymczasowych na kliencie (np. zezwalają na aplet .pliki jar do buforowania) otrzymują Ostrzeżenie, a te to wyłączyło buforowanie (ponieważ buforowanie apletów nigdy nie działało prawidłowo) nie otrzymuje Ostrzeżenia. Pomyśl.

 2
Author: Larry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-20 19:33:19

Bez użycia Trusted-Library i ustawienia:

Application-Library-Allowable-Codebase: *
Caller-Allowable-Codebase: *

Nie działa na mnie, i nadal widzę Ostrzeżenie.

Update : próbowałem również z http://... ale też nie zadziałało.

Update2 : wydaje się jeszcze gorzej. Nie zaktualizowałem 7u40 (do 7u45), ale Java console (full debug) pokazuje tekst "LiveConnect 1.7.45". Następnie Moje połączenia Javascript->Java są zablokowane.

Update 3 : zauważyłem, że moje Ostrzeżenie pokazuje aplikację i wydawcę / Align = "left" / Altought I have:

Application-Name: MyApplet
Implementation-Vendor: MyCompany

Próbowałem użyć JDK7u45 zamiast jdk7u5, którego używałem.

 1
Author: helpCrypto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-16 10:24:17

Aby wyłączyć to wyskakujące okienko "Security Warning" i inne powiązane wyskakujące okienka przy użyciu Java 8 Update 45 JRE.

Trusted-Library: true
Caller-Allowable-Codebase: *.mycompany.com

Uwaga: wyskakujące okienko z ostrzeżeniem bezpieczeństwa nie zostało wyłączone z symbolami wildcards * i*. com.

 1
Author: Saju Panikulam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-27 15:35:58

My też mieliśmy ten problem - budowaliśmy z 1.4.2, opierając się na teorii, że klienci mogą nie mieć zaktualizowanej wtyczki JRE. Pomimo wprowadzenia nowych atrybutów manifestu, nadal mamy Ostrzeżenia wyskakujące w JRE 1. 7_u45. Przebudowaliśmy z 1.6, A Ostrzeżenia zniknęły.

 0
Author: Marc Schabb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-16 06:09:35

EDIT: Jak się okazuje, nasza aplikacja robiła coś innego, jeśli plik znajdował się w innym katalogu-w szczególności nie próbowała uzyskać dostępu do manifestów jar podpisanych przez aplet. Więc fakt, że plik znajdował się w innym katalogu był nieistotny. Tak więc poniższe informacje nie są dokładne. Postanowiłem szczegółowo opisać prawdziwy powód ostrzeżenia w nowym pytaniu: począwszy od Java 7 update 45, nie można już wyszukać informacji manifestu bez wyzwalania Ostrzeżenie?

Niestety obejście problemu update 45 przez Oracle i inne firmy nie działa, jeśli aplikacja musi uzyskać dostęp do plików w innym katalogu niż ten, z którego jest uruchamiana.

Z moją aplikacją web start, wszystko działało dobrze i elegancko z atrybutem "zaufana Biblioteka", który musiał być dodany dla 7u21. Z 7u45, usunięcie atrybutu "Trusted-Library" i dodanie wszystkich dodatkowych atrybutów inne odpowiedzi nie będą działać - otrzymam to samo ostrzeżenie, które otrzymałbyś, gdybyś uruchomił 7u21 bez atrybutu Trusted-Library (stwierdzając, że aplikacja zawiera zarówno podpisany, jak i niepodpisany kod).

Zajęło mi wieczność, aby to rozgryźć, ponieważ z bardzo niewytłumaczalnych powodów Oracle postanowił nie drukować żadnych wskazań, co "unsigned" kod jest w swojej konsoli, nawet gdy działa na maksymalnym śledzeniu (poziom 5). Ale zasadniczo nasza aplikacja potrzebuje dostępu do konfiguracji plik, który może być użyty przez użytkownika do skonfigurowania właściwości aplikacji(na przykład poziomu logowania naszej aplikacji). Ten plik konfiguracyjny jest zwykłym starym plikiem tekstowym. I przechowujemy plik konfiguracyjny w katalogu, z którego pochodzi aplikacja: ..\config \ app.właściwości. Uzyskujemy dostęp do tego pliku jako część procedury INIT głównego Jara. To tutaj pojawia się Ostrzeżenie.

Obejście tutaj? Przenieś aplikację.właściwości do tego samego katalogu, z którego działa aplikacja (i zmienić odniesienie w słoiku do Tylko " app.właściwości"). Voila, to działa -- koniec z ostrzeżeniami (o ile używasz wyżej wymienionych atrybutów bazy kodowej). Co do diabła Wyrocznia???

Niestety, ponieważ nasza aplikacja pozwala dostosować pliki konfiguracyjne na podstawie użytkownika, to nie jest tak proste dla nas, aby po prostu umieścić plik konfiguracyjny w katalogu startowym aplikacji - ponieważ nie jest to dostosowane na podstawie użytkownika, będziemy mogli tylko pozwolić jeden użytkownik na maszynę do korzystania z aplikacji jednocześnie.

Przeglądałem dokumentację manifestu Javy, aby sprawdzić, czy jest jakiś sposób, aby Katalog plików konfiguracyjnych był "bezpieczny", tak aby Ładowanie tego pliku nie powodowało Ostrzeżenia. Jedyne, o czym myślę, to możliwość użycia atrybutu Class-Path lub kombinacji atrybutów rozszerzenia (http://docs.oracle.com/javase/7/docs/technotes/guides/plugin/developer_guide/extensions.html), jednak wszystkie te wydają się zaprojektowane wokół celu słoików, nie tylko zwykłych teczek...

Jakieś pomysły? A ponieważ Oracle i tak zamierza naprawić problem z zaufaną biblioteką, czy wymyślenie (potencjalnie) wspaniałego obejścia problemu jest warte wysiłku? Grrr....

 0
Author: Jon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:01:35

Znalazłem jakąś dziwną rzecz z manifestem.Plik MF w zakresie ostatniego problemu bezpieczeństwa Javy z nowym atrybutem " Caller-Allowable-Codebase ". Miałem pewne problemy, dlaczego ten nowy atrybut nie był dla mnie pomocny i zacząłem śledztwo
(Uwaga !: może to być związane tylko z konfiguracją mojego lokalnego komputera-bo nigdy nie widziałem takich problemów nad stackoverlow).

Plik manifestu został zaktualizowany zgodnie z nową funkcją bezpieczeństwa:

Manifest-Version: 1.0
Application-Library-Allowable-Codebase: *
Caller-Allowable-Codebase: *

I *.jar był zbuduj, ale Bez podpisywania.

Więc ja rozpakowałem moje *.plik jar i spojrzał w folderze META-INF w manifeście.MF, gdzie źródło manifestu.należy wygenerować mf.

I wstydziłem się braku ostatniej linijki, wyglądało to tak:

Manifest-Version: 1.0
Application-Library-Allowable-Codebase: *

Testowałem to zachowanie kilka razy i okazało się, że ostatnia linia zawsze była wymieniana na białe znaki. Tak więc, jeśli będzie to dla kogoś pomocne, po prostu dołącz na końcu manifestu.MF file some unmeaningful atrybut, jak Codebase: *, który zostanie wycięty podczas *.jar build.

 0
Author: rock_walker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-13 15:41:59

Jeśli utworzysz plik z łatką manifestu, pamiętaj, aby na końcu żyć pustą linią, w przeciwnym razie nie zadziała. Na przykład możesz zrobić łatkę w stylu:

Permissions: all-permissions
Codebase: *
Application-Library-Allowable-Codebase: *
Caller-Allowable-Codebase: *

Ale musisz dodać pusty wiersz (w przykładzie 5 wierszy zamiast czterech!)

A następnie dodać go do manifestu:

jar uvfm jarName.jar permissions.txt
 0
Author: Laura Liparulo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-06 15:19:08