我有一个可在Internet上使用的applet,它通过SSH隧道与内部服务器通信。必须为applet提供正确的SSH凭据。将它们编译到applet中并不是很方便;在HTML中将它们作为applet参数提供,将它们泄露到Internet;让applet从applet主机服务器下载它们但同样不那么明显。我的问题是,还有另一种我没有想到的方法,只有applet可以获得SSH凭据吗?我可以让applet使用与浏览器相同的会话ID,在这种情况下,我至少可以将其限制为经过身份验证的用户...但我真的想要一个更安全的解决方案,没有泄漏。
服务器堆栈包含Tomcat,JSF和Facelets。 Apache服务器和FTP也可用。
编辑:我应该澄清一下,除了DoS之外,我正在进行的内部服务本身是非常安全的,它更多是我关注的内部主机的安全性,也不会成为任何地方的公共隧道。 SSH PermitOpen配置元素在那里提供了很多帮助。答案 0 :(得分:5)
如果客户端的计算机必须登录到您的服务器,那么客户端将能够找出它使用的凭据。没有办法解决这个问题;如果有人愿意,他们可以嗅到自己机器的互联网流量并找到它。
如果您绝对必须使用从客户端登录的ssh隧道,我建议使用公钥认证并在主机上生成密钥,然后通过临时添加访问权限的API将公共密钥传递给服务器那把钥匙。
答案 1 :(得分:1)
不可能。没有办法区分在用户计算机上运行的Java小程序和在同一台计算机上运行的用户制作的工具 - 从您的角度来看,他们的HTTP请求和SSH流量会“闻到相同”。最好的办法是找出通过防火墙在内部服务器上公开必要端口的方法,而不是让用户自己打出必要的漏洞。
答案 2 :(得分:0)
这里定义目标存在问题。
有两种可能的情况: 1)您需要在SSH服务器上执行一些批处理(命令序列)而用户不知道这一点 2)您需要让用户以有限的方式与服务器进行交互。
在第一种情况下,您可以将批处理发送到HTTP服务器,并让HTTP服务器连接到SSH服务器。
在第二种情况下,您通过applet向用户提供SSH访问,这与通过他最喜欢的SSH客户端提供用户访问没有什么不同。因此,您需要为每个用户提供不同的SSH凭据(并将它们传递给applet),这就是全部 - 保护凭据是用户的工作,同时您可以添加一些安全措施,例如限制IP访问。
最后我要注意,具有有限功能的自定义SSH服务器也可能是一个解决方案。
答案 3 :(得分:0)
您要发布一个有权连接到SSH服务器的小程序。但是您不想发布凭据。这没有任何意义,因为拥有连接到SSH服务器的权限和拥有连接到SSH服务器的凭据是等效的。除了连接到SSH服务器外,您无法使用凭据进行任何其他操作。这是applet应该具有的权限。
答案 4 :(得分:-1)
我认为你最好的方法是在防火墙之外创建某种代理,使用简单的未加密TCP连接,然后通过安全服务器建立连接到applet ,代理,SSH连接通过开放连接进行隧道传输。