我想用我的 tomcat 设置客户端证书身份验证。我已经为此身份验证配置了 webapp,这是我的 tomcat 配置。我使用 Windows PKI 作为证书,所以我有 pfx 文件。我的 pfx for ssl 密钥库工作正常。当我禁用客户端身份验证时,我可以通过端口 443 进行访问。
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="D:\SSL\Keystore\.keystore" keystorePass="Pass" maxHttpHeaderSize="65536"/>
此 Web 应用程序也有一个移动应用程序。我已在我的 IOS 设备上安装了 pfx 证书并尝试连接。在 Wireshark 中我可以看到
Client Hello
Server Hello, Certificate, Server Key Exchange, Certificate Request, Server Hello Done
Certificate
Client Key Exchange
Encrypted Handshake Massage
对于客户端密钥交换,使用 Diffie-Hellman 握手协议。
Diffie-Hellman Client Params
Pubkey Length: 96
Pubkey: 3e11d540564377e996b0f7d13de11838ccc7f0d00f918592...
当我通过浏览器访问 Web 应用程序时,我可以选择证书,但它没有显示我想要使用的证书。
Client Hello
Server Hello, Certificate, Server Key Exchange, Certificate Request, Server Hello Done
Certificate, Client Key Exchange, Certificate Verify, Change Cipher Spec, Encrypted Handshake Massage
Encrypted Handshake Massage
因此,看起来我没有正确的证书,或者 Web 应用程序配置不正确。我只是想确保我的 tomcat 配置中没有遗漏任何内容。
答案1
这可能是非常基本的、基本的东西,但是我已经很多次错过这些简单的东西了。
假设您的 Web 客户端在 Windows 中运行,并且是理解 Windows CAPI 的 Web 客户端,您可能希望用户证书驻留在CAPI-->当前用户-->个人-->证书,并且必须具有扩展密钥用法“clientAuth”。在这种情况下,它将由 IE 和 Chrome 中的证书选择器显示。
Firefox 有自己的功能(我相信这是为了跨操作系统保持一致),即 NSS 子系统和文件格式。据我所知,证书只能通过 Firefox 浏览器 GUI 导入到 NSS 中选项-->高级-->加密-->查看证书. 再次强调,证书必须有合理的 EKU 和约束。