2013-09-08 83 views
5

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:

JNLP get a permission

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.

+1

Należy sprawdzić poprawność JNLP za pomocą [JaNeLA] (http://pscode.org/janela/). –

Odpowiedz

3

W odpowiedzi na konkretne pytania:

  1. jest obsługiwane automatycznie przez narzędzie słoik osoby podpisującej, nie pocić nazwiska.
  2. Wersja Java serwera nie jest istotna, chyba że serwer kompiluje kod. Ale nawet wtedy aplikacje Java. powinien być "zgodny z przodu". TO ZNACZY. Aplikacja. skompilowany w wersji 1.5, powinien działać w wersji 1.5, 1.6 & 1.7 ..
  3. Nie sądzę, że narzędzie do podpisywania słoików robi coś innego w pisaniu pliku od czasu jego utworzenia, więc wersja nie ma znaczenia.
  4. Nieistotny na podstawie punktu (3).
+0

W systemie Mac OS X można usunąć wcześniej zaakceptowany certyfikat z pęku kluczy; nie jestem pewien co do systemu Windows. – trashgod

+0

@trashgod Chociaż jest tak również w systemie Windows, należy zauważyć, że "wyjątek dotyczący wciąż uzyskiwanych wyjątków" zwykle wskazuje, że certyfikat nie znajduje się w pamięci podręcznej jako "zawsze ufaj". W rzeczywistości musiałbym to sprawdzić, ale AFAIR sprawdzające "zawsze zezwalaj" z samopodpisanym certyfikatem było cicho ignorowane przez maszynę wirtualną Oracle. –

+0

Ah, źle odczytałem; dzięki. – trashgod