Java 使用JSch的SSH内部HTTPS隧道

Java 使用JSch的SSH内部HTTPS隧道,java,http,ssh,https,jsch,Java,Http,Ssh,Https,Jsch,我想使用Java库JSch通过SSH与HTTPS服务器通信。图书馆网站上的Streamforwarding示例很容易使用,即使使用它的代码也是如此() 问题是当我想使用HttpsURLConnection类通过HTTPS进行通信时。例如,为了发出GET请求,我尝试从Channel类(来自JSch)对InputStream进行操作,并从HttpsUrlConnection对InputStream进行操作 通过SSH连接将本地端口转发到远程HTTP服务器端口: Session session = j

我想使用Java库JSch通过SSH与HTTPS服务器通信。图书馆网站上的Streamforwarding示例很容易使用,即使使用它的代码也是如此()


问题是当我想使用
HttpsURLConnection
类通过HTTPS进行通信时。例如,为了发出
GET
请求,我尝试从
Channel
类(来自JSch)对
InputStream
进行操作,并从
HttpsUrlConnection
InputStream进行操作

通过SSH连接将本地端口转发到远程HTTP服务器端口:

Session session = jsch.getSession("username", "ssh.example.com");
// ...
session.connect();

int forwardedPort = session.setPortForwardingL(0, "http.example.com", 80); 

现在,您可以将
HttpsUrlConnection
连接到
http.example.com
并将端口
forwardedPort

通过SSH连接将本地端口转发到远程http服务器端口:

Session session = jsch.getSession("username", "ssh.example.com");
// ...
session.connect();

int forwardedPort = session.setPortForwardingL(0, "http.example.com", 80); 

现在,您可以通过SSL连接
HttpsUrlConnection
http.example.com
和端口
forwardedPort

Https,但它最终会出现证书验证错误,因为服务器证书与服务器名称不匹配(例如,服务器名称www.example.org forwarded to localhost)。因此,您必须实现并使用自定义的
主机名验证程序
。通常可以通过SSL使用Https,但最终会出现证书验证错误,因为服务器证书与服务器名称不匹配(例如,服务器名称www.example.org转发到localhost)。因此,您必须实现并使用自定义的
主机名验证程序