【问题标题】:How to verify a certificate using Keytool?如何使用 Keytool 验证证书?
【发布时间】:2013-04-25 21:28:35
【问题描述】:

我想要一个程序来验证使用 Oracle 的 SSLSocket 类创建 SSL 套接字。在我的程序中,我希望客户端通过其证书(使用Keytool 创建)。服务器应验证证书,然后继续通信。我希望服务器检查连接到它的每个客户端的证书。假设所有密钥(服务器和客户端)都存储在Keystore 中。我该如何实现?

编辑:

如果我不能正确表达我的问题,请原谅我。我是新来的。我正在阅读this link 以获取一些指示。在这里,在读取密钥库时,服务器直接硬编码了客户端的密钥文件名(即“client.public”)。但是,在我的程序中,这将由客户端指定,因为服务器无法事先知道客户端的公钥文件名是什么。

【问题讨论】:

    标签: java ssl keytool jsse


    【解决方案1】:

    您刚刚准确描述了幕后已经发生的事情。您所要做的就是创建一个 SSLServerSocket 并将 needClientAuth 设置为 true,然后像往常一样开始接受来自它的连接。 JSSE 将完成剩下的工作。

    【讨论】:

    • 假设我有 10 个客户端连接到服务器。服务器如何知道向 CA 请求哪个客户端的证书(在本例中为 Keytool,因为它将管理所有证书)?能否提供一些参考资料?
    • 我不明白这个问题。客户端连接,发送其证书,服务器读取证书并根据信任存储检查它。对于每个客户。每个连接。
    • 您需要阅读 JSEE 参考指南,并重新阅读 IBM 链接。客户端必须具有由 CA 签名的证书,在这种情况下,它们将自动被服务器的信任库信任,或者他们需要将证书导出到服务器并通过一些安全的脱机将它们导入服务器 $/ 信任库过程。
    • 我的证书是由我自己的 CA 签名的(CA 对客户端和服务器来说很常见),我在客户端向我提供证书名称后导入证书。这就是我正在尝试做的事情,而“如何做到这一点”是我的问题。
    • 那么你只需要将你的CA证书导入到你服务器的信任库中。然后它将信任该 CA 签署的所有证书。
    最近更新 更多