【发布时间】:2014-06-26 04:17:20
【问题描述】:
我正在尝试在 Java 中执行相互身份验证。我试图实现的结构是:具有自签名证书的服务器充当 CA,签署客户端证书。因此,这就是我在每个密钥库/信任库中保留的内容:
客户:
密钥库:
- 客户端的 SSL 密钥对。
- 服务器签署的证书(与密钥对相关)。
信任库:
- 服务器的自签名证书。
服务器
密钥库:
- 服务器的 SSL 密钥对。
- 自签名证书(与密钥对相关)。
信任库:
- 服务器的自签名证书。
我能够执行服务器的身份验证,但是当我在服务器上启用 setNeedClientAuth(true) 时,我在日志中收到以下错误: http://pastebin.com/raw.php?i=P52Qq89z 所以服务器似乎验证了,但客户端无法提供 CA 链,可能是它的 keystore 的内容有问题吗?
我使用 openSSL 生成密钥和证书,使用 KeyStore Explorer 创建密钥库(在使用 keytool 几天后不成功)和 JDK 1.7.0_51
更新:问题已按照以下说明解决:https://stackoverflow.com/a/12150604/2891462 CA 自签名证书的创建方式存在问题(显然,这只是 JDK 1.7 中的问题)。
【问题讨论】:
-
自签名证书主要在单独使用时有用。如果您也打算将其用作 CA 证书,则不妨将 CA 证书和服务器证书分开。从长远来看,它肯定会有用。