Java 使用JSch的SSH内部HTTPS隧道
我想使用Java库JSch通过SSH与HTTPS服务器通信。图书馆网站上的Streamforwarding示例很容易使用,即使使用它的代码也是如此()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
问题是当我想使用
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)。因此,您必须实现并使用自定义的主机名验证程序
。