1

我正在编写一个服务器,它可以选择(取决于客户端)需要一个客户端证书。提供证书的客户端和不提供证书的客户端需要通过相同的服务器端口连接到服务器。

为了在 SSLContext 上支持这两种类型的客户端,我将调用“setWantClientAuth(true)”。在协商客户端 SSLSession 后,我想获取客户端证书链(如果可用)。我看到获取客户端证书链的唯一方法是通过“sslSession.getPeerCertificates()”,如果客户端没有提供证书,不幸的是会抛出异常。

有没有其他方法可以确定在调用 getPeerCertificates 之前是否提供了客户端证书,这样我就可以避免不提供证书的客户端的异常?

4

1 回答 1

2

在这种情况下抛出异常只是 API 契约的一部分getPeerCertificate()

抛出: SSLPeerUnverifiedException - 如果尚未验证对等方的身份

处理缺少客户端身份验证的传统方法只是捕获此异常。例如,您可以查看Apache Tomcat 的JSSESupport实现

(他们Throwable在这个版本中捕获,而您可能只想捕获SSLPeerUnverifiedException。)

于 2012-05-04T17:21:12.863 回答