gpt4 book ai didi

java - x.509 证书 - 如何生成存储文件?

转载 作者:行者123 更新时间:2023-12-01 10:01:16 24 4
gpt4 key购买 nike

好的,我正在使用下面的代码来自学 x.509 证书。我的问题是,我是否应该在其他地方生成证书或存储文件,然后将文件附加到项目中?或者该项目应该在程序中生成所有这些内容吗?我的错误是找不到商店文件。

最佳答案

基本上,这两个程序期望已创建证书和 keystore ,名称为 user.storecrypt.cer,并且这两个文件位于启动程序的文件夹。

要生成这些文件,您可以使用 Java 发行版中的 keytool 创建 keystore 和证书,然后从中导出公共(public)证书。

<小时/>

以下是服务器逐步执行的操作:

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 的文件(与您启动程序的位置相对的文件)中的 keystore 。从该 keystore 中,它获取别名为 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获取服务器的公共(public)证书(同样是相对的)然后,它检查证书的有效性。

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

这会加密消息(用户输入的)并将其发送到服务器。

关于java - x.509 证书 - 如何生成存储文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36785592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com