Java 访问Jetty HttpClient中的对等证书
我正在使用Jetty HttpClient发出HTTPS请求。在建立SSL连接之后,在发送数据之前,我希望验证我是否正在与预期的服务器通信。基本上,如果我想向www.foo.com发送请求,那么我想验证服务器是否有该域名的证书 实现这一点的一种方法是创建我自己的Java 访问Jetty HttpClient中的对等证书,java,ssl,jetty,jetty-httpclient,Java,Ssl,Jetty,Jetty Httpclient,我正在使用Jetty HttpClient发出HTTPS请求。在建立SSL连接之后,在发送数据之前,我希望验证我是否正在与预期的服务器通信。基本上,如果我想向www.foo.com发送请求,那么我想验证服务器是否有该域名的证书 实现这一点的一种方法是创建我自己的TrustManager,并将其用于创建提供给HttpClient的SslContextFactory。信任管理器中的可用回调包括: checkServerTrusted(X509Certificate[] chain, String a
TrustManager
,并将其用于创建提供给HttpClient
的SslContextFactory
。信任管理器中的可用回调包括:
checkServerTrusted(X509Certificate[] chain, String authType)
checkServerTrusted(X509Certificate[] chain, String authType,
Socket socket)
checkServerTrusted(X509Certificate[] chain, String authType,
SSLEngine engine)
在所有情况下,我都可以访问证书,但不能访问原始请求(我需要原始域名)
想到的第二个选项是从我用来发出请求的HttpExchange
子代访问对等证书。例如,在调用HttpClient.send(exchange)
之后,我可以访问对等证书并执行验证。但是,似乎无法从exchange访问SSL信息(对等证书或SSLEngine
或SSLSocket
对象)
最重要的是,HttpClient本身似乎并没有对证书内容进行任何验证。这意味着我没有地方插入验证逻辑,HttpClient容易受到DNS欺骗攻击(有关该主题的讨论,请参阅)
有人能给我一些提示,告诉我在哪里可以插入服务器名称验证吗