Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 访问Jetty HttpClient中的对等证书_Java_Ssl_Jetty_Jetty Httpclient - Fatal编程技术网

Java 访问Jetty HttpClient中的对等证书

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

我正在使用Jetty HttpClient发出HTTPS请求。在建立SSL连接之后,在发送数据之前,我希望验证我是否正在与预期的服务器通信。基本上,如果我想向www.foo.com发送请求,那么我想验证服务器是否有该域名的证书

实现这一点的一种方法是创建我自己的
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欺骗攻击(有关该主题的讨论,请参阅)

有人能给我一些提示,告诉我在哪里可以插入服务器名称验证吗