2016-04-22 4 views
0

Okay, ich arbeite mit diesem Code unten, um mich über x.509 Zertifikate zu unterrichten. Meine Frage ist, soll ich eine Cert- oder Speicherdatei irgendwo anders erzeugen und dann die Datei an das Projekt anhängen? Oder soll das Projekt all das im Programm generieren? Mein Fehler ist, dass es die Speicherdatei nicht finden kann.x.509 Cert - Wie erstelle ich eine Geschäftsdatei?

+0

Ich habe keine Ahnung, was Ihr Bedarf für Zertifikate ist, aber der Fehler, den Sie bekommen, passiert einfach, weil die JVM die Datei nicht finden kann. Zu den Lösungen gehört das Angeben des Pfads relativ zum Klassenpfad oder das Angeben des vollständigen Dateisystempfads für die Datei. –

+0

Hm okay. Ich bin mir nicht sicher, ob dieses Programm die Speicherdatei für mich erzeugen soll oder ob ich irgendwie eine Speicherdatei erstellen muss. Ich bin neu in dem Thema, also bin ich ein wenig verloren. – RockOn

Antwort

1

Grundsätzlich erwarten diese beiden Programme, dass die Zertifikate und der Keystore bereits erstellt wurden, mit den Namen user.store und und dass sich diese zwei Dateien in dem Ordner befinden, aus dem die Programme gestartet werden.

Um diese Datei zu generieren, können Sie keytool aus Ihrer Java-Distribution verwenden, um einen Schlüsselspeicher und ein Zertifikat zu erstellen, und dann können Sie das öffentliche Zertifikat exportieren.


Hier ist, was der Server Schritt für Schritt:

int port = 7999; 
ServerSocket server = new ServerSocket(port); 
Socket s = server.accept(); 
ObjectInputStream is = new ObjectInputStream(s.getInputStream()); 

Der Server öffnet einen Socket auf Port 7999 und einige Inhalte erwarten.

//Read the keystore and retrieve the server's private key 
//Default keystore is jks 
KeyStore ks = KeyStore.getInstance("jks"); 
ks.load(new FileInputStream("user.store"), password); 
PrivateKey dServer = (PrivateKey)ks.getKey(aliasname, password); 

Es wird einen Schlüsselspeicher im Aus dieser Schlüsselspeicher user.store (relative Datei zu dem Sie Ihr Programm lauched. Aufgerufene Datei befindet, ist es, den privaten Schlüssel, dessen bekommt alias ist aliasname ("user" in Ihrem Fall).

//Decrypt: server's private key 
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
byte[] in = (byte[]) is.readObject(); 
cipher.init(Cipher.DECRYPT_MODE, dServer); 
byte[] plaintText = cipher.doFinal(in); 
System.out.println("The plaintext is: " + new String(plaintText)); 
server.close(); 

es entschlüsselt der Inhalt an die Buchse senden, indem sie mit dem privaten Schlüssel und auf der Standardausgabe (Konsole typisch) druckt

Jetzt für die Kunden:

String host = "localhost"; 
int port = 7999; 
Socket s = new Socket(host, port); 

ObjectOutputStream os = new ObjectOutputStream(s.getOutputStream()); 

Es verbindet sich mit dem Socket an Port 7999

//Client loads server's cert 
InputStream inStream = new FileInputStream("crypt.cer"); 
CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream); 

erhalten das öffentliche Zertifikat des Servers aus der Datei crypt.cer (wieder relativ) Dann wird überprüft die Gültigkeit des Zertifikats.

//Get public key from cert 
RSAPublicKey eServer = (RSAPublicKey) cert.getPublicKey(); 

//Encrypt with RSA as key generation algorithm 
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
cipher.init(Cipher.ENCRYPT_MODE, eServer); 
byte[] cipherText = cipher.doFinal(message.getBytes()); 
System.out.println("Ciphertext: " + cipherText); 
os.writeObject(cipherText); 
os.flush(); 
os.close(); 
s.close(); 
input.close(); 

Diese verschlüsseln die Nachricht (die der Benutzer eingegeben hat) und senden sie an den Server.

+0

Vielen Dank! Ich weiß es wirklich zu schätzen, wie du mir jeden Teil erklärt hast. Macht jetzt viel mehr Sinn. – RockOn

+0

Okay, ich habe den Schlüssel und Cert. Es funktioniert bis zu diesem Punkt. Es sagt, dass ich RSAPublicKey hier nicht werfen kann: 'RSAPublicKey eServer = (RSAPublicKey) cert.getPublicKey();' – RockOn

+0

was ist die genaue Fehlermeldung? Was hast du in deiner crypt.cer-Datei? –

Verwandte Themen