62 lines
2.6 KiB
Java
62 lines
2.6 KiB
Java
// Douglas Fjällrud, Axel Blomén, Grupp 35
|
|
package server;
|
|
|
|
import javax.net.ssl.*;
|
|
import java.io.*;
|
|
import java.security.*;
|
|
import java.security.cert.CertificateException;
|
|
|
|
public class TLSServer {
|
|
private static final String SERVER_KEYSTORE_PATH = "../server.p12";
|
|
private static final String SERVER_KEYSTORE_PASSWORD = "server";
|
|
|
|
private static final int TLS_PORT = 8043;
|
|
|
|
public static void main(String[] args) {
|
|
try {
|
|
KeyStore keyStore = KeyStore.getInstance("PKCS12");
|
|
try (FileInputStream fis = new FileInputStream(SERVER_KEYSTORE_PATH)) {
|
|
keyStore.load(fis, SERVER_KEYSTORE_PASSWORD.toCharArray());
|
|
}
|
|
|
|
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
|
|
kmf.init(keyStore, SERVER_KEYSTORE_PASSWORD.toCharArray());
|
|
KeyManager[] keyManagers = kmf.getKeyManagers();
|
|
|
|
SSLContext sslContext = SSLContext.getInstance("TLSv1.3");
|
|
sslContext.init(keyManagers, null, new SecureRandom());
|
|
|
|
SSLServerSocketFactory sslServerSocketFactory = sslContext.getServerSocketFactory();
|
|
|
|
try (SSLServerSocket sslServerSocket =
|
|
(SSLServerSocket) sslServerSocketFactory.createServerSocket(TLS_PORT)) {
|
|
|
|
System.out.println("TLS-server startad. Lyssnar på port " + TLS_PORT + "...");
|
|
|
|
while (true) {
|
|
try (SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept()) {
|
|
String[] enabledCiphers = { "TLS_AES_128_GCM_SHA256" };
|
|
sslSocket.setEnabledCipherSuites(enabledCiphers);
|
|
|
|
sslSocket.startHandshake();
|
|
|
|
BufferedReader br = new BufferedReader(
|
|
new InputStreamReader(sslSocket.getInputStream()));
|
|
PrintWriter pw = new PrintWriter(sslSocket.getOutputStream(), true);
|
|
|
|
String line;
|
|
while ((line = br.readLine()) != null) {
|
|
System.out.println("Mottaget: " + line);
|
|
pw.println("Echo: " + line);
|
|
}
|
|
} catch (IOException e) {
|
|
System.err.println("Fel vid hantering av klientanslutning: " + e.getMessage());
|
|
}
|
|
}
|
|
}
|
|
} catch (KeyStoreException | IOException | NoSuchAlgorithmException
|
|
| CertificateException | KeyManagementException | UnrecoverableKeyException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|