Jestem programistą amatorskim. Stworzyłem aplikację, która składa się z pojedynczego, samopodpisanego pliku JAR. Aplikacja będzie używana tylko przez studentów w mojej klasie matematycznej, więc myślę, że samodzielne podpisywanie jest w porządku.podpisany plik JAR - jnlp nie wyświetla monitu o akceptację certyfikatu
Postępowałem zgodnie z instrukcjami Oracle, aby podpisać słoik, a następnie za pomocą narzędzia jarsigner zweryfikować słoik. Podobno było w porządku.
W pliku .jnlp, włączyłem tag bezpieczeństwa z napędem na wszystkie uprawnienia:
<security>
<all-permissions/>
</security>
Gdy program uruchamia jednak Nigdy wyświetlone okno dialogowe z monitem o zaakceptowanie certyfikatu lub prosząc dla pewnego rodzaju uprawnień do uruchamiania na komputerze klienckim. Rozumiem, że powinienem zobaczyć taki dialog, zgodnie z dokumentacją Oracle.
Znam tę stronę na stackoverflow:
i mam podobną sytuację, że dostaję wyjątek zabezpieczeń. W moim przypadku, jest wyjątek, gdy aplikacja próbuje pokazać okno filechooser:
java.security.AccessControlException: access denied (java.util.PropertyPermission user.home read)
To dlatego, że użytkownik nigdy nie został poproszony o dostarczenie zgody. Uważam, że postępowałem zgodnie z radą na tej stronie, ale wydaje mi się, że nie działa ona dla mnie. Wygląda na to, że słoik jest niepodpisany. Próbowałem nawet usunąć tag z wszystkimi uprawnieniami i otrzymałem dokładnie to samo zachowanie.
Zajrzałem do wnętrza słoika i widzę, że są tam dwa wymagane pliki: MYKEY.DSA i MYKEY.SF. Zajrzałem do czytelnego (.SF) i zawiera on tekst, który powinien tam być. Uważam, że to wszystko jest potrzebne do podpisania.
Więc oto moje pytania:
1) ma to znaczenie, jakie imiona są z .DSA i pliki .SF są, w odniesieniu do aplikacji? Obecnie mają po prostu nazwę aliasu używanego z keytool.
2) Czy ma znaczenie, czy wersja java na moim serwerze wynosi 1.7, podczas gdy wersja java na moim komputerze programistycznym to 1.6? Muszę skompilować w wersji 1.6, ponieważ nasza szkoła nie zaktualizowała się do wersji 1.7, więc gdy działa na komputerach klienckich, musi mieć 1.6.
3) Czy istnieje sposób określenia, której wersji jarsignera używam, gdy uruchamiam go z terminala? Próbowałem jarsigner -version, ale to nie jest jedna z opcji. Zauważyłem, że w górnej części pliku MYKEY.SF wygląda następująco:
Signature-Version: 1.0
Created-By: 1.4.2-02 (Blackdown Java-Linux Team)
SHA1-Digest-Manifest: OHMs6w/CQlG3MVYNxC7l1vTWdZw=
Name: org/arps/tranz/TranzActionMap.class
SHA1-Digest: dSI3RKfgUrRHbwnZLyXbkiJLWdU=
Czy to znaczy, że nie jest w rzeczywistości niektóre starsza wersja jarsigner biegania? Nie sądziłem, że Java 1.4 wciąż jest na moim komputerze. W każdym razie, moja wersja jarsigner wydaje się tworzyć ten sam rodzaj pliku jak widać tutaj:
http://docs.oracle.com/javase/tutorial/deployment/jar/intro.html
ja nie wiem, czy pliki tworzone przez 1,6 lub 1,7 jarsigner jarsigner wyglądać inaczej, lub jeśli to powinno mieć znaczenie.
4) Jeśli sprawcą jest wersja jarsignera, w jaki sposób wymusić uruchomienie nowszej wersji jarsignera z terminala (Ubuntu)?
Dzięki za pomoc. Jak już powiedziałem na początku, jestem amatorskim programistą. Wszystko, co naprawdę chcę zrobić, to być gotowym na moje zajęcia w przyszłym tygodniu.
UPDATE:
Po zmaga się od dłuższego czasu z narzędziem słoik, który nie mógł znaleźć libjli.so, mam teraz z powodzeniem stosowane narzędzia i jarsigner narzędzie 1,6 słoju tak, aby górna część MyKey. Plik SF wygląda następująco:
Signature-Version: 1.0
SHA1-Digest-Manifest-Main-Attributes: DGUFMaJYirZi//67NI+M5RVi63k=
Created-By: 1.6.0_03 (Sun Microsystems Inc.)
SHA1-Digest-Manifest: ZPS3aOyPW/tymxbGdfe4/qBVK/g=
Ale nadal mam takie samo zachowanie, gdy aplikacja zaczyna się uruchamiać, nie prosząc użytkownika o akceptację certyfikatu. Teraz moje główne pytanie brzmi:
Czy ma znaczenie, że słoik został utworzony z wersją 1.6, podczas gdy mój serwer obsługuje 1.7?
Nie wiem, ile faktycznie dzieje się java na serwerze. W pewnym momencie przełącza się na komputer kliencki, ale zakładam, że części jnlp występują na serwerze jako pierwsze.
Należy sprawdzić poprawność JNLP za pomocą [JaNeLA] (http://pscode.org/janela/). –