Panowie,
Pracuję właśnie nad programem umożliwiającym komunikację pomiędzy kompami z wykorzystaniem SSLa. Google znajduje wiele przykładów na ten temat ale wszystkie z nich wymagają specjalnego uruchomienia programu podając keyStore w którym znajduje się certyfikat. Pytanie jest takie: Czy jest możliwość (jeśli jest to jak to zrobić) żeby podawać plik z certyfikatem który będzie używany w komunikacji po SSL np jako parametr wywołania programu
Pomijając to ze to ma związek z SSLem itd, to możesz podać ścieżkę do owego pliku jako parametr wywołania i dostać się do niej normalnie w main(String[] argv) jako argv[0]. Tylko śmiem wątpić że w tym tkwi problem ;]
wiem że mogę taki plik certyfikatu zaimportować ale jak wskazać JVM żeby akurat ten certyfikat był używany do komunikacji?
Hmm, jak to jak wskazac? Importujesz caly lancuch certyfikatow do bazy kluczy i powinno smigac bez problemu.
Narzdzie standardowe z JDK: keytool
Pozniej mozesz wykorzystac System Properties do wskazania, gdzie znajduja sie bazy kluczy:
np.
javax.net.ssl.keyStore
javax.net.ssl.trustStore
javax.net.ssl.keyStoreType
javax.net.ssl.keyStorePassword
Aplkacje pozniej urachamiasz:
java -Djavax.net.sslKeystore....
pozdrawiam,
yarel
No właśnie na tym polega problem że ja nie chce najpierw bawić się w zakładanie bazy kluczy a później uruchamianie programu z jakimiś kosmicznymi przełącznikami. Cel jest prosty: użytkownik uruchamia sobie najzwyczajniej mój program klika sobie przycisk przeglądaj i wskazuje plik *.crt który później będzie używany podczas bezpiecznej komunikacji z innym hostem.
maverick84 napisał(a)
No właśnie na tym polega problem że ja nie chce najpierw bawić się w zakładanie bazy kluczy a później uruchamianie programu z jakimiś kosmicznymi przełącznikami. Cel jest prosty: użytkownik uruchamia sobie najzwyczajniej mój program klika sobie przycisk przeglądaj i wskazuje plik *.crt który później będzie używany podczas bezpiecznej komunikacji z innym hostem.
Co prawda nie napisales, ktora strona legitymuje sie certyfikatem.
- klient
- serwer
... ale w przypadku, gdy serwer przedstawia cert, to pozostaje:
- napisac wlasna implementacje interfejsu TrustManager.
- utworzyc SSLContext i zaincjalizowac tym wlasnym TrustManagerem
- Z SSLContext pobrac SSLSocketFactory
- Uzyc SSLSocketFactory do utworzenia socketa
pozdrawiam,
yarel
Moja nieuwaga :) W temacie jak byk SSLServerSocket, ale to nie szkodzi, bo mechanizm ten sam. Z tym, że pobierasz getServerSocketFactory().
A SSLContext inicjalizujesz:
init(KeyManager[] km, TrustManager[] tm, SecureRandom random)
pozdr,
yarel