Java security - praca z kluczami i certyfikatami

Podobne dokumenty
Podpisywanie i bezpieczne uruchamianie apletów wg

Java Code Signing UŜycie certyfikatów niekwalifikowanych do podpisywania kodu w technologii Java. wersja 1.2 UNIZETO TECHNOLOGIES SA

Instrukcja pobrania i instalacji. certyfikatu Microsoft Code Signing. wersja 1.4

Instrukcja aktywacji i instalacji Certum Code Signing

Certum Code Signing Instrukcja certyfikatu Code Signing SimplySign

Instrukcja generowania żądania CSR SOW WERSJA 1.6

Instrukcja aktywacji i instalacji Certum Code Signing

System Zdalnej Obsługi Certyfikatów Instrukcja użytkownika

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Bezpieczne uruchamianie apletów wg

Instrukcja aktywacji i instalacji Certum Code Signing

VSFTPd Użycie certyfikatów niekwalifikowanych w oprogramowaniuvsftpd. wersja 1.3 UNIZETO TECHNOLOGIES SA

System Zdalnej Obsługi Certyfikatów Instrukcja użytkownika

Standard Code Signing. Użycie certyfikatów do podpisywania kodu w technologii Java. wersja 1.3 UNIZETO TECHNOLOGIES SA

CitiDirect Online Banking - portal CitiDirect EB

Java Code Signing Użycie certyfikatów niekwalifikowanych do podpisywania kodu w technologii Java. wersja 1.3 UNIZETO TECHNOLOGIES SA

Konfiguracja klienta Lotus Notes R6 z certyfikatami i kluczami na karcie kryptograficznej lub w pliku.

Instrukcja postępowania w celu uzyskania certyfikatu niekwalifikowanego SC Wersja 1.5 z dnia r.

System Zdalnej Obsługi Certyfikatów 2.0 Instrukcja użytkownika

Instrukcja instalacji certyfikatu na karcie kryptograficznej Certum Code Signing

MultiInfo. Certyfikat dostępu do usługi

Exchange 2007 Konfiguracja protokołu SSL/TLS w serwerze pocztowym Exchange 2007 wersja 1.1 UNIZETO TECHNOLOGIES S.A.

Exchange Konfiguracja protokołu SSL/TLS w serwerze pocztowym Exchange wersja 1.0 UNIZETO TECHNOLOGIES S.A.

RMI-2. Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems SYSTEMY ROZPROSZONE

Exchange Konfiguracja protokołu SSL/TLS w serwerze pocztowym Exchange wersja 1.0

Certyfikat Certum Basic ID. Instrukcja dla użytkowników Windows Vista. wersja 1.3 UNIZETO TECHNOLOGIES SA

Instrukcja dla użytkowników Windows Vista Certyfikat Certum Basic ID

BACKUP BAZ DANYCH MS SQL

Instrukcja generowania certyfikatu PFRON i podpisywania dokumentów aplikacji SODiR w technologii JS/PKCS 12

Instrukcja postępowania w celu złożenia podpisu elektronicznego na dokumentach składanych do SISC za pośrednictwem portalu PUESC.

Instalacja aplikacji komunikacyjnej modułu pl.id

Podstawy technologii WWW

System Zdalnej Obsługi Certyfikatów 2.0 Instrukcja użytkownika

2) W wyświetlonym oknie należy zaznaczyć chęć utworzenia nowej aplikacji (wygląd okna może się różnić od powyższego); kliknąć OK

1. MOZILLA THUNDERBIRD (31.3.0) 2 2. WINDOWS LIVE MAIL THE BAT HOME EDITION ( BIT) 30

Instrukcjaaktualizacji

Exchange Konfiguracja protokołu SSL/TLS w serwerze pocztowym Exchange wersja 1.0

Łukasz Przywarty Wrocław, r. Grupa: WT/N 11:15-14:00. Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API

BlackHole. Bezpieczne Repozytorium Ważnych Zasobów.

Bezpieczeństwo w aplikacjach Java

Łukasz Przywarty Wrocław, r. Grupa: WT/N 11:15-14:00. Sprawozdanie z zajęć laboratoryjnych: OpenSSL

Java Code Signing Uycie certyfikatów niekwalifikowanych do podpisywania kodu w technologii Java. wersja 1.1 UNIZETO TECHNOLOGIES SA

Wysyłka wniosko w ZUS - EKS. Instrukcja użytkownika aplikacji Wysyłka wniosków ZUS EKS

Exchange Enterprise Edition 2003 Użycie certyfikatów niekwalifikowanych w oprogramowaniu Microsoft Exchange wersja 1.2 UNIZETO TECHNOLOGIES SA

Podręcznik użytkownika. Certification Request Services Wersja dokumentacji Asseco Data Systems S.A.-

Programowanie w Javie cz. 1 Wstęp. Łódź, 24 luty 2014 r.

Instrukcja postępowania w celu złożenia podpisu elektronicznego na dokumentach składanych do SISC za pośrednictwem portalu PUESC.

Standard Code Signing. Użycie certyfikatów do podpisywania kodu w technologii MS Authenticode. wersja 1.3 UNIZETO TECHNOLOGIES SA

Standard Code Signing. Użycie certyfikatów do podpisywania kodu w technologii MS Authenticode. wersja 1.3

Microsoft Authenticode. Użycie certyfikatów niekwalifikowanych do podpisywania kodu w technologii MS Authenticode. wersja 1.2 UNIZETO TECHNOLOGIES SA

Java techniki programowania

Celina zmiany marzec 2010

Dokumentacja techniczna

Instrukcja 1: Instalacja certyfikatu niekwalifikowanego w systemie Microsoft Windows:

INSTRUKCJA INSTALACJI I OBSŁUGI GPG4Win

Aplikacja npodpis do obsługi certyfikatu

Instrukcja sprawdzani, podpisywani i szyfrowania plików do systemu CerBeR

Strona 1 NUMPAGES INSTRUKCJA OBSŁUGI KARTY DARK. CENTRUM USŁUG ZAUFANIA SIGILLUM Wersja 1.0

Wstęp do systemów wielozadaniowych laboratorium 21 Szyfrowanie

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Aplikacja npodpis do obsługi certyfikatu

Certification Request Services

Przed przystąpieniem do instalacji certyfikatów należy zweryfikować czy są spełnione poniższe wymagania systemowe.

BACKUP BAZ DANYCH FIREBIRD

Płace Optivum. Jakie czynności musi wykonać pracownik, aby otrzymywać drogą elektroniczną paski z list płac?

Instrukcja instalacji środowiska testowego na TestingCup wersja 1.0

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Instrukcja instalacji oprogramowania do składania podpisu elektronicznego, pod umową o zarządzanie PPK, przy uz yciu certyfikatu kwalifikowanego

I. Uruchomić setup i postępować według instrukcji

Czy certyfikat i klucz do bezpiecznej transmisji danych oznacza to samo? Kto wnioskuje o klucz do bezpiecznej transmisji danych?

FINNCA INS Instrukcja dla subskrybentów

Opis konfiguracji i wysyłki wniosków EKW w aplikacji Komornik SQL-VAT

I. WSTĘP... 2 II. WYMAGANIA SYSTEMOWE... 2 III. DOSTĘP DO REPOZYTORIUM TRANSAKCJI... 2

Aplikacje RMI Lab4

Tomcat + SSL - Windows/Linux. Instalacja certyfikatów niekwalifikowanych w serwerze Tomcat. wersja 1.1

Zintegrowany system usług certyfikacyjnych. Dokumentacja użytkownika. Obsługa wniosków certyfikacyjnych i certyfikatów. Wersja dokumentacji 1.

DESlock+ szybki start

Instrukcja instalacji nośników USB w systemie internetowym Alior Banku

Procedura uzyskania certyfikatu do ZSMOPL na potrzeby ewaluacji

Wykorzystanie protokołu SCEP do zarządzania certyfikatami cyfrowymi w systemie zabezpieczeń Check Point NGX

Laboratorium - Użycie narzędzia Przywracanie systemu w systemie Windows XP

Certyfikat niekwalifikowany zaufany Certum Silver. Instrukcja dla uŝytkowników Windows Vista. wersja 1.1 UNIZETO TECHNOLOGIES SA

PGP - Pretty Good Privacy. Użycie certyfikatów niekwalifikowanych w programie PGP

Internet Information Service (IIS) 7.0

Instrukcja dla osoby potwierdzającej profil zaufany

BOŚBank24. Instrukcja instalacji i konfiguracji podpisu elektronicznego Szafir wydawanego przez KIR S.A. BANKOWOŚĆ ELEKTRONICZNA DLA FIRM

Aplikacja npodpis do obsługi certyfikatu

Aplikacja npodpis do obsługi certyfikatu

Certyfikat niekwalifikowany zaufany Certum Silver. Instalacja i użytkowanie pod Windows Vista. wersja 1.0 UNIZETO TECHNOLOGIES SA

Opis aktualizacji programu Kancelaria Komornika

Transkrypt:

Java security - praca z kluczami i certyfikami Wstęp Generalnie zabawa z kluczami może okazać się kłopotliwa, gdy nie posiada się wiedzy o stojącej za nimi idei oraz zastosowanych rozwiązaniach. Na początek warto wiedzieć, że magazyny kluczy JAVA (JKS) przechowują razem certyfiky oraz klucze prywne i publiczne. Narzędzia keytool (z dystrybucji jdk) oraz ssh-keygen (znane z generowania kluczy ssh prywnych i publicznych) to nie to samo. keytool operuje na magazynie kluczy i certyfików (do magazynu można dodać wiele kluczy i certyfików), nomiast ssh-keygen obsługuje tylko pojedynczą parę kluczy (składającą się z klucza prywnego i publicznego). Można o tym poczytać na stronach: https://www.ibm.com/support/knowledgecenter/en/sss9fa_12.0.0/com.ibm.hod.doc/tutorials/ssh/ssh-pk03.html https://commandlinefanic.com/cgibin/showarticle.cgi?article=art049 Podpisywanie plików jar oraz ich użycie Scenariusze na stronach Oracle Na stronach internetowych Oracle opisano scenariusze: podpisywania powstałego oprogramowania: https://docs.oracle.com/javase/tutorial/security/toolsign/sign er.html wykorzystania podpisanego oprogramowania: https://docs.oracle.com/javase/tutorial/security/toolsign/rece iver.html Poniżej opisano w szczegółach scenariusz pozwalający na uruchomienie aplikacji korzystającej z zewnętrznej biblioteki (pliku jar) podpisanej wygenerowanym certyfikem. Oparto go na przykładzie eclipsowych projektów Biblioteka01 oraz Aplikacja01. 1. Generowanie kluczy Wygeneruj parę kluczy i zapisz ją w repozytorium kluczy: $ keytool -genkeypair -keyalg rsa -keysize 2048 -alias tkubik - keystore tkubikkeys.jks -dname "CN=Tomasz Kubik" Powyższe wygeneruje jednocześnie podpisany samemu certyfik (ang. self-signed-certifice). W ogólności wystarcza on do przeprowadzania testów podczas realizacji ćwiczenia.

2. Podpisanie certyfiku (krok opcjonalny) W środowiskach produkcyjnych powinno się uzyskać certyfik podpisany przez odpowiednią instytucję. W celu uzyskania podpisanego certyfiku należy najpierw wygenerować żądanie podpisania certyfiku (ang. certifice signing request). W przykładzie wywołania odpowiedniej komendy żądanie to ma zostać zapisane w pliku tkubikcert.csr: $ keytool -certreq -alias tkubik -keystore tkubikkeys.jks > tkubikcert.csr Po przesłaniu żądania do instytucji certyfikującej i otrzymaniu odpowiedzi z podpisanym certyfikem należałoby go zaimportować do repozytorium kluczy. W przykładzie odpowiedniej komendy podpisany certyfik znajduje się w pliku tkubikcert.pem: $ keytool -import -alias tkubik -file tkubikcert.pem -keystore tkubikkeys.jks Wykonanie powyższej komendy spowoduje nadpisanie niepodpisanego certyfiku znajdującego się w magazynie kluczy. Wystawianie (i utrzymywanie) certyfików odbywa się za opłą. Do testowania nie potrzeba zabiegać o podpisanie samodzielnie wygenerowanego certyfiku. 4. Wyeksportowanie certyfiku z kluczem publicznym Podpisana bibliteka (plik jar) powinna być dystrybuowana razem z certyfikem zawierającym klucz publiczny. Bez niego klienci korzystający z biblioteki nie będą w stanie zweryfikować poprawności jej podpisu. Aby wyeksportować klucz publiczny należy wydać następującą komendę: $ keytool -export -keystore tkubikkeys.jks -alias tkubik -file tkubik_pub.cer Klucz publiczny zostanie wyeksportowany do pliku tkubik_pub.cer, który powinien towarzyszyć dystrubuowanemu plikowi jar. Klienci korzystający z biblioteki będą importować ten certyfik do własnego magazynu kluczy. 5. Podpisanie pliku jar Podpisanie biblioteki może odbyć się za pomocą narzędzia jarsigner: $ jarsigner -keystore tkubikkeys.jks -storepass <hasło magazynu> - keypass <hasło klucza prywnego> -signedjar sbilioteka01.jar biblioteka01.jar tkubik gdzie: biblioteka01.jar - oryginalna biblioteka (niepodpisana), sbiblioteka01.jar - wynikowa biblioteka (podpisana), tkubik - alias wpisu w magazynie kluczy (by było wiadomo, jakim certyfikem podpisać bibliotekę)

Przy okazji można zweryfikować, czy faktycznie plik jar został podpisany komendą: $ jarsigner -verify -certs -verbose sbiblioteka01.jar W rozważanym przykładzie wynikiem wykonania komendy będzie: s 196 Wed May 08 18:30:32 CEST 2019 META-INF/MANIFEST.MF X.509, CN=Tomasz Kubik [certifice will expire on 06.08.19 18:10] [CertPh not valided: Ph does not chain with any of the trust anchors ] 332 Wed May 08 18:30:32 CEST 2019 META-INF/TKUBIK.SF 1115 Wed May 08 18:30:32 CEST 2019 META-INF/TKUBIK.RSA sm 3229 Wed May 08 17:36:40 CEST 2019 pl/edu/pwr/example/encoder.class X.509, CN=Tomasz Kubik [certifice will expire on 06.08.19 18:10] [CertPh not valided: Ph does not chain with any of the trust anchors ] s = signure was verified m = entry is listed in manifest k = least one certifice was found in keystore i = least one certifice was found in identity scope - Signed by "CN=Tomasz Kubik" Digest algorithm: SHA-256 Signure algorithm: SHA256withRSA, 2048-bit key jar verified. Warning: This jar contains entries whose certifice chain is not valided. This jar contains entries whose signer certifice will expire within six months. This jar contains signures th does not include a timestamp. Without a timest amp, users may not be able to valide this jar after the signer certifice's e xpirion de (2019-08-06) or after any future revocion de. 6. Wykorzystanie podpisanej biblioteki Ktoś, kto chciałby skorzystać z podpisanej biblioteki powinien dołączyć ją do projektu. Samo dołączenie do projektu pozwala kompilować kod. Dopóki nie ma zdefiniowanego menadżera bezpbieczeństwa, to ten kod daje się również wykonywać. Ale nie zawsze. Jeśli dana biblioteka (podpisany jar) ma takie same pakiety jak aplikacja, która z niej korzysta, to przy próbie uruchomienia pojawia się wyjątek bezpieczeństwa:

Exception in thread "main" java.lang.securityexception: class "pl.edu.pwr.example.encoder"'s signer informion does not mch signer informion of other classes in the same package java.base/java.lang.classloader.checkcerts(classloader.java:1150) java.base/java.lang.classloader.predefineclass(classloader.java:905) java.base/java.lang.classloader.defineclass(classloader.java:1014) java.base/java.security.secureclassloader.defineclass(secureclassloa der.java:174) java.base/jdk.internal.loader.builtinclassloader.defineclass(builtin ClassLoader.java:802) java.base/jdk.internal.loader.builtinclassloader.findclassonclassp hornull(builtinclassloader.java:700) java.base/jdk.internal.loader.builtinclassloader.loadclassornull(bui ltinclassloader.java:623) java.base/jdk.internal.loader.builtinclassloader.loadclass(builtincl assloader.java:581) java.base/jdk.internal.loader.classloaders$appclassloader.loadclass( ClassLoaders.java:178) java.base/java.lang.classloader.loadclass(classloader.java:521) pl.edu.pwr.example.main.main(main.java:30) W przypadku różnych nazw pakietów w bibliotece i aplikacji żaden wyjątek się nie pojawi - dopóki nie zostanie zainstalowany menadżer bezpieczeństwa. Jeśli aplikacja korzysta z menadżera bezpieczeństwa, to by wszystko zadziałało należy podjąć kolejne kroki. Na początek należy zaimportować certyfik towarzyszący podpisanej bibliotece do własnego magazynu kluczy. Oczywiście jeśli podpisana bibliotaka jest testowana na komputerze jej autora, nie trzeba importować certyfiku do magazynu - w tym magazynie jest już przecież certyfik (z niego był eksportowany). Następnie należy zdefiniować pozwolenia w pliku polityki. Przykładowo plik taki może mieć postać: /* AUTOMATICALLY GENERATED ON Thu May 09 00:53:26 CEST 2019*/ /* DO NOT EDIT */ keystore "file:/e:/.../tkubikkeys.jks", "JKS", "SUN"; keystorepasswordurl "file:/e:/.../keystore.pass"; grant signedby "tkubik", codebase "file:../sbiblioteka01.jar" { permission java.security.allpermission;

permission java.io.filepermission "<<ALL FILES>>", "read, write, delete, execute"; Inny przykład (z wykorzystaniem właściwości systemowych, pochodzący ze strony: http://edu.pjwstk.edu.pl/wyklady/tbo/scb/lecture-02/lecture-02- content.html) keystore "${user.home}${/}.keystore"; grant codebase "http://pjwstk.edu.pl/" { permission java.io.filepermission "/tmp", "read"; permission java.lang.runtimepermission "queueprintjob"; grant signedby "edek", codebase "file:${java.home}/lib/ext/." { permission java.security.allpermission; grant signedby "edek", codebase "file:${java.class.ph}/." { permission java.net.socketpermission "*:1024-", "accept, connect, listen, resolve"; grant { permission java.util.permission "java.version", "read"; Uwaga: W pliku keystore.pass wskazanym przez w urlu powinna pojawić się linijka z hasłem do magazynu kluczy użytkownika, do którego zaimportowano certyfik z publicznym kluczem (prz niżej). Plik ten można sobie nazwać dowolnie i umieścić w kalogu dostępnym tylko dla użytkownika. Pliki polityki można generować ręcznie, ale nieźle sprawuje się tu też narzędzie $ policytool.exe Jeśli ktoś zapomniał aliasu do certyfiku, to można go odszukać przeglądając magazyn: $ keytool -list -v -keystore [keystore name] W szczególności certyfik można zaimportować do magazynu zaufanych certyfików: $ keytool -import -trustcacerts -keystore [keystore_filename] -alias [alias_name] -file [cert_file] Po tym wszystkim można już uruchomić program z odpowiednimi parametrami, najlepiej w kalogu projektu aplikacji (w przykładzie jest to główny kalog projektu Aplikacja01). W parametrach przekazuje się menadżera bezpieczeństwa, położenie pliku polityki oraz wskazuje classph: $ java -Djava.security.manager -Djava.security.policy=tkubik.policy -classph "./bin;../sbilioteka01.jar" pl.edu.pwr.example1.main Oczywiście parametry te można wpisać w konfigurację uruchomieniową wybranego IDE.

Próba uruchomienia aplikacji z menadżerem bezpieczeństwa bez wskazania położenia pliku polityki zakończy się wyrzuceniem wyjątku: Exception in thread "main" java.security.accesscontrolexception: access denied ("java.io.filepermission" "logfilein.txt" "write") java.base/java.security.accesscontrolcontext.checkpermission(accessc ontrolcontext.java:472) java.base/java.security.accesscontroller.checkpermission(accesscontr oller.java:895) java.base/java.lang.securitymanager.checkpermission(securitymanager. java:322) java.base/java.lang.securitymanager.checkwrite(securitymanager.java: 752) java.base/sun.nio.fs.windowschannelfactory.open(windowschannelfactor y.java:301) java.base/sun.nio.fs.windowschannelfactory.newfilechannel(windowscha nnelfactory.java:168) java.base/sun.nio.fs.windowsfilesystemprovider.newbytechannel(window sfilesystemprovider.java:226) java.base/java.nio.file.spi.filesystemprovider.newoutputstream(files ystemprovider.java:478) java.base/java.nio.file.files.newoutputstream(files.java:219) pl.edu.pwr.example1.main.main(main.java:26) Ciekawostki: symlink (chodzi o to, że przy kilku wersjach JDK zainstalowanych na jednym komputerze wydawanie komend java z konsoli może być kłopotliwe ze względu na istnienie sybmolicznych linków w ścieżce systemowej: C:\ProgramDa\Oracle\Java\javaph) https://stackoverflow.com/questions/26864662/the-system-cannot-findthe-file-c-programda-oracle-java-javaph-java-exe https://www.howtogeek.com/howto/16226/complete-guide-to-symboliclinks-symlinks-on-windows-or-linux/ https://stackoverflow.com/questions/10188485/windows-symbolic-linktarget

JShell (shell do testowania fragmentów kodu java) https://docs.oracle.com/en/java/javase/12/jshell/introductionjshell.html#guid-da9fa090-7015-4f30-bbd0-5f6ed0ebdf91 keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048 https://docs.oracle.com/javase/1.5.0/docs/tooldocs/solaris/keytool.h tml#importcmd https://www.certum.pl/pl/upload_module/wysiwyg/certum/instrukcje/ins trukcja_podpisywania_kodu_przy_uzyciu_narzedzi_signtool_i_jarsigner. pdf https://dzone.com/articles/signing-and-verifying-a-standalone-jar Co należy zrobić, gdy zostanie wyświetlony monit zabezpieczeń oprogramowania Java? https://www.java.com/pl/download/help/appsecuritydialogs.xml Java SE Security Meriały: https://www.sslshopper.com/article-how-to-cree-a-self-signedcertifice-using-java-keytool.html https://www.sslshopper.com/article-most-common-java-keytoolkeystore-commands.html https://www.oracle.com/technetwork/java/javase/tech/index-jsp- 136007.html Java Plform Standard Edition 8 Documention https://docs.oracle.com/javase/8/docs/index.html https://stackoverflow.com/questions/17187520/signing-jar-file https://docs.oracle.com/en/java/javase/12/ https://docs.oracle.com/javase/1.5.0/docs/tooldocs/solaris/keytool.h tml#importcmd Permission policy file

Jar signing in Maven https://blog.frankel.ch/jvm-security/2/ https://www.digicert.com/code-signing/java-code-signing-guide.htm Podpisywanie kodu Java: Generowanie żądania CSR https://docs.oracle.com/en/java/javase/11/tools/jarsigner.html https://docs.oracle.com/javase/tutorial/security/sigcert/index.html https://docs.oracle.com/en/java/javase/11/security/java-se-plformsecurity-architecture.html#guid-f5270083-ccac-49e0-acac-50176fbfdd97 https://pl.godaddy.com/help/podpisywanie-kodu-java-generowaniezadania-csr-4780 https://commandlinefanic.com/cgibin/showarticle.cgi?article=art049