我的服务器是带有JBoss运行的Java密钥库的Windows Server。 我知道如何设置JBoss,所以JBoss没问题。
我的客户端是使用openssl的Linux Redhat。 我想让它与只有PEM证书的“wget”(在https上)一起工作。 最终测试是仅运行PEM证书的第三方应用程序。
我希望在这两台计算机之间建立自我信任证书。
我尝试了很多很多东西...... ... 最后,一切都没有完全发挥作用。
有人能帮助我吗?只需编写所有命令行,我就会弄明白其余的。
答案 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政府有关,如果没有,柬埔寨的海关服务无法识别你......
希望有所帮助