簡體   English   中英

x.509證書-如何生成商店文件?

[英]x.509 Cert - How to generate store file?

好的,所以我正在使用下面的代碼來自學x.509證書。 我的問題是,我是否應該在其他地方生成證書或存儲文件,然后將該文件附加到項目中? 還是該項目應該在程序中生成所有這些? 我的錯誤是找不到存儲文件。

基本上,這兩個程序期望已經創建了名稱為user.storecrypt.cer的證書和密鑰庫,並且這兩個文件位於啟動程序的文件夾中。

要生成這些文件,可以使用Java發行版中的keytool來創建密鑰庫和證書,然后從中導出公共證書。


以下是服務器逐步執行的操作:

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

服務器在端口7999上打開偵聽套接字,並需要一些內容。

//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);

它得到坐落在被稱為文件密鑰庫user.store (相對文件到您lauched程序,從密鑰庫,它得到的私鑰,其別名是aliasname"user"你的情況)。

//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();

它使用私鑰解密發送到套接字的內容,並將其打印在標准輸出上(通常是控制台)

現在為客戶:

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

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

它連接到端口7999上的套接字

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

從文件crypt.cer (再次是相對的)獲取服務器的公共證書,然后,它檢查證書的有效性。

//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();

這將加密消息(用戶輸入的消息)並將其發送到服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM