0

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

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

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

我尝试了很多很多很多的东西......最后,没有什么能完全奏效。

有人能帮我吗?只需编写所有命令行,我会弄清楚其余的。

4

2 回答 2

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、c​​aClientB.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 以获取更多详细信息。

希望能帮助到你 ...

于 2011-06-23T11:45:00.333 回答
0

您似乎只谈论密钥库。如果你想在客户端-服务器之间使用相互认证,在 JAVA 或其他中,你必须有一种信任库。

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

就像你去柬埔寨时,你的政府必须与柬埔寨政府有关系,否则柬埔寨的海关无法识别你......

希望能帮助到你

于 2011-06-14T11:25:12.677 回答