Autentisering av klient på server - Java SSL

Permalänk
Medlem

Autentisering av klient på server - Java SSL

Hejsan.

Ja, som ämnet lyder så skulle jag behöva ha lite hjälp med ett skolprojekt.

Projektet går ut på följande:

Man skall hantera åtkomsten av sjukjournaler på ett sjukhus. Det intressanta bör vara följande:

* En patient får bara läsa sina egna journaler
* En sköterska får läsa och skriva sina egna journaler, samt journaler från samma "division".
* En doktor får läsa och skriva sina egna journaler, samt journaler från samma division. En doktor får även skapa egna journaler, med förutsättningen att han behandlar patienten vars journal han vill skapa. När han gör detta måste han associera en sköterska med journalen.
* En administrationsenhet kan skapa och ta bort alla typer av journaler.

Det enda kravet för detta är att man skall använda sig av tvåvägs autentisering, och till detta har jag valt certifikat. Anslutningen mellan servern och klienten måste vara krypterad och upprätthålld med SSL.

Koden jag har i nuläget är följande för klienten:

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; import java.security.cert.CertificateException; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManagerFactory; import javax.security.cert.X509Certificate; public class ClientApp { /** * @param args * @throws KeyStoreException * @throws IOException * @throws FileNotFoundException * @throws CertificateException * @throws NoSuchAlgorithmException * @throws UnrecoverableKeyException * @throws KeyManagementException */ public static void main(String[] args) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, FileNotFoundException, IOException, UnrecoverableKeyException, KeyManagementException { char[] passphrase = "hello".toCharArray(); // First initialize the key and trust material. KeyStore ksKeys = KeyStore.getInstance("JKS"); ksKeys.load(new FileInputStream("keystore.jks"), passphrase); KeyStore ksTrust = KeyStore.getInstance("JKS"); ksTrust.load(new FileInputStream("truststore.jks"), passphrase); // KeyManagers decide which key material to use. KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); kmf.init(ksKeys, passphrase); // TrustManagers decide whether to allow connections. TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); tmf.init(ksTrust); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); SSLSocket clientSocket = (SSLSocket) SSLSocketFactory.getDefault() .createSocket("localhost", 2000); clientSocket.startHandshake(); clientSocket.getInputStream(); InputStream inputStream = clientSocket.getInputStream(); String input = inputStream.toString(); SSLSession session = clientSocket.getSession(); X509Certificate cert = (X509Certificate) session .getPeerCertificateChain()[0]; String subject = cert.getSubjectDN().getName(); System.out.println(subject); } }

Koden för servern:

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; import java.security.cert.CertificateException; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLServerSocket; import javax.net.ssl.SSLServerSocketFactory; import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSocket; import javax.net.ssl.TrustManagerFactory; import javax.security.cert.X509Certificate; public class ServerApp { /** * @param args * @throws KeyStoreException * @throws IOException * @throws FileNotFoundException * @throws CertificateException * @throws NoSuchAlgorithmException * @throws UnrecoverableKeyException * @throws KeyManagementException */ public static void main(String[] args) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, FileNotFoundException, IOException, UnrecoverableKeyException, KeyManagementException { char[] passphrase = "hello".toCharArray(); // First initialize the key and trust material. KeyStore ksKeys = KeyStore.getInstance("JKS"); ksKeys.load(new FileInputStream("keystore.jks"), passphrase); KeyStore ksTrust = KeyStore.getInstance("JKS"); ksTrust.load(new FileInputStream("truststore.jks"), passphrase); // KeyManagers decide which key material to use. KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); kmf.init(ksKeys, passphrase); // TrustManagers decide whether to allow connections. TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); tmf.init(ksTrust); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); SSLServerSocket serverSocket = (SSLServerSocket)SSLServerSocketFactory.getDefault().createServerSocket(2000); SSLSocket socket = (SSLSocket)serverSocket.accept(); socket.startHandshake(); SSLSession session = socket.getSession(); X509Certificate cert = (X509Certificate)session.getPeerCertificateChain()[0]; String subject = cert.getSubjectDN().getName(); System.out.println (subject); } }

Mina frågor blir då att om jag kan ha det så här?

Jag vet att jag inte är färdig men jag har kört fast och behöver hjälp.

Är det någon som kan tänka sig att hjälpa mig med detta under helgen så svara antingen i tråden eller via PM.

Mvh

lol4reN

Permalänk
Medlem

Men hallå, någon av Sweclockers alla anhängare borde ju kunna detta, eller?