Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在2台PC机之间创建信任证书_Java_Linux_Openssl_Keystore_Pem - Fatal编程技术网

Java 在2台PC机之间创建信任证书

Java 在2台PC机之间创建信任证书,java,linux,openssl,keystore,pem,Java,Linux,Openssl,Keystore,Pem,我的服务器是Windows服务器,带有JBoss运行的Java密钥库。 我知道如何设置JBoss,所以JBoss没有问题 我的客户端是带有openssl的Linux Redhat。 我想让它的工作与“wget”(在https上)只有一个PEM证书。 最后的测试是只运行PEM证书的第三方应用程序 我想在这两台计算机之间建立自信心证书 我尝试了很多东西。。。 ... 最后,一切都没有完全发挥作用 有人能帮我吗?只要写下所有的命令行,剩下的我就知道了。你似乎只谈论密钥库。如果您想在客户机-服务器(JA

我的服务器是Windows服务器,带有JBoss运行的Java密钥库。 我知道如何设置JBoss,所以JBoss没有问题

我的客户端是带有openssl的Linux Redhat。 我想让它的工作与“wget”(在https上)只有一个PEM证书。 最后的测试是只运行PEM证书的第三方应用程序

我想在这两台计算机之间建立自信心证书

我尝试了很多东西。。。 ... 最后,一切都没有完全发挥作用


有人能帮我吗?只要写下所有的命令行,剩下的我就知道了。

你似乎只谈论密钥库。如果您想在客户机-服务器(JAVA或其他语言)之间使用相互身份验证,则必须有一种信任库

实际上,您的信任库持有所有CA证书(不是公钥),这些证书对您允许与服务器对话的客户端证书进行签名。而且,要识别服务器,客户端必须具有CA证书(签署服务器证书的CA)

这就像当你去柬埔寨时,你的政府必须与Combodia政府保持联系,否则,柬埔寨海关无法识别你的身份


希望它有帮助

假设您有一个服务器a和一个客户端B

要将服务器A配置为使用TLS相互身份验证机制,服务器必须有一个密钥对和一个“引用”来对客户端B进行反向身份验证

现在,为了进行测试,您可以使用以下命令创建CA(证书颁发机构),以便通过serverA对证书进行签名:

[1] ~# openssl genrsa -out caServerA.key 1024
[2] ~# openssl req -new -key caServerA.key -out caServerA.csr
[3] ~# openssl ca -selfsign -keyfile caServerA.key -in caServer.csr -out caServerA.crt
为服务器A生成密钥对,并使用以前创建的CA对其进行签名:

[1] ~# openssl genrsa -out serverA.key 1024
[2] ~# openssl req -new -key serverA.key -out serverA.csr
[3] ~# openssl ca -keyfile caServerA.key -cert caServerA.csr -in serverA.csr -out serverA.crt
对客户端重复相同的过程。最后,你必须有这样的东西: clientB.crt,clientB.key,caClientB.crt

假设您的服务器是apache2,那么您必须使用以下配置https stuf:

[....]
SSLEngine on
SSLCertificateFile      [path_to_your_certificate]/serverA.crt
SSLCertificateKeyFile   [path_to_your_certificate]/serverA.key
# this because you have to trust all clients that have certificates signed by caClientB
SSLCACertificateFile    [path_to_your_certificate]/caClientB.crt
# this will force server to verify client's identity/certificate
SSLVerifyClient require
[....]
重新启动服务器,即可对客户端进行身份验证

对于测试,使用Web浏览器连接到服务器更简单。但在执行此操作之前,必须使用以下命令以PKCS12格式导出密钥对:

openssl pkcs12 -export -in clientB.crt -inkey clientB.key -out clientB.pkcs12
现在,您可以在首选浏览器的“密钥管理系统”中导入此文件。连接到您的服务器,这将正常工作

您还可以在调试模式下激活Loglevel以获得更多详细信息


希望它有帮助……

您知道您需要特殊的巫术来让Java接受自签名证书吗?我不知道。。。但我认为这听起来是可能的。我的一个测试是做一些“不安全”的事情,但这只是一个测试:从我的密钥库中获取公钥和主证书,并将它们放在我的linux计算机上。使用公钥和证书作为参数(wget--无检查证书--私钥=dev-private.pem--证书=dev.pem https://?。?)(我不想将其添加到我的ca中,反正应用程序不使用ca)。因此,我想我只需要了解我应该如何在java密钥库(keytool)和wget之间交换密钥,以使其仅使用证书即可工作。尝试搜索“java自签名证书”我读了大量的“如何”,但我在这个论坛上问,因为我找不到我需要的答案。他们中的大多数人只是说,这样做,他们中的大多数人没有正确地解释你做了什么,为什么你这样做。或者你有部分答案,但当你不知道自己到底要做什么的时候,很难弄清楚。我已经解决了大部分问题,但我无法确定哪一方应该创建证书请求,以及如何从中构建证书。也许只要回答这两个问题,我就能够找出正确的步骤。在这种情况下,我建议你改写你的问题,以澄清你真正知道的。确切地说。当我有两个版本的自动生成时,完全没有问题。当我有两个版本的自动生成时,没有问题。我的主要问题是和两国政府建立关系。我可以提出“证书申请”,但我不知道如何让其他政府(以及哪个政府应该提出申请)接受。而且似乎没有人确切知道如何使用java密钥库实现这一点。这成了我下周的首要任务,所以也许我会弄明白。