我正在编写一个服务器,可选择(取决于客户端)将需要客户端证书。提供证书的客户端和不提供证书的客户端将需要通过相同的服务器端口连接到服务器。
因此,我可以在SSLContext上支持两种类型的客户端,我将调用“setWantClientAuth(true)”。在协商客户端SSLSession之后,我想获取客户端证书链(如果可用)。我看到获取客户端证书链的唯一方法是通过“sslSession.getPeerCertificates()”,如果客户端没有提供证书,很遗憾会抛出异常。
在调用getPeerCertificates之前是否还有其他方法可以确定是否提供了客户端证书,因此我可以避免不提供证书的客户端出现异常?
答案 0 :(得分:1)
在这种情况下抛出异常只是getPeerCertificate()
的API合约的一部分:
抛出: SSLPeerUnverifiedException - 如果对等方的身份尚未经过验证
处理缺少客户端身份验证的传统方法只是捕获此异常。例如,您可以查看Apache Tomcat's JSSESupport
implementation。
(他们在此版本中抓住Throwable
,而您可能只想抓住SSLPeerUnverifiedException
。)