Java ssl

0

Witam.

Mam problem ze zrozumieniem mechanizmu szyfrowania połączenia ssl. Mianowicie chodzi o to, że za pomocą keytool generuję sobie magazyn kluczy z zawartym w nim kluczem prywatnym, publicznym i samo podpisującym się certyfikatem. Aby klient i serwer ładnie współpracował wrzucam ten plik do serwera i klienta. Tylko jaki to ma sens jeśli oba zawierają te same dane. Wydaje mi się, że klient powinien zawierać tylko swój klucz prywatny a serwer klucz publiczny i okazywać się certyfikatem. Chciałbym jeszcze aby kilku klientów miało różne klucze prywatne.No i jak to ustawić w programie, żeby to działało prawidłowo?

Ustawiam to w ten sposób, łączy się wszystko, przesyła dane itd. Oczywiście używam SSLServerSocket i SSLSocket.

        System.setProperty("javax.net.ssl.keyStore", "metal");
        System.setProperty("javax.net.ssl.keyStorePassword", "123456");
0

Ewidentnie nie odrobiłeś lekcji z zakresu kryptografii asymetrycznej, bo każdy ma własną parę kluczy.

Klucz prywatny - jak nazwa wskazuje ten klucz pozostaje tajny.
Klucz publiczny - klucz jawny do pokazywania wszystkim.

Jeśli serwer zna twój klucz publiczny, możesz udowodnić swoją tożsamość podpisując się (nie mylić z ujawnianiem) kluczem prywatnym. Podobnie w drugą stronę. Są różne warianty w których uwierzytelnia się tylko serwer (certyfikat zawiera klucz publiczny serwera między innymi), albo zarówno serwer i klient, ale podstawowa zasada pozostaje niezmienna, każdy ma własną parę kluczy. Poczytaj więcej o temacie.

1

Znalazłem jak to zrobić.

Dla klienta:

        System.setProperty("javax.net.ssl.trustStore","client.jks");
        System.setProperty("javax.net.trustStorePassword", "123456"); 

Dla serwera:

        System.setProperty("javax.net.ssl.keyStore", "server.jks");
        System.setProperty("javax.net.ssl.keyStorePassword", "123456");

A cała procedura generowania kluczy klienta i serwera oraz importowania certyfikatów (za pomocą standardowego keytool) jest tutaj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1