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

时间:2011-05-18 17:34:08

标签: java linux openssl keystore pem

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

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

我希望在这两台计算机之间建立自我信任证书。

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

有人能帮助我吗?只需编写所有命令行,我就会弄明白其余的。

2 个答案:

答案 0 :(得分:1)

假设您有服务器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

现在您可以在首选浏览器的“密钥管理系统”中导入此文件。连接到您的服务器,这将工作。

您还可以在debuging模式下激活Loglevel以获取更多详细信息。

希望它有所帮助...

答案 1 :(得分:0)

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

实际上,您的信任库包含所有签署了允许与服务器通信的客户端证书的CA证书(非公钥)。并且,为了识别您的服务器,您的客户端必须拥有您的CA证书(CA签署了您的服务器证书)。

就像你去柬埔寨一样,政府必须与Combodia政府有关,如果没有,柬埔寨的海关服务无法识别你......

希望有所帮助