Problem, na który narzeka, polega na tym, że podczas tworzenia połączenia SSL serwer musi przedstawić klientowi poprawny certyfikat. Możesz napisać odpowiedni punkt końcowy w Javie (HTTPServerSocket zrobi to, jak sądzę), ale wymagałoby to trochę hakowania, aby go skonfigurować. Prawdopodobnie łatwiej jest skonfigurować lokalny serwer sieciowy z wszystkim, co poprawnie obsługuje SSL --- Apache, lighttp, cokolwiek --- i stworzyć samopodpisany certyfikat za pomocą narzędzi openssl.
Zaktualizowany
Oto przykład z Almanachu Java. http://www.exampledepot.com/egs/javax.net.ssl/Server.html
Gniazdo serwera SSL wymaga certyfikatów, które wyśle do klientów w celu uwierzytelnienia. Certyfikaty muszą znajdować się w magazynie kluczy, którego lokalizacja musi być jawnie określona (nie ma wartości domyślnej). Poniższy przykład opisuje sposób tworzenia i określania magazynu kluczy dla gniazda SSL serwera.
try {
int port = 443;
ServerSocketFactory ssocketFactory = SSLServerSocketFactory.getDefault();
ServerSocket ssocket = ssocketFactory.createServerSocket(port);
// Listen for connections
Socket socket = ssocket.accept();
// Create streams to securely send and receive data to the client
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
// Read from in and write to out...
// Close the socket
in.close();
out.close();
} catch(IOException e) {
}
Określ kluczy certyfikatów wykorzystujących właściwości systemu javax.net.ssl.keyStore:
> java -Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456 MyServer
Dzięki CornPuff - to jest dokładnie ten sam kod, który napisałem (chociaż zrobiłem to już jakiś czas temu). – RodeoClown